BattleManager
驱动单场怪物对战的 MonoBehaviour。BattleManager 是一个轻量协调器:真正的工作被拆分到
15+ 个模块(每个都是同一 GameObject 上独立的 MonoBehaviour)中,回合流程由
BattleStateMachine 驱动。这是该架构的 Source 层地图。
Namespace: OpenMon.MCE.Battle
SDK 与 Source 表层
在大多数集成中,你不会直接与 BattleManager 打交道——你通过只读的 SDK 接口
IBattleSystem(事件、当前状态)观察对战。下面的成员是 internal
(模块访问器)或在引擎程序集(OpenMon.MCE.Runtime)内部使用的具体 BattleManager API,
即 Source 层。在扩展对战逻辑时使用它们,而不是用于从游戏代码读取状态。
类结构
[RequireComponent(typeof(BattleStateMachine))]
[RequireComponent(typeof(BattleManagerBattlersModule))]
// ...每个模块一个 RequireComponent...
public class BattleManager : OpenMonBehaviour<BattleManager>, IBattleManager, IPlayerDataReceiver
{
// 模块访问器(internal——从同级组件解析):
internal BattleManagerBattlersModule Battlers { get; }
internal BattleManagerHealthModule BattlerHealth { get; }
internal BattleManagerMovesModule Moves { get; }
internal BattleManagerCaptureModule Capture { get; }
internal BattleManagerAIModule AI { get; }
// ...BattlerStats, BattlerSwitch, Rosters, Scenario, Statuses,
// Characters, Animation, Audio, Megas...
// 公开对战状态:
public BattleType BattleType;
public EnemyType EnemyType;
public bool IsBattleOver;
public int TurnCounter { get; }
public byte BattleSpeed { get; }
public bool CanPlayerRun { get; }
public void SubscribeToBattleInitialized(Action callback);
public void SubscribeToBattleFinished(Action<BattleResultParameters> callback);
public void TickTurn();
public void FinishBattle();
public BattleMonsterSprite GetMonsterSprite(BattlerType type, int index);
}
每个模块都派生自共享基类 BattleManagerModule<T>,它暴露同一组同级模块访问器,使模块之间可以
互相调用:
public abstract class BattleManagerModule<T> : OpenMonBehaviour<T>
where T : BattleManagerModule<T>
{
protected BattleManager BattleManager { get; }
protected BattleManagerBattlersModule Battlers { get; }
protected BattleManagerHealthModule BattlerHealth { get; }
// ...与 BattleManager 相同的访问器...
}