Files
MVP1/Docs/Modules
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
..

Модульная система «Богатырей»

Игра собрана из восьми модулей вокруг общего Игрового ядра. Модули общаются только через контракты и события ядра и не управляют внутренним кодом друг друга. Это правило проверяет сам Unity: каждый модуль — отдельная сборка (.asmdef), которая видит только ядро, поэтому прямое обращение к соседнему модулю не скомпилируется.

                        Игровое ядро (Bogatyri.Core)
          контракты (IEconomy, IArmy...) · события (EventBus) · реестр (GameServices)
   ┌───────────┬────────────┬───────────┬──────────────┬───────────────┬────────────┬──────────┬──────────┐
 Экономика  Поселение     Армия    Глобальный мир  Боевая система  Сохранения     Чат        Круг
 ресурсы,   здания,      войска,   карта,          урон, потери,   игровое        мир и      объединение
 производство развитие   характеристики перемещения  исход           состояние      Круг       игроков
                        ▲
            App/GameModules — точка сборки: регистрирует модули и соединяет их события
            со старыми системами (GameProgress, Казармы, панели UI)
Модуль Сборка Папка Документ
Игровое ядро Bogatyri.Core (без Unity), Bogatyri.Core.Unity Assets/Scripts/Modules/Core, Core.Unity Core.md
Экономика Bogatyri.Economy Assets/Scripts/Modules/Economy Economy.md
Поселение Bogatyri.Settlement Assets/Scripts/Modules/Settlement Settlement.md
Армия Bogatyri.Army (без Unity) Assets/Scripts/Modules/Army Army.md
Глобальный мир Bogatyri.World, Bogatyri.World.Simulation (без Unity) Assets/Scripts/Modules/World World.md
Боевая система Bogatyri.Battle (без Unity) Assets/Scripts/Modules/Battle Battle.md
Сохранения Bogatyri.Save Assets/Scripts/Modules/Save Save.md
Чат Bogatyri.Chat (без Unity) Assets/Scripts/Modules/Chat Chat.md
Круг Bogatyri.Circle (без Unity) Assets/Scripts/Modules/Circle Circle.md

Правила

  1. Модуль ссылается только на ядро. Нужен соседний модуль — получи его контракт: GameServices.Get<IEconomy>(). Никаких ResourceManager.Instance внутри модулей.
  2. Факты — событиями. Случилось что-то, о чём другим стоит знать, — EventBus.Publish(new ...Event{...}). Подписчик обязан отписаться в OnDestroy.
  3. Каждый модуль сам сохраняет свои данные — реализует ISaveParticipant и регистрируется в SaveRegistry. Модуль Сохранений не знает, что внутри секций.
  4. Правила игры — без Unity и без float, где это возможно (Армия, Бой, симуляция Мира). Этот код без изменений сможет работать на сервере.
  5. Слой приложения (Assets/Scripts, вне Modules) — интерфейс, панели, GameProgress. Ему можно обращаться к модулям напрямую. Переносить оттуда логику в модули — постепенно, по плану.
  6. Вся «проводка» — в App/GameModules.cs. Новую связь между модулем и остальной игрой добавляй туда, а не внутрь модуля.

Как вести документы модулей

  • Изменил модуль — обнови его документ в том же коммите. Новый метод контракта, событие, секция сохранения, файл — всё это в разделах документа.
  • В «Журнал изменений» добавляй строку сверху: дата, кто, что изменилось. Так видно историю модуля без чтения кода.
  • Решение команды, которое касается модуля, записывай в раздел «Решения и план» со ссылкой на источник (например, «план от 19.10.2026»).
  • Новый модуль — новый файл по образцу Economy.md и строка в таблице выше.

Тесты

EditMode-тесты: Assets/Scripts/Modules/Tests/ModuleTests.cs. Запуск: Window → General → Test Runner → EditMode → Run All.

Уже есть: Круг (основание, вступление, выход, полный Круг, сохранение), канал «Круг» в чате только для участников, чат (пустое сообщение, обрезка длинного, событие, предел истории), деление войск без двойного учёта и без потерь, бой (больше солдат — победа, ничья — защитнику), поход с офлайн-прогрессом, шина событий (ошибка подписчика не ломает остальных), реестр модулей.

Добавить вместе с этапами 1, 2 и 5 (решение команды от 19.10.2026):

  • лимит жилья: 300 жителей при лимите 300 — прирост стоит, построен Дом — прирост идёт;
  • нельзя призвать ниже гражданского резерва: 150 свободных, резерв 30 → призвать можно не больше 120;
  • назначение гарнизона: 30 солдат, 10 в гарнизон → 20 доступны, всего по-прежнему 30;
  • голод и восстановление: еда кончилась → дебаффы, в том числе у защитников; еда вернулась → снятие по правилу;
  • предел синих кристаллов: кристаллы не копятся бесконечно, сверх лимита — по общему правилу.

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

Дата Кто Что
19.10.2026 Claude Добавлен модуль Круга (Bogatyri.Circle, Circle.md): основать, вступить, выйти, роли, окно «Круг» на карте мира. Канал «Круг» в чате привязан к Кругу игрока.
19.10.2026 Claude Добавлен модуль Чата (Bogatyri.Chat, Chat.md) с разворотом на весь экран. В сцене города кнопка «ПОЧТА» привязана к правому краю нижней панели — в безопасной зоне она уезжала за экран.
19.10.2026 Claude Слой приложения: HUD города и карты мира учитывает Safe Area (UI/SafeArea.cs, UI/SafeAreaInstaller.cs). Элементы, растянутые на весь экран, остаются на весь экран.
19.10.2026 Claude Добавлен сброс сохранений (Настройки, меню Tools, ISaveSystem.ResetAll). Обновлены Core, Economy, Settlement, World, Save.
19.10.2026 Claude Создана модульная система: ядро, шесть модулей, точка сборки App/GameModules, тесты, документы модулей. Ветка feature/modules.