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

9.4 KiB

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

Игра собрана из восьми модулей вокруг общего Игрового ядра. Модули общаются только через контракты и события ядра и не управляют внутренним кодом друг друга. Это правило проверяет сам 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 (основа — тест «один солдат в одном месте» для походов уже есть);
  • голод и восстановление: еда кончилась → дебаффы, в том числе у защитников; еда вернулась → снятие по правилу;
  • предел синих кристаллов: кристаллы не копятся бесконечно, сверх лимита — по общему правилу.

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

Дата Кто Что
23.10.2026 Claude Окно «ВОЙСКО ВЕРНУЛОСЬ» в городе (UI/MarchReturnPopup.cs), обновлён World.
23.10.2026 Claude Войска переехали в модуль Армии (ArmyService, секция army), ArmyBridge удалён. Обновлены Army, Core, Save.
19.10.2026 Claude Оставлена одна карта мира (сцена WorldMap). Маленькая карта Meta/World удалена с переносом солдат из её походов. Обновлены World и Army.
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.