- Ядро (Bogatyri.Core): контракты модулей, EventBus, GameServices, SaveRegistry - Модули: Экономика, Поселение, Армия, Глобальный мир, Боевая система, Сохранения (каждый — отдельный asmdef, видит только ядро) - App/GameModules: регистрация модулей и связь с GameProgress/Казармами - Сохранения v2 по секциям модулей, перенос старого save.json и походов из progress.json - Сброс сохранений: ISaveSystem.ResetAll, ResetState у модулей, меню Tools - EditMode-тесты модулей, документы по каждому модулю с журналом изменений Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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` не изменён. |
|