# Глобальный мир Карта и перемещения: замок с боссом, 20 соседних городов, походы по реальному времени (идут, даже когда игра закрыта). - **Сборки:** - `Bogatyri.World.Simulation` — карта и походы, чистый C# без Unity (переедет на сервер); - `Bogatyri.World` — `MarchManager`, Unity-часть. - **Папка:** `Assets/Scripts/Modules/World`. - **Зависит от:** ядра. Войска — через `IArmy`, добыча — через `IEconomy`, бой — через `IBattleSystem`. ## Контракт `IWorld` | Член | Что делает | | --- | --- | | `ActiveMarches` | Сколько походов в пути. | | `TryStartMarch(targetId, soldiers, out error)` | Отправить войско на цель. | Получить: `GameServices.Get()`. Интерфейсу карты (`WorldMapController`) можно обращаться к `MarchManager.Instance` и его C#-событиям: там полные данные похода. ## События **Публикует:** - `MarchStartedEvent` — войско выступило; - `MarchBattleResolvedEvent` — бой у цели прошёл; - `MarchReturnedEvent` — войско вернулось, солдаты и добыча зачислены. Поля: `MarchId`, `Victory`, `Survivors`, `Sent`, `TargetName`, `LootText`. **Слушает:** ничего. По этим событиям `App/GameModules`: - считает статистику для заданий (`marchesSent`, `dailyMarches`, `worldWins`); - показывает окно «ВОЙСКО ВЕРНУЛОСЬ» в городе (`UI/MarchReturnPopup.cs`): куда ходили, победа или поражение, сколько вернулось из скольких, добыча. - Окно появляется и за походы, закончившиеся, пока игра была закрыта: сразу после входа в город. - Несколько возвращений — окна по очереди. - На карте мира окно своё (`WorldMapController`). ## Сохранение Секция `"world"`: `{ "marches": [ MarchData ] }`. Сброс (`ResetState`): все походы отменяются. Войска в походе не возвращаются: их сбрасывает `GameProgress` вместе с армией. Раньше походы лежали в `progress.json` (`sashaMarches`). При первом запуске `App/GameModules` переносит их в модуль Мира и удаляет из `progress.json` только после записи `save.json`. ## Файлы | Файл | Что это | | --- | --- | | `MarchManager.cs` | Ведёт походы, реализует `IWorld` и `ISaveParticipant`. Создаётся сам при запуске игры. | | `Simulation/WorldMapLayout.cs` | Карта: замок, город игрока, 20 соседей из seed. | | `Simulation/WorldSimulation.cs` | Походы: старт, бой по прибытии, возвращение. Бой получает через `IBattleSystem`. | В слое приложения остаются `WorldMap/WorldMapController.cs`, `MarchView.cs`, `MapCameraController.cs`, `SceneNavigator.cs`. **В игре одна карта мира** — сцена WorldMap. Открывается кнопкой «БОЙ» и кнопкой «МИР» в городе (`UIPanelManager.Open("World")` ведёт в эту сцену). ## Решения и план - **Этап 0, решено 19.10.2026:** осталась одна карта мира — эта. Маленькая карта (панель «МИР», `Meta/World`) удалена. Перед удалением проверены ссылки в коде, сценах и префабах. Перенос сохранений: солдаты из её походов (`marches` в `progress.json`) возвращаются в город при загрузке — отправленные, а если отряд уже шёл назад, то выжившие. Добыча таких походов не переносится. - **Этап 4 (утверждён без изменений):** у позиций на карте — месторождения и их качество. - **Этап 6:** временные ресурсные точки и кристальные разломы; войска на точке недоступны дома. ## Журнал изменений | Дата | Кто | Что | | --- | --- | --- | | 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"`, статистика — через события. Формула боя вынесена в модуль Боя. |