Files
MVP1/Docs/Modules/Core.md
T
AlexanderandClaude Opus 5.5 964cb23d9d Модульная система: игровое ядро + 6 модулей, документы Docs/Modules
- Ядро (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>
2026-10-19 18:39:28 +02:00

4.6 KiB
Raw Blame History

Игровое ядро

Общие данные, игровые правила взаимодействия и связь модулей. Ядро не содержит игровой логики — только «язык», на котором модули говорят друг с другом.

  • Сборки:
    • Bogatyri.Core — чистый C#, без Unity (его можно взять на сервер);
    • Bogatyri.Core.Unity — тонкая прослойка к движку.
  • Папки: Assets/Scripts/Modules/Core, Assets/Scripts/Modules/Core.Unity.
  • Зависимости: нет. От ядра зависят все модули.

Что внутри

Файл Что это
Core/ResourceType.cs Перечисление ресурсов ResourceType и структура ResourceAmount (тип + количество). Числа enum не менять: они в сохранениях.
Core/GameServices.cs Реестр модулей: Register<T>, Get<T>, TryGet<T>, Has<T>, Unregister<T>.
Core/EventBus.cs Шина событий: Subscribe<T>, Unsubscribe<T>, Publish<T>. Ошибка одного подписчика не мешает остальным (уходит в OnHandlerError).
Core/Contracts/ModuleContracts.cs Контракты всех модулей и SaveRegistry — см. таблицу ниже.
Core/Events/GameEvents.cs Все события модулей.
Core.Unity/CoreUnityBootstrap.cs При старте игры очищает реестр, шину и список сохраняемых, подключает ошибки шины к Debug.LogException.
Core.Unity/UIBlocker.cs «Палец над интерфейсом?» — общая проверка для кликов по миру.

Контракты

Контракт Реализует Что умеет
IEconomy Экономика (ResourceManager) Узнать, добавить, потратить ресурс; проверить и списать цену целиком.
ISettlement Поселение (SettlementModule) Уровень Ратуши, число построек, открыт ли город.
ILeveledBuilding Здания с уровнем (ResourceCollector) Уровень здания — его сохраняет Поселение.
IArmy Армия (ArmyBridge.Service) Воины дома; забрать в поход; вернуть выживших.
IWorld Мир (MarchManager) Сколько походов в пути; начать поход.
IBattleSystem Бой (BattleSystem) Посчитать исход боя по BattleRequest.
ISaveSystem Сохранения (SaveManager) Есть ли сохранение; сохранить сейчас; стереть; сбросить всё (ResetAll).
ISaveParticipant Любой модуль с данными Секция сохранения: ключ, Capture(), Restore(json), ResetState() — новая игра.

Порядок запуска

  1. SubsystemRegistration — CoreUnityBootstrap очищает ядро.
  2. AfterAssembliesLoaded — App/GameModules и SettlementModule регистрируют сервисы и подписки.
  3. BeforeSceneLoad — создаётся MarchManager (Мир).
  4. Awake объектов сцены — ResourceManager, SaveManager регистрируются сами.
  5. AfterSceneLoad — перенос старых походов из progress.json.
  6. Start — GameBootstrap загружает сохранение.

Решения и план

  • Решение команды от 19.10.2026: единый источник истины для населения, армии и ресурсов. Новые контракты для этапов 1, 2 и 5 — население, гарнизон, голод, лимиты хранения — добавляются сюда, когда начинается соответствующий этап.

Журнал изменений

Дата Кто Что
19.10.2026 Claude Сброс сохранений: ISaveSystem.ResetAll(), ISaveParticipant.ResetState(), событие GameResetEvent.
19.10.2026 Claude Создано ядро: реестр, шина событий, контракты шести модулей, события, SaveRegistry. ResourceType перенесён сюда из ResourceManager.cs, UIBlocker — из Meta/Core.