角色视图 数据逻辑 依ecs 框架进行重构

This commit is contained in:
2025-10-30 08:56:37 +08:00
parent edb7f23918
commit a79cb9f35d
10 changed files with 1274 additions and 602 deletions

View File

@@ -12,18 +12,20 @@ import { SkillSet } from "../common/config/SkillSet";
import { time } from "console";
import { getNeAttrs, getAttrs ,Attrs} from "../common/config/HeroAttrs";
import { TalComp } from "./TalComp";
import { EBusComp } from "./EBusComp";
/** 角色实体 */
@ecs.register(`Hero`)
export class Hero extends ecs.Entity {
HeroModel!: HeroModelComp;
HeroView!: HeroViewComp;
View!: HeroViewComp;
BattleMove!: BattleMoveComp;
protected init() {
this.addComponents<ecs.Comp>(
BattleMoveComp,
HeroModelComp,
TalComp
TalComp,
EBusComp,
);
}
@@ -31,6 +33,7 @@ export class Hero extends ecs.Entity {
this.remove(HeroViewComp);
this.remove(HeroModelComp);
this.remove(TalComp);
this.remove(EBusComp);
super.destroy();
}
@@ -49,7 +52,56 @@ export class Hero extends ecs.Entity {
node.parent = scene.entityLayer!.node!
node.setPosition(pos)
// console.log("hero load",pos)
var hv = this.hero_init(uuid,node)
var hv = node.getComponent(HeroViewComp)!;
const model = this.get(HeroModelComp);
let hero = HeroInfo[uuid]; // 共用英雄数据
// 设置 View 层属性(表现相关)
hv.scale = 1;
hv.box_group = BoxSet.HERO;
// 设置 Model 层属性(数据相关)
model.hero_uuid = uuid;
model.hero_name = hero.name;
model.lv = hero.lv ? hero.lv : 1;
model.type = hero.type;
model.fac = FacSet.HERO;
model.is_master = true;
// 设置技能
for(let i=0; i<hero.skills.length; i++){
let skill = {
uuid: SkillSet[hero.skills[i]].uuid,
cd_max: SkillSet[hero.skills[i]].cd,
cost: SkillSet[hero.skills[i]].cost,
cd: 0
};
model.skills.push(skill);
}
// 设置基础属性
model.base_ap = hero.ap;
model.base_map = hero.mp;
model.base_def = hero.def;
model.base_hp = hero.hp;
model.base_mp = hero.mp;
model.base_dis = hero.dis;
model.base_speed = hero.speed;
// 初始化属性数组
model.Attrs = getAttrs();
model.NeAttrs = getNeAttrs();
model.hp = model.Attrs[Attrs.HP_MAX] = model.base_hp;
model.mp = model.Attrs[Attrs.MP_MAX] = model.base_mp;
model.Attrs[Attrs.DEF] = model.base_def;
model.Attrs[Attrs.AP] = model.base_ap;
model.Attrs[Attrs.MAP] = model.base_map;
model.Attrs[Attrs.SPEED] = hero.speed;
model.Attrs[Attrs.DIS] = hero.dis;
// 初始化 buff/debuff 系统
model.initAttrs();
this.add(hv);
oops.message.dispatchEvent(GameEvent.MasterCalled,{uuid:uuid})
const move = this.get(BattleMoveComp);
@@ -63,40 +115,28 @@ export class Hero extends ecs.Entity {
}
smc.vmdata.mission_data.hero_num++
}
hero_init(uuid:number=1001,node:Node) {
var hv = node.getComponent(HeroViewComp)!;
let hero= HeroInfo[uuid] // 共用英雄数据
hv.scale = 1;
hv.is_master=true;
hv.lv=hero.lv?hero.lv:1
hv.fac = FacSet.HERO;
hv.type = hero.type;
hv.box_group = BoxSet.HERO;
hv.hero_uuid= uuid;
hv.hero_name= hero.name;
for(let i=0;i<hero.skills.length;i++){
let skill={ uuid:SkillSet[hero.skills[i]].uuid, cd_max:SkillSet[hero.skills[i]].cd,cost:SkillSet[hero.skills[i]].cost,cd:0 }
hv.skills.push(skill)
}
hv.base_ap=hero.ap
hv.base_map=hero.mp
hv.base_def=hero.def
hv.base_hp=hero.hp
hv.base_mp=hero.mp
hv.base_dis=hero.dis
hv.base_speed=hero.speed
hv.Attrs=getAttrs()
hv.NeAttrs=getNeAttrs()
hv.hp=hv.Attrs[Attrs.HP_MAX]=hv.base_hp
hv.mp=hv.Attrs[Attrs.MP_MAX]=hv.base_mp
hv.Attrs[Attrs.DEF]=hv.base_def
hv.Attrs[Attrs.AP]=hv.base_ap
hv.Attrs[Attrs.MAP]=hv.base_map
hv.Attrs[Attrs.SPEED]=hero.speed
hv.Attrs[Attrs.DIS]=hero.dis
reset() {
// 注: 自定义释放逻辑,视图层实现 ecs.IComp 接口的 ecs 组件需要手动释放
super.destroy();
}
// 初始化 buff/debuff 系统
hv.initAttrs();
return hv
}
export class HeroLifecycleSystem extends ecs.ComblockSystem
implements ecs.IEntityEnterSystem, ecs.IEntityRemoveSystem {
filter() {
return ecs.allOf(HeroModelComp);
}
entityEnter(e: ecs.Entity): void {
// 英雄实体创建时的特殊处理
console.log(`英雄进入世界: ${e.get(HeroModelComp).hero_name}`);
}
entityRemove(e: ecs.Entity): void {
// 英雄实体销毁时的清理工作
console.log(`英雄离开世界: ${e.get(HeroModelComp).hero_name}`);
}
}