feat(battle): 重构技能施放与战斗距离系统
- 新增技能距离缓存机制,根据英雄类型动态计算最小和最大攻击范围 - 重构SCastSystem实现完整的技能施放逻辑,支持伤害、治疗、护盾和buff技能 - 在Hero和Monster初始化时调用updateSkillDistanceCache预计算技能距离 - 修改HeroMoveSystem和MonMoveSystem使用动态战斗范围,支持撤退逻辑 - 优化Skill实体创建,增加对象池支持 - 添加技能CD触发方法和状态检查方法
This commit is contained in:
@@ -110,11 +110,13 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
const currentX = view.node.position.x;
|
||||
const enemyX = enemy.node.position.x;
|
||||
const dist = Math.abs(currentX - enemyX);
|
||||
const attackRange = 75; // 保持原有的近战判定
|
||||
const [minRange, maxRange] = this.resolveCombatRange(model, 0, 75);
|
||||
|
||||
move.direction = enemyX > currentX ? 1 : -1;
|
||||
|
||||
if (dist <= attackRange) {
|
||||
if (dist < minRange) {
|
||||
this.performRetreat(view, move, model, currentX);
|
||||
} else if (dist <= maxRange) {
|
||||
view.status_change("idle");
|
||||
model.is_atking = true;
|
||||
} else {
|
||||
@@ -134,8 +136,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
const enemyX = enemy.node.position.x;
|
||||
const dist = Math.abs(currentX - enemyX);
|
||||
|
||||
const minRange = 120;
|
||||
const maxRange = 360;
|
||||
const [minRange, maxRange] = this.resolveCombatRange(model, 120, 360);
|
||||
|
||||
move.direction = enemyX > currentX ? 1 : -1;
|
||||
|
||||
@@ -164,8 +165,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
const enemyX = enemy.node.position.x;
|
||||
const dist = Math.abs(currentX - enemyX);
|
||||
|
||||
const minRange = 360;
|
||||
const maxRange = 720;
|
||||
const [minRange, maxRange] = this.resolveCombatRange(model, 360, 720);
|
||||
|
||||
move.direction = enemyX > currentX ? 1 : -1;
|
||||
|
||||
@@ -245,6 +245,14 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
}
|
||||
}
|
||||
|
||||
private resolveCombatRange(model: HeroAttrsComp, defaultMin: number, defaultMax: number): [number, number] {
|
||||
const minRange = model.getCachedMinSkillDistance();
|
||||
const maxRange = model.getCachedMaxSkillDistance();
|
||||
if (maxRange <= 0) return [defaultMin, defaultMax];
|
||||
const safeMin = Math.max(0, Math.min(minRange, maxRange - 20));
|
||||
return [safeMin, maxRange];
|
||||
}
|
||||
|
||||
// --- 辅助方法 ---
|
||||
|
||||
private findNearestEnemy(entity: ecs.Entity): HeroViewComp | null {
|
||||
|
||||
Reference in New Issue
Block a user