feat(战斗): 实现战斗时间结束和怪物全灭自动推进波次

- 将战斗时间从600秒改为30秒,便于测试
- 战斗倒计时归零或场上怪物全灭时,自动结束当前波次并进入准备阶段
- 怪物波次切换时,新怪物继承被覆盖旧怪物的部分属性(生命值和攻击力)
- 调整波次初始化逻辑,确保战斗时间在每波开始时重置
- 新增事件 PhasePrepareEnd 和 TimeUpAdvanceWave 协调阶段切换
This commit is contained in:
panw
2026-04-15 15:48:41 +08:00
parent 3a07a7e9d2
commit 083a530a72
3 changed files with 82 additions and 19 deletions

View File

@@ -214,6 +214,11 @@ export class MissionComp extends CCComp {
smc.vmdata.mission_data.fight_time+=dt
this.FightTime-=dt
this.update_time();
if (this.FightTime <= 0) {
// 时间到了,自动结束战斗进入准备阶段
this.FightTime = FightSet.FiIGHT_TIME;
oops.message.dispatchEvent("TimeUpAdvanceWave");
}
}
}
@@ -321,6 +326,7 @@ export class MissionComp extends CCComp {
case MissionPhase.PrepareEnd:
if (this.start_btn && this.start_btn.isValid) this.start_btn.active = false;
oops.message.dispatchEvent("PhasePrepareEnd");
break;
case MissionPhase.BattleStart:
@@ -558,6 +564,7 @@ export class MissionComp extends CCComp {
smc.vmdata.mission_data.level = wave;
this.grantPrepareCoinByWave(wave);
this.lastTimeSecond = -1;
this.FightTime = FightSet.FiIGHT_TIME;
this.update_time();
// 检查并推送卡池升级事件
@@ -639,6 +646,14 @@ export class MissionComp extends CCComp {
}
});
this.handleHeroWipe(heroCount);
// 怪物全灭检测:如果战斗阶段场上没有任何活着的怪物,直接结束战斗进入下一波的准备阶段
if (monsterCount === 0 && smc.mission.play && !smc.mission.pause && this.currentPhase === MissionPhase.Battle) {
this.FightTime = FightSet.FiIGHT_TIME;
oops.message.dispatchEvent("TimeUpAdvanceWave");
return;
}
smc.vmdata.mission_data.mon_num = monsterCount;
const { max, resume } = this.getMonsterThresholds();
smc.vmdata.mission_data.mon_max = max;