消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

185 lines
4.9 KiB

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<number, keyof AttrResult> = {
[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<number, (param: number, weapon: ITableWeapon2) => 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);
}
}