import { Singleton } from "../../mx/tools/Singleton"; /**武器类型 * * 武器类型 1、减速 2、燃烧 3、感电 4、物理 5、通用 */ export enum WEAPON_TYPE{ /**减速*/ Slow = 1, /**燃烧*/ Burn = 2, /**感电*/ Shock = 3, /**物理*/ Physic = 4, /**通用*/ Common = 5, } /**武器品质*/ export enum QUAILITY{ /**普通*/ Normal = 1, /**精英*/ Elite = 2, /**稀有*/ Rare = 3, /**传说*/ Legend = 4, } /**加成类型*/ export enum AddType{ /**攻击加成1*/ Atk = 1, /**角色冷却*/ CD = 2, /**暴击*/ Crit = 3, /**攻击加成2*/ Atk2= 4, /**伤害加成*/ DamageAdd = 5, /**暴击伤害加成*/ CritDamageAdd = 6, /**所有武器点燃单位额外加成*/ IgniteAdd = 7, /**感电单位额外加成*/ ShockAdd = 8, } /**穿戴加成类型 1 指定武器, 2指定品质武器 3所有武器加成 4指定类型的武器*/ export enum WearingAddType{ /**指定武器加成*/ SpecifyWeapon = 1, /**指定品质武器加成*/ SpecifyQualityWeapon = 2, /**所有武器加成*/ AllWeapon = 3, /**指定类型武器加成*/ SpecifyAddType = 4, } // types/pet.ts export interface AttrResult { atkAdd: number; cdAdd: number; critAdd: number; atk2Add: number; damageAdd: number; critDamageAdd: number; igniteAdd: number; shockAdd: number; } export const ATTR_TYPE_MAP: Record = { [AddType.Atk]: 'atkAdd', [AddType.CD]: 'cdAdd', [AddType.Crit]: 'critAdd', [AddType.Atk2]: 'atk2Add', [AddType.DamageAdd]: 'damageAdd', [AddType.CritDamageAdd]: 'critDamageAdd', [AddType.IgniteAdd]: 'igniteAdd', [AddType.ShockAdd]: 'shockAdd', }; // 3. 【核心优化】定义条件判断策略表 (彻底替代 switch/case) // 键:WearingAddType 枚举值 // 值:一个函数,接收 (配置参数, 武器数据),返回 boolean export const CONDITION_STRATEGIES: Record boolean> = { [WearingAddType.SpecifyWeapon]: (param, weapon) => param === weapon.id, // 假设 weapon.id 是武器ID [WearingAddType.SpecifyQualityWeapon]: (param, weapon) => param === weapon.quality, [WearingAddType.AllWeapon]: () => true, // 所有武器直接返回 true [WearingAddType.SpecifyAddType]: (param, weapon) => param === weapon.type || weapon.type == WEAPON_TYPE.Common, //5是通用武器加成 }; export class AttributeInterface extends Singleton { // 配置:有多少个来源参与了加成计算? /** * 通用计算核心 * @param weaponId 武器ID * @param attrKey 属性键名 (如 'atkAdd', 'critAdd' 等) */ private _calculateAttr(weaponId: number, attrKey: keyof AttrResult): number { // 1. 获取三个来源的数据 // const petAttr = gg.pet.getPetAttr(weaponId); // const allSkinAttr = gg.skin.getSkinGlobalAdd(); // const skinAttr = gg.skin.getSkinAttrByWeapon(weaponId); // // 2. 累加对应属性的值 // const total = // (petAttr[attrKey] || 0) + // (allSkinAttr[attrKey] || 0) + // (skinAttr[attrKey] || 0); // return total return 1 } /**获取攻击力额外属性 */ getAttrAtk1Value(weaponId: number): number { return this._calculateAttr(weaponId, 'atkAdd'); } /**获取冷却额外属性 */ getAttrCDValue(weaponId: number): number { return this._calculateAttr(weaponId, 'cdAdd'); } /**获取暴击额外属性 */ getAttrCritValue(weaponId: number): number { return this._calculateAttr(weaponId, 'critAdd'); } /**获取攻击加成2额外属性 */ getAttrAtk2Value(weaponId: number): number { return this._calculateAttr(weaponId, 'atk2Add'); } /**获取伤害加成额外属性 */ getAttrDamageValue(weaponId: number): number { return this._calculateAttr(weaponId, 'damageAdd'); } /**获取暴击伤害加成额外属性 */ getAttrCritDamageAddValue(weaponId: number): number { return this._calculateAttr(weaponId, 'critDamageAdd'); } /**获取点燃单位额外加成 */ getAttrIgniteAddValue(weaponId: number): number { return this._calculateAttr(weaponId, 'igniteAdd'); } /**获取感电单位额外加成 */ getAttrShockAddValue(weaponId: number): number { return this._calculateAttr(weaponId, 'shockAdd'); } // 💡 进阶技巧:如果你需要通过 AddType 枚举动态获取值,可以加这个万能方法 getAttrByType(weaponId: number, type: AddType): number | null { const key = ATTR_TYPE_MAP[type]; if (!key) { console.warn(`未知的属性类型: ${type}`); return null; } return this._calculateAttr(weaponId, key); } }