BattleManager
MonoBehaviour, который управляет отдельным боем монстров. BattleManager — это тонкий
координатор: реальная работа распределена между 15+ модулями (каждый — собственный
MonoBehaviour на том же GameObject), а поток ходов ведёт
BattleStateMachine. Это карта уровня Source этой архитектуры.
Namespace: OpenMon.MCE.Battle
В большинстве интеграций вы не работаете с BattleManager напрямую — вы наблюдаете
за боями через доступный только для чтения интерфейс SDK
IBattleSystem (события, текущее состояние). Приведённые ниже
члены — internal (акцессоры модулей) или конкретный API BattleManager, используемый
внутри сборки движка (OpenMon.MCE.Runtime), то есть уровень 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...
}
Указатель модулей
Каждое поведение боя — это один MonoBehaviour рядом с BattleManager, обязательный
через [RequireComponent]. Пять ниже — те, к которым вы обращаетесь при расширении боёв;
остальные отвечают за представление и учёт.
| Модуль | Акцессор | Ответственность |
|---|---|---|
BattleManagerBattlersModule | Battlers | Поиск бойцов, спрайты, формы, побег |
BattleManagerHealthModule | BattlerHealth | Изменение HP, обнаружение и обработка обморока |
BattleManagerMovesModule | Moves | Выполнение приёмов, точность |
BattleManagerCaptureModule | Capture | Попытки поимки |
BattleManagerAIModule | AI | ИИ по ростеру |
BattleManagerBattlerStatsModule | BattlerStats | Стадии характеристик, дружба в начале |
BattleManagerBattlerSwitchModule | BattleManagerBattlerSwitch | Ввод/вывод бойцов |
BattleManagerRostersModule | Rosters | Подготовка ростеров, проверка обморока |
BattleManagerScenariosModule | Scenario | Погода, местность, настройка сценария |
BattleManagerStatusesModule | Statuses | Статусные состояния |
BattleManagerCharactersModule | Characters | Персонажи-тренеры |
BattleManagerAnimationModule | Animation | Анимация вступления/потока боя |
BattleManagerAudioModule | Audio | Звук боя |
BattleManagerMegaModule | Megas | Мега/гига смены формы |