- Ядро (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>
64 lines
4.6 KiB
Markdown
64 lines
4.6 KiB
Markdown
# Поселение
|
|
|
|
Здания и развитие города: Ратуша, участки под застройку, постройка зданий, восстановление города из сохранения.
|
|
|
|
- **Сборка:** `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"`). Восстановление защищено от двойного запуска и от освобождения занятого участка. Файлы переименованы под имена классов. |
|