Модуль Армии хранит войска; окно «Войско вернулось» в городе

Модуль Армии (Bogatyri.Army, без Unity):
- ArmyService — единственное хранилище войск (4 типа), секция сохранения "army"
- IArmy расширен: войска по типам, обучение (AddTroops), потери (LoseFraction), войска в походах
- событие TroopsChangedEvent — по нему перерисовываются панели HUD
- GameProgress и панели работают с войсками только через IArmy
- перенос из progress.json (troops, sashaMarchUnits) при первой загрузке;
  старые данные удаляются только после записи save.json (флаг armyInModule)
- ArmyBridge удалён: контракты и перенос сохранений проверены тестами
- тесты: поход не создаёт и не теряет солдат, потери по типам, сохранение, перенос, сброс

Окно «ВОЙСКО ВЕРНУЛОСЬ» в городе (UI/MarchReturnPopup):
- куда ходили, победа/поражение, сколько вернулось из скольких, добыча
- показывается и за походы, закончившиеся пока игра была закрыта; несколько — по очереди
- в MarchReturnedEvent добавлены Sent, TargetName, LootText

GameLoadedEvent публикуется и без файла сохранения. Документы Army, Core, Save, World, README обновлены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Alexander
2026-10-23 18:33:04 +02:00
co-authored by Claude Opus 5.5
parent d1c8215ed8
commit f10fb3b3aa
21 changed files with 468 additions and 128 deletions
+10 -2
View File
@@ -23,9 +23,16 @@
- `MarchStartedEvent` — войско выступило;
- `MarchBattleResolvedEvent` — бой у цели прошёл;
- `MarchReturnedEvent` — войско вернулось, солдаты и добыча зачислены.
- `MarchReturnedEvent` — войско вернулось, солдаты и добыча зачислены. Поля: `MarchId`, `Victory`, `Survivors`, `Sent`, `TargetName`, `LootText`.
**Слушает:** ничего. `App/GameModules` по этим событиям считает статистику для заданий (`marchesSent`, `dailyMarches`, `worldWins`).
**Слушает:** ничего.
По этим событиям `App/GameModules`:
- считает статистику для заданий (`marchesSent`, `dailyMarches`, `worldWins`);
- показывает окно «ВОЙСКО ВЕРНУЛОСЬ» в городе (`UI/MarchReturnPopup.cs`): куда ходили, победа или поражение, сколько вернулось из скольких, добыча.
- Окно появляется и за походы, закончившиеся, пока игра была закрыта: сразу после входа в город.
- Несколько возвращений — окна по очереди.
- На карте мира окно своё (`WorldMapController`).
## Сохранение
@@ -57,6 +64,7 @@
| Дата | Кто | Что |
| --- | --- | --- |
| 23.10.2026 | Claude | Окно «ВОЙСКО ВЕРНУЛОСЬ» в городе. В `MarchReturnedEvent` добавлены `Sent`, `TargetName`, `LootText`. |
| 19.10.2026 | Claude | Маленькая карта мира (`Meta/World`: WorldSystem, WorldMapPanel, WorldData, WorldLine) удалена, окно `Panel_World` убрано из сцены города. Кнопка «МИР» открывает эту карту. Солдаты из походов старой карты возвращаются в город. |
| 19.10.2026 | Claude | `ResetState()`: при сбросе сохранений походы отменяются. |
| 19.10.2026 | Claude | Модуль выделен. `MarchManager` больше не обращается к `GameProgress` и `ResourceManager`: войска через `IArmy`, добыча через `IEconomy`, сохранение — своя секция `"world"`, статистика — через события. Формула боя вынесена в модуль Боя. |