feat(field-skill): 新增驻场技能卡牌支持与属性计算逻辑

为CardConfig接口新增field字段用于配置驻场技能UUID数组
新增两个示例驻场光环卡牌
优化FieldSkillHelper统计场上技能卡牌的属性加成
调整SkillBoxComp逻辑:驻场技能隐藏剩余次数、跳过定期触发
This commit is contained in:
panFD
2026-06-04 21:21:34 +08:00
parent 998300f721
commit c1f1aea387
3 changed files with 46 additions and 5 deletions

View File

@@ -3,6 +3,7 @@ import { FacSet } from "../common/config/GameSet";
import { HeroInfo } from "../common/config/heroSet";
import { FieldSkillSet, FieldSkillType } from "../common/config/SkillSet";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { SkillBoxComp } from "../map/SkillBoxComp";
/**
* 驻场技能(光环属性)计算辅助类
@@ -12,9 +13,11 @@ import { HeroAttrsComp } from "./HeroAttrsComp";
* 解耦原先写在 HeroAttrsComp 中的静态计算逻辑,符合单一职责原则。
*/
export class FieldSkillHelper {
/** 获取指定驻场技能类型的总加成值(计算存活的友方英雄) */
/** 获取指定驻场技能类型的总加成值(计算存活的友方英雄 + 场上的驻场技能卡 */
public static getFieldSkillTotalValue(type: FieldSkillType): number {
let total = 0;
// 1. 统计英雄带来的驻场技能加成
ecs.query(ecs.allOf(HeroAttrsComp)).forEach((entity: ecs.Entity) => {
const model = entity.get(HeroAttrsComp);
if (!model || model.is_dead || model.fac !== FacSet.HERO) return;
@@ -28,6 +31,20 @@ export class FieldSkillHelper {
}
}
});
// 2. 统计技能盒子(技能卡)带来的驻场技能加成
ecs.query(ecs.allOf(SkillBoxComp)).forEach((entity: ecs.Entity) => {
const skillBox = entity.get(SkillBoxComp);
if (!skillBox || !skillBox.field || skillBox.field.length === 0) return;
for (const skillUuid of skillBox.field) {
const skillConfig = FieldSkillSet[skillUuid];
if (skillConfig && skillConfig.type === type) {
total += skillConfig.value;
}
}
});
return total;
}
}