refactor: 移除战斗结束相关的FEnd触发逻辑
此次提交全面清理了所有与战斗结束(FEnd)相关的代码: 1. 移除了Hero、Monster等实体中的fend属性与运行时处理 2. 删除了SkillTriggerHelper中的FEnd触发分支 3. 移除了GameEvent中的FightEnd事件与相关监听 4. 清理了配置文件中的FEnd相关枚举、字段与装备 5. 重构了MissionComp的回合逻辑,不再触发战后技能 6. 更新了注释与文档,移除过时的FEnd相关说明 彻底移除了已不再使用的战斗结束触发机制,简化了代码架构。
This commit is contained in:
@@ -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 弹窗结算
|
||||
// 直接切入 BattleEnd,2s 后由 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秒后自动进入下一回合的准备阶段
|
||||
// 在新一回合到来时,先进入 BattleEnd,2秒后自动进入下一回合的准备阶段
|
||||
this.changePhase(MissionPhase.BattleEnd);
|
||||
} else {
|
||||
// 第1回合不需要结束上一回合,延迟一点播放提示,避免被开始游戏的loading遮挡
|
||||
|
||||
Reference in New Issue
Block a user