refactor: 移除战斗结束相关的FEnd触发逻辑

此次提交全面清理了所有与战斗结束(FEnd)相关的代码:
1. 移除了Hero、Monster等实体中的fend属性与运行时处理
2. 删除了SkillTriggerHelper中的FEnd触发分支
3. 移除了GameEvent中的FightEnd事件与相关监听
4. 清理了配置文件中的FEnd相关枚举、字段与装备
5. 重构了MissionComp的回合逻辑,不再触发战后技能
6. 更新了注释与文档,移除过时的FEnd相关说明

彻底移除了已不再使用的战斗结束触发机制,简化了代码架构。
This commit is contained in:
pan
2026-08-14 15:28:22 +08:00
parent d759689269
commit 2d11246838
20 changed files with 386 additions and 101 deletions

View File

@@ -225,7 +225,7 @@ export class MissionComp extends CCComp {
protected update(dt: number): void {
if (!smc.mission.play) return
// 如果是暂停状态,且不在 BattleEnd 阶段(全灭时需要播放完 fend 技能动画并自动流转),才真正停止 update 逻辑
// 如果是暂停状态,且不在 BattleEnd 阶段(全灭时需要自动流转),才真正停止 update 逻辑
if (smc.mission.pause && this.currentPhase !== MissionPhase.BattleEnd) return
// 回合间倒计时PrepareStart 复用为倒计时阶段5 秒后自动进入下一回合
@@ -515,7 +515,7 @@ export class MissionComp extends CCComp {
case MissionPhase.BattleStart:
// 触发战斗开始技能fstart
this.triggerHeroBattleSkills(true);
this.triggerHeroBattleSkills();
// Boss 预警Boss 同步场立即登场eta=0
if (this.isBossWave) {
oops.message.dispatchEvent(GameEvent.BossWarning, {
@@ -576,14 +576,9 @@ export class MissionComp extends CCComp {
smc.vmdata.scores.passed_wave_20 = true;
}
// 触发战斗结束技能fend
this.triggerHeroBattleSkills(false);
// 战斗结束阶段,按 FightSet.WAVE_HEAL_RATE 恢复所有英雄血量
this.healAllHeroes();
// 【新增】派发每回合战斗结束事件,供卡牌技能监听(区别于整局结束的 MissionEnd
oops.message.dispatchEvent(GameEvent.FightEnd);
break;
case MissionPhase.Settle:
@@ -669,32 +664,26 @@ export class MissionComp extends CCComp {
* - 标记非战斗
* - 暂停刷怪
* - 显示开始按钮
* - 触发英雄战斗结束技能
*/
private enterPreparePhase() {
this.changePhase(MissionPhase.PrepareStart);
}
/**
* 触发英雄的战斗开始/结束技能
* @param isStart 是否为战斗开始
* 触发英雄的战斗开始技能
*/
private triggerHeroBattleSkills(isStart: boolean) {
private triggerHeroBattleSkills() {
let triggerCount = 1;
if (isStart) {
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.StartCount);
} else {
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.EndCount);
}
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.StartCount);
triggerCount = Math.max(1, Math.floor(triggerCount));
ecs.query(this.heroAttrsMatcher).forEach(entity => {
const attrs = entity.get(HeroAttrsComp);
const view = entity.get(HeroViewComp);
if (!attrs || !view || attrs.is_dead || attrs.fac !== FacSet.HERO) return;
// 触发战斗开始/结束技能
// 触发战斗开始技能
for (let i = 0; i < triggerCount; i++) {
SkillTriggerHelper.trigger(isStart ? SkillTriggerType.FStart : SkillTriggerType.FEnd, attrs, view);
SkillTriggerHelper.trigger(SkillTriggerType.FStart, attrs, view);
}
});
}
@@ -755,8 +744,7 @@ export class MissionComp extends CCComp {
open_Victory(e: any, is_hero_dead: boolean = false) {
// 战斗失败或胜利,标记暂停状态以切断回合流转逻辑
smc.mission.pause = true;
// 直接切入 BattleEnd触发 fend 表现
// 倒计时逻辑已在 update 中由 PhaseTime 接管2s 后将触发 autoNextPhase 弹窗结算
// 直接切入 BattleEnd2s 后由 autoNextPhase 自动流转弹窗结算
this.changePhase(MissionPhase.BattleEnd);
}
@@ -859,7 +847,7 @@ export class MissionComp extends CCComp {
this.isBossWave = true; // 单场 Boss 战,恒为 Boss 战(超时阈值/预警走 Boss 档)
if (wave > 1) {
// 在新一回合到来时,先进入 BattleEnd触发上一回合的战斗结束技能 (fend)2秒后自动进入下一回合的准备阶段
// 在新一回合到来时,先进入 BattleEnd2秒后自动进入下一回合的准备阶段
this.changePhase(MissionPhase.BattleEnd);
} else {
// 第1回合不需要结束上一回合延迟一点播放提示避免被开始游戏的loading遮挡