22 lines
788 B
TypeScript
22 lines
788 B
TypeScript
@ecs.registerSystem()
|
|
export class HeroMoveSystem extends ecs.System {
|
|
filter(): ecs.IMatcher {
|
|
return ecs.allOf(HeroModelComp, HeroViewComp, MoveToComp);
|
|
}
|
|
|
|
update(entities: Hero[]) {
|
|
const deltaTime = oops.timer.delta;
|
|
entities.forEach(hero => {
|
|
// 每个英雄独立计算移动
|
|
const move = hero.get(MoveToComp);
|
|
const view = hero.get(HeroViewComp);
|
|
|
|
// 计算移动向量(单个英雄逻辑)
|
|
const dir = move.target.subtract(view.node.position).normalize();
|
|
const speed = view.speed * deltaTime;
|
|
|
|
// 更新位置(独立操作)
|
|
view.node.position = view.node.position.add(dir.multiplyScalar(speed));
|
|
});
|
|
}
|
|
}
|