- Ядро (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.6 KiB
4.6 KiB
Игровое ядро
Общие данные, игровые правила взаимодействия и связь модулей. Ядро не содержит игровой логики — только «язык», на котором модули говорят друг с другом.
- Сборки:
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() — новая игра. |
Порядок запуска
SubsystemRegistration—CoreUnityBootstrapочищает ядро.AfterAssembliesLoaded—App/GameModulesиSettlementModuleрегистрируют сервисы и подписки.BeforeSceneLoad— создаётсяMarchManager(Мир).Awakeобъектов сцены —ResourceManager,SaveManagerрегистрируются сами.AfterSceneLoad— перенос старых походов изprogress.json.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. |