- Ядро (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>
3.7 KiB
3.7 KiB
Армия
Войска и их характеристики: сколько воинов дома, как они уходят в поход и возвращаются.
- Сборка:
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 не изменён. |