57 lines
3.7 KiB
Markdown
57 lines
3.7 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`. |
|
||
|
|
|
||
|
|
## Решения и план
|
||
|
|
|
||
|
|
- **Этап 5 (план разработки):** солдат стоит 1 человека, 15 еды, 5 металла, 5 золота; содержание 0,2 еды в час; погибшие уменьшают население.
|
||
|
|
- **Решение команды от 19.10.2026:**
|
||
|
|
- войска набираются из населения с сохранением гражданского минимума;
|
||
|
|
- гарнизон поселения: часть солдат назначается защищать город;
|
||
|
|
- общая армия = гарнизон + доступные отряды + войска в походах, на точках и в гарнизоне Круга; **один солдат не может быть в двух местах**;
|
||
|
|
- гарнизон ест еду и участвует в защите;
|
||
|
|
- при голоде дебаффы действуют и на гарнизон, и на походы.
|
||
|
|
- **Следующий шаг модуля:** перенести `troops` и `sashaMarchUnits` из `GameProgress` в модуль (секция `"army"`), заменить `ArmyBridge` на реализацию внутри модуля.
|
||
|
|
|
||
|
|
## Журнал изменений
|
||
|
|
|
||
|
|
| Дата | Кто | Что |
|
||
|
|
| --- | --- | --- |
|
||
|
|
| 19.10.2026 | Claude | Модуль создан: `ArmyMath` (правила деления войск, без Unity, тесты на отсутствие двойного учёта). `ArmyBridge` сохранён и теперь реализует `IArmy` через `ArmyMath`; формат `sashaMarchUnits` не изменён. |
|