feat(战斗系统): 实现英雄复活机制并优化结算界面

- 在MissionComp中添加复活次数管理及复活成功回调
- 修改VictoryComp支持复活功能,包括广告复活和英雄状态恢复
- 调整结算界面布局和按钮显示逻辑
- 优化游戏结束流程,合并FightEnd逻辑
- 修改HeroViewComp中realDeadTime为更合理的值
This commit is contained in:
walkpan
2026-01-03 18:50:00 +08:00
parent acb564123d
commit b8fb70c0cf
4 changed files with 140 additions and 24 deletions

View File

@@ -22,6 +22,10 @@ export class MissionComp extends CCComp {
// VictoryComp:any = null;
// reward:number = 0;
// reward_num:number = 0;
/** 剩余复活次数 */
revive_times: number = 1;
rewards:any[]=[]
game_data:any={
exp:0,
@@ -32,10 +36,11 @@ export class MissionComp extends CCComp {
this.on(GameEvent.MissionStart,this.mission_start,this)
this.on(GameEvent.MonDead,this.do_mon_dead,this)
this.on(GameEvent.HeroDead,this.do_hero_dead,this)
this.on(GameEvent.FightEnd,this.fight_end,this)
// this.on(GameEvent.FightEnd,this.fight_end,this)
this.on(GameEvent.MissionEnd,this.mission_end,this)
this.on(GameEvent.DO_AD_BACK,this.do_ad,this)
this.on(GameEvent.CanUpdateLv,this.onLevelUp,this)
this.on(GameEvent.ReviveSuccess, this.onReviveSuccess, this)
}
protected update(dt: number): void {
if(!smc.mission.play||smc.mission.pause){
@@ -80,7 +85,6 @@ export class MissionComp extends CCComp {
do_mon_dead(event:any,data:any){
// console.log("[MissionComp] do_mon_dead",event,data)
smc.vmdata.mission_data.mon_num--
// 计算并增加经验
// data 应该是怪物组件或包含怪物信息的对象
if (data && data.uuid) {
@@ -108,12 +112,10 @@ export class MissionComp extends CCComp {
}
do_hero_dead(event:any,data:any){
// console.log("[MissionComp] do_hero_dead",event,data)
// smc.vmdata.mission_data.hero_num--
// if(smc.vmdata.mission_data.hero_num<=0) {
// oops.message.dispatchEvent(GameEvent.FightEnd,{victory:false})
// oops.gui.open(UIID.Victory,{victory:false,rewards:this.rewards,game_data:this.game_data})
// }
// console.log("[MissionComp] do_hero_dead",event,data)
// 收到 HeroDead 说明已经没有复活次数了,打开失败界面,等待玩家选择(复活或结束)
// oops.message.dispatchEvent(GameEvent.FightEnd,{victory:false}) // 暂时不分发结束事件
this.open_Victory(null,true)
}
do_ad(){
if(this.ad_back()){
@@ -158,9 +160,26 @@ export class MissionComp extends CCComp {
}
to_end_fight(){
oops.message.dispatchEvent(GameEvent.FightEnd,{victory:false})
oops.gui.open(UIID.Victory,{victory:false,rewards:this.rewards,game_data:this.game_data})
open_Victory(e:any,is_hero_dead: boolean = false){
// 暂停游戏循环和怪物行为
// smc.mission.play = false;
smc.mission.stop_mon_action = true;
// oops.message.dispatchEvent(GameEvent.FightEnd,{victory:false})
console.log("[MissionComp] open_Victory",is_hero_dead,this.revive_times)
oops.gui.open(UIID.Victory,{
victory:false,
rewards:this.rewards,
game_data:this.game_data,
can_revive: is_hero_dead && this.revive_times > 0
})
}
/** 复活成功回调,扣除次数 */
onReviveSuccess() {
if (this.revive_times > 0) {
this.revive_times--;
console.log(`[MissionComp] 玩家复活,剩余次数: ${this.revive_times}`);
}
}
@@ -176,6 +195,11 @@ export class MissionComp extends CCComp {
mission_end(){
// console.log("[MissionComp] mission_end")
// 合并 FightEnd 逻辑:清理组件、停止游戏循环
smc.mission.play=false
smc.mission.pause=false
this.cleanComponents()
this.node.active=false
}
@@ -188,6 +212,7 @@ export class MissionComp extends CCComp {
smc.vmdata.mission_data.level=0
smc.vmdata.mission_data.time=15*60
this.rewards=[] // 改为数组,用于存储掉落物品列表
this.revive_times = 1; // 每次任务开始重置复活次数
// console.log("[MissionComp]局内数据初始化",smc.vmdata.mission_data)
}