refactor(hero): 移除SkillConComp并添加ECS系统注册装饰器
- 删除废弃的SkillConComp组件及其meta文件 - 为HeroAtkSystem、HeroAttrSystem等系统添加@ecs.register装饰器 - 在生命周期系统中添加空安全检查 - 移除SkillConComp相关引用及调试日志 - 在移动系统中添加节点有效性检查
This commit is contained in:
@@ -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坐标从小到大排序
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user