Боевые системы AS-BUILT
В коде живут три поколения боя одновременно: командные сценарии отрядов, живая симуляция NewBattle и постановочная ComplexBattle4x. Они не работают вместе — какая активна, решает флаг в профиле.
Три поколения — коротко
| Система | Подход | Статус |
|---|---|---|
| SquadCommands | Скриптовые боевые сценарии и математическая модель потерь. | рабочая |
| NewBattle | Детерминированная симуляция фикс-шагом + утилити-ИИ. | рабочая |
| ComplexBattle4x | Предрасчёт хореографии → таймлайн → проигрывание. | в разработке |
1. SquadCommands — командные сценарии
Исходная боёвка: выполнение боевых команд и манёвров отрядов по паттерну command. Цепочки команд лидера (MasterCommandLine) и юнитов (UnitCommandLine), параллельные действия (ExtraCommandLine), состояния команды (ожидание → в процессе → завершено). Набор боевых сценариев: прорыв центра, окружение, паника, отступление, драконья атака. Отдельная математическая модель боя считает потери и проценты убитых.
| Класс / файл | Роль |
|---|---|
SquadCommand.cs, CommandBehaviour.cs | Команды и их выполнение. |
BattleMathModel.cs | Расчёт потерь. |
Commands/Battle/BattleScenario/ | Боевые сценарии. |
рабочая Тип команд: formation, relocation, attack, deffence, stop, waitFor, setMoveTarget.
Путь: GameEngine/Scripts/SubModSquadCommands/.
2. NewBattle — живая симуляция
Полностью переписанный бой на детерминированной симуляции фиксированным шагом (по умолчанию ~30 Гц, аккумулятор реального времени). Один сид → один результат. Архитектура строго делит логику и визуал.
Orchestrator
Гоняет симуляцию фикс-шагом. Режимы Instant (мгновенный расчёт) и Continuous (пошагово). Поддержка динамического входа отрядов (N-vs-M фазы).
BattleSimulation
Ядро: на каждом шаге таргетинг → смерти → решения ИИ → обновление действий → проверка конца боя. Полностью без визуала.
UtilityUnitBrain
Утилити-ИИ: юнит раз в N тиков оценивает опции (Melee, Ranged, Move, Hold, Retreat) через Score() и выбирает лучшую с гистерезисом.
PresentationBinder
Асинхронно синхронизирует Transform/Animator с состоянием симуляции, не влияя на логику. Анимации отвязаны от расчёта.
Действия (жизненный цикл Begin → Tick → Complete/Cancel): Move To, Melee Engage,
Ranged Attack, Idle Hold, Die. BattleUnitState — источник истины по юниту;
BattleMovementResolver — движение с коллизиями (юниты, стены);
BattleTargeting — авто-таргет ближайших врагов.
| Класс / файл | Роль |
|---|---|
Core/Orchestration/Battle.cs, BattleOrchestrator.cs | Оркестрация. |
Core/Simulation/BattleSimulation.cs | Ядро симуляции. |
Integration/NewBattleSwitch.cs, NewBattleBridge.cs | Включение и стыковка со старым путём. |
рабочая Активна при UseNewBattleSystem = true в BattleSystemProfile.
Путь: GameEngine/Scripts/NewBattle/.
3. ComplexBattle4x — постановочный бой
Бой, где все действия предрассчитываются заранее в полный таймлайн, а потом проигрываются. Двухфазная схема.
Фаза A · Хореография
Из предрешённого исхода (кто гибнет, кто инициатор) и определения шага выбирается механика боя, и специализированный хореограф строит таймлайн: треки движения всех юнитов + события.
Фаза B · Проигрывание
BattlePlayer интерполирует позы между кейфреймами,
выставляет локомоцию, дёргает триггеры событий в точный момент. Пауза/seek; режим
Static зацикливает кульминацию до Release().
Поле — сетка (по умолчанию 1×1 м) с занятостью; флоу-поле (BFS от врагов) ведёт юнитов к врагу, огибая своих. Исход считается снаружи, хореография лишь показывает его.
Хореографы механик (IBattleStepChoreographer)
Clash · сходка Volley · залп стрелков Charge · кав-атака Surround · окружение AreaCast · площадь RangedThenMelee · композит GrandMelee · композит
| Класс / файл | Роль |
|---|---|
Choreography/ChoreographerRegistry.cs | Реестр хореографов механик. |
Timeline/BattleTimeline.cs | Предрассчитанный таймлайн (треки + события). |
Playback/BattlePlayer.cs | Проигрыватель таймлайна. |
Field/BattleField.cs | Сетка поля и флоу-поле. |
Outcome/BattleOutcome.cs | Предрешённый исход. |
Integration/ComplexBattle4xBridge.cs, ComplexBattle4xSwitch.cs | Стыковка со старым путём. |
в разработке Отключена по умолчанию (RouteRealBattles = false).
Путь: GameEngine/Scripts/ComplexBattle4x/.