Files
pixelheros/assets/script/game/hero/FieldSkillHelper.ts
panFD 988c669bba refactor(rogue): 重构肉鸽刷怪系统,新增动态难度与分批刷怪
1. 重构RogueConfig:替换旧强化系统为动态难度调节器,调整波次配置为20波通关,新增技能池与阵营适配
2. 优化刷怪逻辑:实现每波3批10秒间隔的分批刷怪,调整怪物上限为18只
3. 新增驻场技能支持:添加resolveFieldByLv处理等级化驻场技能,扩展FieldSkillHelper支持多阵营统计
4. 调整关卡判定:将最大波次从15改为20,新增英雄死亡计数与难度动态调节
5. 优化代码结构:移除废弃字段,统一技能注入方式,修复槽位复用逻辑
2026-08-04 20:53:59 +08:00

77 lines
3.2 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 { 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 {
return FieldSkillHelper.getFieldSkillTotalValueForFac(type, FacSet.HERO);
}
/**
* 获取指定阵营的驻场技能总加成值
* @param type 驻场技能类型
* @param fac 阵营FacSet.HERO / FacSet.MON默认 HERO
* @returns 总加成值
*/
public static getFieldSkillTotalValueForFac(type: FieldSkillType, fac: number = FacSet.HERO): number {
let total = 0;
// 1. 统计英雄/怪物带来的驻场技能加成
// 读 model.runtime_field已按当前等级 resolve 的 uuid 列表)
ecs.query(ecs.allOf(HeroAttrsComp)).forEach((entity: ecs.Entity) => {
const model = entity.get(HeroAttrsComp);
if (!model || model.is_dead || model.fac !== fac) return;
const fields = model.runtime_field;
if (fields) {
for (const skillUuid of fields) {
const skillConfig = FieldSkillSet[skillUuid];
if (skillConfig && skillConfig.type === type) {
total += skillConfig.value;
}
}
}
});
// 2. 统计技能盒子(技能卡)带来的驻场技能加成(仅英雄阵营)
if (fac === FacSet.HERO) {
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;
}
}