fix(战斗): 移除近战单位后撤逻辑并调整远程单位攻击距离

- 移除所有单位类型在距离过近时的后撤行为,简化移动逻辑
- 远程单位现在只在距离过远时前进,不再因过近而后撤
- 调整远程单位长距离攻击的起始位置从240增加到300
- 保持战斗系统的核心行为不变,仅优化移动决策逻辑
This commit is contained in:
walkpan
2026-03-15 21:54:03 +08:00
parent 426fcec5c4
commit 8af04d61e0
2 changed files with 17 additions and 27 deletions

View File

@@ -47,23 +47,23 @@ export const getMonList = ()=>{
}
export const HeroPos={
0:{pos:v3(-240,BoxSet.GAME_LINE,0)},
0:{pos:v3(-360,BoxSet.GAME_LINE,0)},
1:{pos:v3(0,BoxSet.GAME_LINE,0)},
2:{pos:v3(0,BoxSet.GAME_LINE,0)},
}
export const MonSet = {
0:{pos:v3(240,BoxSet.GAME_LINE+10,0)},
1:{pos:v3(240,BoxSet.GAME_LINE-10,0)},
2:{pos:v3(300,BoxSet.GAME_LINE+10,0)},
3:{pos:v3(300,BoxSet.GAME_LINE-10,0)},
4:{pos:v3(320,BoxSet.GAME_LINE+10,0)},
5:{pos:v3(320,BoxSet.GAME_LINE-10,0)},
0:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
1:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
2:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
3:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
4:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
5:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
6:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
7:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
8:{pos:v3(400,BoxSet.GAME_LINE+10,0)},
9:{pos:v3(400,BoxSet.GAME_LINE-10,0)},
10:{pos:v3(440,BoxSet.GAME_LINE+10,0)},
11:{pos:v3(440,BoxSet.GAME_LINE-10,0)},
8:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
9:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
10:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
11:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
}
export enum MonStart {

View File

@@ -128,15 +128,11 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const currentX = view.node.position.x;
const enemyX = enemy.node.position.x;
const dist = Math.abs(currentX - enemyX);
const [rawMinRange] = this.resolveCombatRange(model, 0, this.minSpacingX);
const maxRange = this.minSpacingX;
const minRange = Math.min(rawMinRange, Math.max(0, maxRange - 1));
move.direction = enemyX > currentX ? 1 : -1;
if (dist < minRange) {
this.performRetreat(view, move, model, currentX);
} else if (dist <= maxRange) {
if (dist <= maxRange) {
view.status_change("idle");
model.is_atking = true;
} else {
@@ -151,14 +147,11 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const enemyX = enemy.node.position.x;
const dist = Math.abs(currentX - enemyX);
const [minRange, maxRange] = this.resolveCombatRange(model, 120, 360);
const [, maxRange] = this.resolveCombatRange(model, 120, 360);
move.direction = enemyX > currentX ? 1 : -1;
if (dist < minRange) {
// 太近了,后撤
this.performRetreat(view, move, model, currentX);
} else if (dist > maxRange) {
if (dist > maxRange) {
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = true;
@@ -173,14 +166,11 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const enemyX = enemy.node.position.x;
const dist = Math.abs(currentX - enemyX);
const [minRange, maxRange] = this.resolveCombatRange(model, 360, 720);
const [, maxRange] = this.resolveCombatRange(model, 360, 720);
move.direction = enemyX > currentX ? 1 : -1;
if (dist < minRange) {
// 太近了,后撤 (远程单位对距离更敏感)
this.performRetreat(view, move, model, currentX);
} else if (dist > maxRange) {
if (dist > maxRange) {
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = true;
@@ -239,7 +229,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
}
const side = model.fac === FacSet.MON ? 1 : -1;
if (rangeType === SkillRange.Long) {
return 240 * side;
return 300 * side;
}
if (rangeType === SkillRange.Mid) {
return 200 * side;