Files
pixelheros/assets/script/game/hero/FieldSkillHelper.ts
pan db300bd302 feat(hero): 新增驻场光环系统与配置
1. 为英雄属性组件添加Field触发类型字段,支持存储驻场光环UUID列表
2. 扩展英雄进化配置,支持覆盖驻场光环配置
3. 优化FieldSkillHelper,优先使用进化后的驻场光环配置
4. 新增占卜师战前强攻限时Buff与援护弓手、占卜师、治愈牧师的6级进化驻场光环配置
5. 补充对应英雄的技能描述与进化逻辑注释
2026-07-24 10:19:12 +08:00

67 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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";
import { EquipBoxComp } from "../map/EquipBoxComp";
/**
* 驻场技能(光环属性)计算辅助类
*
* 核心职责:
* 统一管理全场存活英雄带来的全局加成属性计算。
* 解耦原先写在 HeroAttrsComp 中的静态计算逻辑,符合单一职责原则。
*/
export class FieldSkillHelper {
/** 获取指定驻场技能类型的总加成值(计算存活的友方英雄 + 场上的驻场技能卡) */
public static getFieldSkillTotalValue(type: FieldSkillType): number {
let total = 0;
// 1. 统计英雄带来的驻场技能加成
// 读 model.field运行时优先使用 evolve 覆盖后的驻场配置,未升级时回退到 heroInfo 基础配置
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];
const fields = model.field ?? heroConfig?.field;
if (fields) {
for (const skillUuid of fields) {
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;
}
}
});
// 3. 统计装备盒(装备卡)带来的驻场技能加成
ecs.query(ecs.allOf(EquipBoxComp)).forEach((entity: ecs.Entity) => {
const equipBox = entity.get(EquipBoxComp);
if (!equipBox || !equipBox.field || equipBox.field.length === 0) return;
for (const skillUuid of equipBox.field) {
const skillConfig = FieldSkillSet[skillUuid];
if (skillConfig && skillConfig.type === type) {
total += skillConfig.value;
}
}
});
return total;
}
}