- Ядро (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>
4.0 KiB
Глобальный мир
Карта и перемещения: замок с боссом, 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<IWorld>(). Интерфейсу карты (WorldMapController) можно обращаться к MarchManager.Instance и его C#-событиям: там полные данные похода.
События
Публикует:
MarchStartedEvent— войско выступило;MarchBattleResolvedEvent— бой у цели прошёл;MarchReturnedEvent— войско вернулось, солдаты и добыча зачислены.
Слушает: ничего. App/GameModules по этим событиям считает статистику для заданий (marchesSent, dailyMarches, worldWins).
Сохранение
Секция "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 и вторая карта Meta/World/*.
Решения и план
- Этап 0: в проекте две карты мира — эта и
Meta/World/WorldSystem. Команда должна выбрать одну. По решению от 19.10.2026 вторую реализацию не удалять без проверки контрактов и миграции сохранений. - Этап 4 (утверждён без изменений): у позиций на карте — месторождения и их качество.
- Этап 6: временные ресурсные точки и кристальные разломы; войска на точке недоступны дома.
Журнал изменений
| Дата | Кто | Что |
|---|---|---|
| 19.10.2026 | Claude | ResetState(): при сбросе сохранений походы отменяются. |
| 19.10.2026 | Claude | Модуль выделен. MarchManager больше не обращается к GameProgress и ResourceManager: войска через IArmy, добыча через IEconomy, сохранение — своя секция "world", статистика — через события. Формула боя вынесена в модуль Боя. |