feat(英雄系统): 实现英雄升级和经验系统

- 在 HeroViewComp 中扩展怪物死亡事件数据,包含等级和类型信息
- 在 SingletonModuleComp 中实现完整的经验计算和升级逻辑
- 在 MissionComp 中添加经验获取和升级事件处理
- 在 RogueConfig 中添加经验计算公式和怪物经验配置
- 添加等级同步机制防止ECS数据覆盖
This commit is contained in:
walkpan
2026-01-03 10:09:35 +08:00
parent 7583ca7a37
commit 56452795bb
4 changed files with 317 additions and 185 deletions

View File

@@ -3,11 +3,13 @@ import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ec
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { smc } from "../common/SingletonModuleComp";
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
import { FightSet} from "../common/config/GameSet";
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
import { getLevelExp, getMonsterExp, MonsterCost, MonType } from "./RogueConfig";
import { GameEvent } from "../common/config/GameEvent";
import { HeroViewComp } from "../hero/HeroViewComp";
import { UIID } from "../common/config/GameUIConfig";
import { SkillView } from "../skill/SkillView";
import { FightSet } from "../common/config/GameSet";
const { ccclass, property } = _decorator;
@@ -33,7 +35,7 @@ export class MissionComp extends CCComp {
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.show_uplv_button,this)
this.on(GameEvent.CanUpdateLv,this.onLevelUp,this)
}
protected update(dt: number): void {
if(!smc.mission.play||smc.mission.pause){
@@ -45,6 +47,28 @@ export class MissionComp extends CCComp {
}
}
// 升级奖励触发
onLevelUp(event: string, args: any) {
console.log(`[MissionComp] 英雄升级到 ${args.lv} 级!`);
// 同步等级到 ECS 组件,防止被 updateHeroInfo 覆盖回旧值
ecs.query(ecs.allOf(HeroAttrsComp)).forEach(e => {
const attrs = e.get(HeroAttrsComp);
if (attrs && attrs.is_master) {
attrs.lv = args.lv;
// 这里可以扩展:更新英雄属性,如 HP 上限等
}
});
// 触发奖励选择界面 (暂时留空)
this.showLevelUpReward();
}
showLevelUpReward() {
// TODO: 显示三选一技能/属性奖励界面
console.log("[MissionComp] 显示升级奖励界面 (TODO)");
}
//奖励发放
do_reward(){
// 奖励发放
@@ -56,7 +80,31 @@ 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) {
// 默认值处理
const level = data.lv || 1;
// 类型推断
let type = MonType.NORMAL;
if (data.is_boss) {
type = MonType.BOSS;
} else if (data.is_elite) {
type = MonType.ELITE;
} else {
// 兜底策略根据Cost判断是否为精英怪
const cost = MonsterCost[data.uuid] || 1;
if (cost >= 10) {
type = MonType.ELITE;
}
}
// 获取怪物经验
const exp = getMonsterExp(data.uuid, level, type);
smc.updateHeroExp(exp);
}
}
do_hero_dead(event:any,data:any){