refactor(hero): 移除SkillConComp并添加ECS系统注册装饰器

- 删除废弃的SkillConComp组件及其meta文件
- 为HeroAtkSystem、HeroAttrSystem等系统添加@ecs.register装饰器
- 在生命周期系统中添加空安全检查
- 移除SkillConComp相关引用及调试日志
- 在移动系统中添加节点有效性检查
This commit is contained in:
2025-10-30 16:31:44 +08:00
parent 7984f8b784
commit 40e0086be3
10 changed files with 64 additions and 210 deletions

View File

@@ -159,7 +159,10 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
/** 找到最近的敌人 */
private findNearestEnemy(entity: ecs.Entity): HeroViewComp | null {
const currentPos = entity.get(HeroViewComp).node.position;
const currentView = entity.get(HeroViewComp);
if (!currentView || !currentView.node) return null;
const currentPos = currentView.node.position;
const team = entity.get(HeroAttrsComp).fac;
let nearestEnemyView: HeroViewComp | null = null;
let minDistance = Infinity;
@@ -167,7 +170,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
ecs.query(ecs.allOf(HeroAttrsComp, HeroViewComp)).forEach(e => {
const model = e.get(HeroAttrsComp);
const view = e.get(HeroViewComp);
if (model.fac !== team && !model.is_dead) {
if (model.fac !== team && !model.is_dead && view && view.node) {
const distance = Math.abs(currentPos.x - view.node.position.x);
if (distance < minDistance) {
minDistance = distance;
@@ -181,12 +184,16 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
/** 检测攻击范围内敌人 */
private checkEnemiesInRange(entity: ecs.Entity, range: number): boolean {
const currentPos = entity.get(HeroViewComp).node.position;
const currentView = entity.get(HeroViewComp);
if (!currentView || !currentView.node) return false;
const currentPos = currentView.node.position;
const team = entity.get(HeroAttrsComp).fac;
let found = false;
ecs.query(ecs.allOf(HeroAttrsComp, HeroViewComp)).some(e => {
const model = e.get(HeroAttrsComp);
const view = e.get(HeroViewComp);
if (!view || !view.node) return false;
const distance = Math.abs(currentPos.x - view.node.position.x);
if (model.fac !== team && !model.is_dead) {
if (distance <= range) {
@@ -200,12 +207,16 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
/** 检测面前是否有敌人 */
private checkEnemiesInFace(entity: ecs.Entity): boolean {
const currentPos = entity.get(HeroViewComp).node.position;
const currentView = entity.get(HeroViewComp);
if (!currentView || !currentView.node) return false;
const currentPos = currentView.node.position;
const team = entity.get(HeroAttrsComp).fac;
let found = false;
ecs.query(ecs.allOf(HeroAttrsComp, HeroViewComp)).some(e => {
const model = e.get(HeroAttrsComp);
const view = e.get(HeroViewComp);
if (!view || !view.node) return false;
const distance = Math.abs(currentPos.x - view.node.position.x);
if (model.fac !== team && !model.is_dead) {
if (distance <= 75) {
@@ -232,8 +243,11 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
// 按x坐标排序x坐标越大越前面的显示在上层
const sortedUnits = allUnits.sort((a, b) => {
const posA = a.get(HeroViewComp).node.position.x;
const posB = b.get(HeroViewComp).node.position.x;
const viewA = a.get(HeroViewComp);
const viewB = b.get(HeroViewComp);
if (!viewA || !viewA.node || !viewB || !viewB.node) return 0;
const posA = viewA.node.position.x;
const posB = viewB.node.position.x;
return posA - posB; // x坐标从小到大排序
});