Модуль Армии (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>
5.7 KiB
5.7 KiB
Игровое ядро
Общие данные, игровые правила взаимодействия и связь модулей. Ядро не содержит игровой логики — только «язык», на котором модули говорят друг с другом.
- Сборки:
Bogatyri.Core— чистый C#, без Unity (его можно взять на сервер);Bogatyri.Core.Unity— тонкая прослойка к движку.
- Папки:
Assets/Scripts/Modules/Core,Assets/Scripts/Modules/Core.Unity. - Зависимости: нет. От ядра зависят все модули.
Что внутри
| Файл | Что это |
|---|---|
Core/ResourceType.cs |
Перечисление ресурсов ResourceType и структура ResourceAmount (тип + количество). Числа enum не менять: они в сохранениях. |
Core/LocalPlayer.cs |
Id и имя локального игрока (пока без аккаунтов). |
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 |
Армия (ArmyService) |
Войска по типам, в городе и в походах; обучение, потери; забрать в поход, вернуть выживших. |
IWorld |
Мир (MarchManager) |
Сколько походов в пути; начать поход. |
IBattleSystem |
Бой (BattleSystem) |
Посчитать исход боя по BattleRequest. |
IChat |
Чат (ChatService) |
История каналов, можно ли писать в канал, отправка сообщения от локального игрока. |
ICircle |
Круг (CircleService) |
Круг игрока, список Кругов; основать, вступить, выйти. |
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 — население, гарнизон, голод, лимиты хранения — добавляются сюда, когда начинается соответствующий этап.
Журнал изменений
| Дата | Кто | Что |
|---|---|---|
| 23.10.2026 | Claude | IArmy расширен (типы, AddTroops, LoseFraction, TroopsInMarches), событие TroopsChangedEvent. GameLoadedEvent публикуется и когда файла сохранения нет. |
| 19.10.2026 | Claude | Контракт ICircle и типы CircleInfo, CircleMember, CircleRole; события CircleJoinedEvent, CircleLeftEvent; IChat.CanWrite. |
| 19.10.2026 | Claude | Контракт IChat, типы ChatChannel и ChatMessage, событие ChatMessageReceivedEvent, LocalPlayer. |
| 19.10.2026 | Claude | Сброс сохранений: ISaveSystem.ResetAll(), ISaveParticipant.ResetState(), событие GameResetEvent. |
| 19.10.2026 | Claude | Создано ядро: реестр, шина событий, контракты шести модулей, события, SaveRegistry. ResourceType перенесён сюда из ResourceManager.cs, UIBlocker — из Meta/Core. |