feat(ai): Boss 图共享片段 + 竞技场锚点 + AiSignal.Engaged
BossFragments:阶段过渡 / 逼近选招 / 移动到锚点三个静态建态片段。 ApproachAttackEngagement 的建态逻辑提为 internal static Declare(态名参数化), 模块路径与 Boss 图路径共用同一份行为,Boss 可建多组(地面组/空中组)。 锚点坐标经 IBossControl.AnchorAt / DistanceToAnchor 暴露,不走黑板—— EnemyAiBrain._context 是私有的(BossBase 无从写入),且 ResetScratch 会清黑板 带来隐式时序约束。锚点本就是 Boss 专属知识,归 Boss facet 更直。 锚点漏配 / 下标越界显式抛,不回退到自身位置。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,16 +1,21 @@
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>
|
||||
/// 决策层的推送信号,用于事件驱动的状态转换(不靠轮询)。
|
||||
/// 外部 → 决策层的推送信号,用于事件驱动的状态转换(不靠轮询)。
|
||||
/// 事件边不受 IsControllable 让位门阻挡。
|
||||
///
|
||||
/// 只保留真实存在发送方与消费方的信号。受击 / 硬直 / 击飞 / 弹反**不在此列**——
|
||||
/// 它们由敌人物理状态机(EnemyStateType)处理,决策层经 IActorVitals.IsControllable
|
||||
/// 让位门自动挂起。在这里重复定义会诱导写出与物理层打架的第二套受击逻辑。
|
||||
///
|
||||
/// 新增信号的判据:已经有确定的发送方与消费方,否则不要预留。
|
||||
/// 新增信号的判据:已经有确定的发送方与消费方,否则不要预留——无发送方的占位枚举只会变成死值。
|
||||
/// </summary>
|
||||
public enum AiSignal
|
||||
{
|
||||
/// <summary>敌人已死亡:由 EnemyBase 的死亡流程发出,让决策停止。</summary>
|
||||
Died,
|
||||
|
||||
/// <summary>开战:由竞技场开战触发器发出,让 Boss 从静置态进入入场演出。</summary>
|
||||
Engaged,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.AI
|
||||
{
|
||||
/// <summary>
|
||||
@@ -20,7 +22,10 @@ namespace BaseGames.AI
|
||||
/// 过渡进行中重复调用会被忽略并告警——应在 OnEnter 调用一次,不要放在 Tick。</summary>
|
||||
void BeginPhaseTransition(int targetPhase, float invincibleDuration);
|
||||
|
||||
// 竞技场锚点两成员(AnchorAt / DistanceToAnchor)随 BossArenaAnchors 组件一并加入,
|
||||
// 届时 BossBase 同步实现。
|
||||
/// <summary>第 index 个竞技场锚点的世界坐标。未挂锚点组件 / 下标越界即抛。</summary>
|
||||
Vector2 AnchorAt(int index);
|
||||
|
||||
/// <summary>Boss 当前位置到第 index 个锚点的距离。未挂锚点组件 / 下标越界即抛。</summary>
|
||||
float DistanceToAnchor(int index);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user