mirror of
https://github.com/kirikayakazuto/CocosCreator_ECS
synced 2024-12-27 12:08:43 +00:00
84 lines
3.4 KiB
TypeScript
84 lines
3.4 KiB
TypeScript
import { EventDeath, EventGraphicsDraw, EventHPChange, EventHurt, EventRun, EventStand } from "../../Struct/NodeEvent";
|
|
import { ComAttackable } from "../components/ComAttackable";
|
|
import { ComBehaviorTree } from "../components/ComBehaviorTree";
|
|
import { ComCocosNode } from "../components/ComCocosNode";
|
|
import { ComMonitor } from "../components/ComMonitor";
|
|
import { ComMovable } from "../components/ComMovable";
|
|
import { ComNodeConfig } from "../components/ComNodeConfig";
|
|
import { ComRoleConfig } from "../components/ComRoleConfig";
|
|
import { ECSSystem } from "../lib/ECSSystem";
|
|
import { ECSWorld, GenFillterKey } from "../lib/ECSWorld";
|
|
|
|
const FILTER_ROLE_NODE = GenFillterKey([ComCocosNode, ComRoleConfig]);
|
|
export class SysRoleState extends ECSSystem {
|
|
/** 连接 */
|
|
public onAdd(world: ECSWorld): void {
|
|
|
|
}
|
|
/** 断开连接 */
|
|
public onRemove(world: ECSWorld): void {
|
|
|
|
}
|
|
/** 添加实体 */
|
|
public onEntityEnter(world: ECSWorld, entity: number): void {
|
|
|
|
}
|
|
/** */
|
|
public onEntityLeave(world: ECSWorld, entity: number): void {
|
|
|
|
}
|
|
/** 更新 */
|
|
public onUpdate(world: ECSWorld, dt: number): void {
|
|
world.getFilter(FILTER_ROLE_NODE).walk((entity: number) => {
|
|
let comCocosNode = world.getComponent(entity, ComCocosNode);
|
|
if(!comCocosNode.loaded) return ;
|
|
let comRoleConfig = world.getComponent(entity, ComRoleConfig);
|
|
let comMovable = world.getComponent(entity, ComMovable);
|
|
let comMonitor = world.getComponent(entity, ComMonitor);
|
|
let comAttackable = world.getComponent(entity, ComAttackable);
|
|
|
|
comCocosNode.events.push(new EventGraphicsDraw([]));
|
|
|
|
if(comMonitor && comMonitor.debugInfo) {
|
|
comCocosNode.events.push(new EventGraphicsDraw(comMonitor.debugInfo.points, comMonitor.debugInfo.color));
|
|
}
|
|
|
|
if(comAttackable && comAttackable.debugInfo) {
|
|
comCocosNode.events.push(new EventGraphicsDraw(comAttackable.debugInfo.points, comAttackable.debugInfo.color));
|
|
}
|
|
|
|
|
|
|
|
if(comMovable && comMovable.speedDirty) {
|
|
comMovable.speedDirty = false;
|
|
if(comMovable.speed > 0) {
|
|
comCocosNode.events.push(new EventRun());
|
|
}else {
|
|
comCocosNode.events.push(new EventStand());
|
|
}
|
|
}
|
|
|
|
if(comRoleConfig && comRoleConfig.HPDirty) {
|
|
comCocosNode.events.push(new EventHPChange(comRoleConfig.maxHP, comRoleConfig.lastHP, comRoleConfig.nowHP));
|
|
if(comRoleConfig.lastHP > comRoleConfig.nowHP) {
|
|
comCocosNode.events.push(new EventHurt());
|
|
}
|
|
if(comRoleConfig.nowHP <= 0) {
|
|
comCocosNode.events.push(new EventDeath(() => {
|
|
world.removeComponent(entity, ComNodeConfig);
|
|
world.removeComponent(entity, ComCocosNode);
|
|
world.removeEntity(entity);
|
|
comCocosNode.node.destroy();
|
|
}));
|
|
world.removeComponent(entity, ComBehaviorTree);
|
|
world.removeComponent(entity, ComMonitor);
|
|
world.removeComponent(entity, ComMovable);
|
|
world.removeComponent(entity, ComRoleConfig);
|
|
}
|
|
comRoleConfig.HPDirty = false;
|
|
}
|
|
|
|
return false;
|
|
});
|
|
}
|
|
} |