Files
MVP1/Docs/Modules/Settlement.md
AlexanderandClaude Opus 5.5 964cb23d9d Модульная система: игровое ядро + 6 модулей, документы Docs/Modules
- Ядро (Bogatyri.Core): контракты модулей, EventBus, GameServices, SaveRegistry
- Модули: Экономика, Поселение, Армия, Глобальный мир, Боевая система, Сохранения
  (каждый — отдельный asmdef, видит только ядро)
- App/GameModules: регистрация модулей и связь с GameProgress/Казармами
- Сохранения v2 по секциям модулей, перенос старого save.json и походов из progress.json
- Сброс сохранений: ISaveSystem.ResetAll, ResetState у модулей, меню Tools
- EditMode-тесты модулей, документы по каждому модулю с журналом изменений

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

4.6 KiB

Поселение

Здания и развитие города: Ратуша, участки под застройку, постройка зданий, восстановление города из сохранения.

  • Сборка: Bogatyri.Settlement.
  • Папка: Assets/Scripts/Modules/Settlement.
  • Зависит от: ядра. Ресурсы на стройку берёт через IEconomy.

Контракт ISettlement

Свойство Что значит
TownHallLevel Уровень Ратуши (если город не открыт — из сохранения).
BuildingCount Сколько построек.
IsCityLoaded Открыта ли сейчас сцена города.

Получить: GameServices.Get<ISettlement>().

События

Публикует:

  • BuildingPlacedEvent — здание построено (имя здания);
  • TownHallLevelChangedEvent — Ратуша улучшена (новый уровень);
  • SettlementRestoringEvent — город начинает восстанавливаться из сохранения. На него App/GameModules добавляет Казармы в список стройки.

Слушает: ничего.

Сохранение

Секция "settlement": { "townHallLevel", "placedBuildings": [ { "buildingName", "posX", "posY", "level" } ] }.

Сброс (ResetState): Ратуша 1 уровня, постройки убраны, участки освобождены, память модуля очищена. Иначе при следующем входе в город вернулись бы старые здания.

Модуль помнит последнее состояние города, поэтому сохранение на карте мира не стирает постройки. При каждом входе в город (BuildManager.Start) здания восстанавливаются один раз. Уровень здания берётся у любого компонента с ILeveledBuilding.

Файлы

Файл Что это
SettlementModule.cs Точка входа: ISettlement, сохранение города, восстановление на сцене.
BuildManager.cs Режим стройки, список зданий, участки.
BuildingData.cs Описание здания (ScriptableObject): префаб, цена, нужный уровень Ратуши.
TownHall.cs Ратуша и её улучшение. Раньше файл назывался NewEmptyCSharpScript.cs.
BuildSlot.cs Участок под здание и связь здания с участком.
PlacedBuildingId.cs Метка построенного здания. Раньше файл назывался PlaceBuilding.cs.

В слое приложения остаются BuildMenuUi.cs, Meta/Build/* (Казармы, BuildModeController).

Решения и план

  • Решение команды от 19.10.2026 (этап 2): Ратуша даёт базовую вместимость жителей, новое здание «Дом» — дополнительные места.
    • Лимит населения = база Ратуши + сумма Домов + бонусы, значения из EconomyConfig.
    • Уровень поселения задаёт доступные уровни и количество жилья, а также минимальный гражданский резерв.
  • Этап 3: рабочие места в зданиях (BuildingData), экран распределения рабочих.
  • Этап 4 (утверждён без изменений): доступность зданий зависит от месторождений позиции.

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

Дата Кто Что
19.10.2026 Claude ResetState() для сброса сохранений. Убранные здания помечаются, чтобы запись в том же кадре их не сохранила.
19.10.2026 Claude Модуль выделен. Стройка и Ратуша платят через IEconomy. Сохранение города перенесено из SaveManager в SettlementModule (секция "settlement"). Восстановление защищено от двойного запуска и от освобождения занятого участка. Файлы переименованы под имена классов.