feat(战斗系统): 实现基于技能距离的智能移动和攻击逻辑
重构英雄和怪物移动系统,引入技能距离缓存机制 在HeroAttrsComp中添加技能距离缓存管理 修改HeroSkillsComp以支持技能距离计算 更新移动系统使用技能距离判断攻击时机和停止位置 调整怪物配置统一使用水球技能
This commit is contained in:
@@ -54,6 +54,9 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
const config = SkillSet[skill.s_uuid];
|
||||
if (!config || config.SType !== SType.damage) continue;
|
||||
|
||||
// 检查是否有敌人在技能攻击范围内
|
||||
if (!this.hasEnemyInSkillRange(heroView, heroAttrs, skill.dis)) continue;
|
||||
|
||||
// ✅ 开始执行施法
|
||||
this.startCast(e,skill);
|
||||
|
||||
@@ -276,6 +279,31 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
|
||||
return allies;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查技能攻击范围内是否有敌人
|
||||
*/
|
||||
private hasEnemyInSkillRange(heroView: HeroViewComp, heroAttrs: HeroAttrsComp, skillDistance: number): boolean {
|
||||
if (!heroView || !heroView.node) return false;
|
||||
|
||||
const currentPos = heroView.node.position;
|
||||
const team = heroAttrs.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 <= skillDistance) {
|
||||
found = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
return found;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user