refactor(monster&cast): 重构怪物移动与AOE技能目标逻辑

1. 移除固定网格站位,怪物从右侧统一出生并向左推进
2. 修改AOE技能索敌逻辑,直接使用最近敌人真实位置
3. 新增怪物自动推进与战斗停船逻辑,优化战斗体验
This commit is contained in:
panFD
2026-07-20 23:20:24 +08:00
parent 05dc771d4e
commit 48e0ab06c5
3 changed files with 104 additions and 65 deletions

View File

@@ -13,7 +13,6 @@ import { GameEvent } from "../common/config/GameEvent";
import { SkillTriggerType } from "../common/config/heroSet";
import { SkillTriggerHelper } from "./SkillTriggerHelper";
import { MissionEconomy } from "../map/MissionEconomy";
import { MissionMonCompComp } from "../map/MissionMonComp";
import { MissionHeroComp } from "../map/MissionHeroComp";
/**
@@ -695,25 +694,13 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
if (config.DTType === DTType.aoe_grid) {
const isHero = heroAttrs.fac === FacSet.HERO;
if (isHero) {
// 英雄打怪物目标为怪物网格的第2列(idx 1)中路(row 1)或第3列(idx 2)中路
// MissionMonComp.MON_POSITIONS 顺序:
// 列1: 0,1,2 (X=60)
// 列2: 3,4,5 (X=140) -> 第2列中路是 index 4
// 列3: 6,7,8 (X=220) -> 第3列中路是 index 7
// 简单起见可以固定取第2列中路(index 4)或第3列中路(index 7)
// 若最近的敌人在更后排,也可以取那个敌人的列。
// 需求:三类 需要以中路 第 2、 3列为目标。
// 我们直接返回第2列中路坐标(X=140, Y=GAME_LINE)或者根据最近敌人判断。
// 需求说明为第 2 或 第 3 列这里我们可以根据目标位置如果目标在第3列及以后打第3列否则打第2列。
let targetCol = 1; // 0-based, so 1 is 2nd col
if (nearestEnemy && nearestEnemy.node) {
// 判断目标所在的列
const ex = nearestEnemy.node.position.x;
// X=60(列1), X=140(列2), X=220(列3), X=300(列4)
if (ex >= 200) targetCol = 2; // 第3列
// 怪物已改为从 X=400 出生后动态向左推进,不再有固定列阵型。
// aoe_grid 直接以最近敌人的真实位置作为目标点,
// 由技能自身的范围半径负责命中附近的怪物集群。
if (nearestEnemy?.node) {
return nearestEnemy.node.position.clone();
}
const targetIdx = targetCol * 3 + 1; // 1是中路
return MissionMonCompComp.MON_POSITIONS[targetIdx].clone();
return null;
} else {
// 怪物打英雄,英雄网格:
// 列1: 0,1,2 (X=-210)