# Поселение Здания и развитие города: Ратуша, участки под застройку, постройка зданий, восстановление города из сохранения. - **Сборка:** `Bogatyri.Settlement`. - **Папка:** `Assets/Scripts/Modules/Settlement`. - **Зависит от:** ядра. Ресурсы на стройку берёт через `IEconomy`. ## Контракт `ISettlement` | Свойство | Что значит | | --- | --- | | `TownHallLevel` | Уровень Ратуши (если город не открыт — из сохранения). | | `BuildingCount` | Сколько построек. | | `IsCityLoaded` | Открыта ли сейчас сцена города. | Получить: `GameServices.Get()`. ## События **Публикует:** - `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"`). Восстановление защищено от двойного запуска и от освобождения занятого участка. Файлы переименованы под имена классов. |