Files
MVP1/Docs/Modules/Core.md
T
AlexanderandClaude Opus 5.5 15b06b8f42 Модули Чата и Круга, разворот чата на весь экран, кнопка «Почта» в Safe Area
Модуль Чата (Bogatyri.Chat, без Unity):
- чат вынесен из Social в отдельный модуль; контракт IChat в ядре,
  событие ChatMessageReceivedEvent, LocalPlayer (id и имя игрока)
- панель чата работает только через контракт и события
- разворот чата на весь экран: кнопка «Развернуть/Свернуть» или Esc

Модуль Круга (Bogatyri.Circle, без Unity):
- основать Круг, вступить, выйти; роли главы и участника; 30 мест
- уход главы передаёт главенство, последний участник распускает Круг
- секция сохранения "circle", участвует в сбросе сохранений
- окно «Круг» (кнопка внизу карты мира), демо-Круги до появления сервера
- канал «Круг» в чате — только для участников Круга

Прочее:
- кнопка «Почта» привязана к правому краю нижней панели
  (в безопасной зоне она уезжала за экран)
- тесты Чата и Круга; документы Chat.md, Circle.md, обновлены README, Core, Save

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 19:07:45 +02:00

5.4 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/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 Армия (ArmyBridge.Service) Воины дома; забрать в поход; вернуть выживших.
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 — население, гарнизон, голод, лимиты хранения — добавляются сюда, когда начинается соответствующий этап.

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

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