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>
32 lines
1.5 KiB
C#
32 lines
1.5 KiB
C#
using UnityEngine;
|
|
|
|
namespace BaseGames.AI
|
|
{
|
|
/// <summary>
|
|
/// Boss 专属决策面。挂在 <see cref="IAiContext"/> 上供 Boss 图读取阶段状态、发起阶段过渡。
|
|
/// 只暴露"决策需要知道的",过渡演出与无敌帧由实现方(BossBase)负责。
|
|
/// 非 Boss 敌人访问 <see cref="IAiContext.Boss"/> 会抛异常——这是有意的显式失败。
|
|
/// </summary>
|
|
public interface IBossControl
|
|
{
|
|
/// <summary>当前阶段索引(出生为 0)。</summary>
|
|
int CurrentPhase { get; }
|
|
|
|
/// <summary>是否处于阶段过渡(无敌 + 过渡演出)期间。</summary>
|
|
bool IsPhaseTransitioning { get; }
|
|
|
|
/// <summary>Boss 资源是否已满。未挂资源组件时抛异常——图问了资源却没配组件是配置错误。</summary>
|
|
bool ResourceFull { get; }
|
|
|
|
/// <summary>发起阶段过渡:无敌 invincibleDuration 秒后切入 targetPhase。
|
|
/// 过渡进行中重复调用会被忽略并告警——应在 OnEnter 调用一次,不要放在 Tick。</summary>
|
|
void BeginPhaseTransition(int targetPhase, float invincibleDuration);
|
|
|
|
/// <summary>第 index 个竞技场锚点的世界坐标。未挂锚点组件 / 下标越界即抛。</summary>
|
|
Vector2 AnchorAt(int index);
|
|
|
|
/// <summary>Boss 当前位置到第 index 个锚点的距离。未挂锚点组件 / 下标越界即抛。</summary>
|
|
float DistanceToAnchor(int index);
|
|
}
|
|
}
|