角色视图 数据逻辑 依ecs 框架进行重构
This commit is contained in:
@@ -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}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user