feat(英雄系统): 实现英雄升级和经验系统
- 在 HeroViewComp 中扩展怪物死亡事件数据,包含等级和类型信息 - 在 SingletonModuleComp 中实现完整的经验计算和升级逻辑 - 在 MissionComp 中添加经验获取和升级事件处理 - 在 RogueConfig 中添加经验计算公式和怪物经验配置 - 添加等级同步机制防止ECS数据覆盖
This commit is contained in:
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user