Files
AlexanderandClaude Opus 5.5 f10fb3b3aa Модуль Армии хранит войска; окно «Войско вернулось» в городе
Модуль Армии (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>
2026-10-23 18:33:04 +02:00

5.7 KiB
Raw Permalink 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/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() — новая игра.

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

  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 — население, гарнизон, голод, лимиты хранения — добавляются сюда, когда начинается соответствующий этап.

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

Дата Кто Что
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.