import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; 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"; /** * 驻场技能(光环属性)计算辅助类 * * 核心职责: * 统一管理全场存活英雄带来的全局加成属性计算。 * 解耦原先写在 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; const heroConfig = HeroInfo[model.hero_uuid]; if (heroConfig && heroConfig.field) { for (const skillUuid of heroConfig.field) { const skillConfig = FieldSkillSet[skillUuid]; if (skillConfig && skillConfig.type === type) { total += skillConfig.value; } } } }); // 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; } }