- удалены WorldSystem, WorldMapPanel, WorldData, WorldLine и окно Panel_World из сцены города
- кнопка «МИР» в городе открывает большую карту (сцена WorldMap) через UIPanelManager.Open("World")
- перенос сохранений: солдаты из походов старой карты возвращаются в город при загрузке
(отправленные, а если отряд шёл назад — выжившие); добыча таких походов не переносится
- ArmyBridge.TroopsInMarches: панель «Войска» показывает воинов в походах большой карты
- HUDPanelsBuilder: кнопка «МИР» без отдельной панели
- документы World, Army, README обновлены
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
58 lines
4.0 KiB
Markdown
58 lines
4.0 KiB
Markdown
# Армия
|
|
|
|
Войска и их характеристики: сколько воинов дома, как они уходят в поход и возвращаются.
|
|
|
|
- **Сборка:** `Bogatyri.Army` (без Unity).
|
|
- **Папка:** `Assets/Scripts/Modules/Army`.
|
|
- **Зависит от:** ядра.
|
|
|
|
## Контракт `IArmy`
|
|
|
|
| Член | Что делает |
|
|
| --- | --- |
|
|
| `SoldiersAtHome` | Воинов в городе (все типы). |
|
|
| `TakeForMarch(marchId, count)` | Забрать воинов в поход пропорционально составу армии и запомнить состав похода. |
|
|
| `ReturnFromMarch(marchId, survivors)` | Вернуть выживших по тем же типам. |
|
|
|
|
Получить: `GameServices.Get<IArmy>()`.
|
|
|
|
## Где сейчас данные
|
|
|
|
Войска пока хранятся в `GameProgress` (`progress.json`, поле `troops`, 4 типа). Поэтому контракт реализует мост `Assets/Scripts/WorldMap/ArmyBridge.cs` (`ArmyBridge.Service`), а модуль Армии содержит правила деления войск `ArmyMath`.
|
|
|
|
**Решение команды от 19.10.2026:** `ArmyBridge` не удалять, пока войска не переедут в модуль Армии вместе с миграцией сохранений (поле `sashaMarchUnits`).
|
|
|
|
## События
|
|
|
|
- **Публикует:** пока ничего.
|
|
- **Слушает:** ничего (походы вызывают контракт напрямую).
|
|
|
|
## Сохранение
|
|
|
|
Пока через `GameProgress`. Когда войска переедут в модуль, у него появится своя секция `"army"` и перенос из `progress.json`.
|
|
|
|
## Файлы
|
|
|
|
| Файл | Что это |
|
|
| --- | --- |
|
|
| `ArmyMath.cs` | `TakeProportional` — кого взять в поход; `SplitSurvivors` — как вернуть выживших. Без Unity. |
|
|
| `../../WorldMap/ArmyBridge.cs` (слой приложения) | Реализация `IArmy` поверх `GameProgress`; `TroopsInMarches` — воинов в походах на карте мира. |
|
|
|
|
## Решения и план
|
|
|
|
- **Этап 5 (план разработки):** солдат стоит 1 человека, 15 еды, 5 металла, 5 золота; содержание 0,2 еды в час; погибшие уменьшают население.
|
|
- **Решение команды от 19.10.2026:**
|
|
- войска набираются из населения с сохранением гражданского минимума;
|
|
- гарнизон поселения: часть солдат назначается защищать город;
|
|
- общая армия = гарнизон + доступные отряды + войска в походах, на точках и в гарнизоне Круга; **один солдат не может быть в двух местах**;
|
|
- гарнизон ест еду и участвует в защите;
|
|
- при голоде дебаффы действуют и на гарнизон, и на походы.
|
|
- **Следующий шаг модуля:** перенести `troops` и `sashaMarchUnits` из `GameProgress` в модуль (секция `"army"`), заменить `ArmyBridge` на реализацию внутри модуля.
|
|
|
|
## Журнал изменений
|
|
|
|
| Дата | Кто | Что |
|
|
| --- | --- | --- |
|
|
| 19.10.2026 | Claude | `ArmyBridge.TroopsInMarches` для панели «Войска». После удаления маленькой карты войска в походах учитываются только здесь (`sashaMarchUnits`). |
|
|
| 19.10.2026 | Claude | Модуль создан: `ArmyMath` (правила деления войск, без Unity, тесты на отсутствие двойного учёта). `ArmyBridge` сохранён и теперь реализует `IArmy` через `ArmyMath`; формат `sashaMarchUnits` не изменён. |
|