- Ядро (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>
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"). Восстановление защищено от двойного запуска и от освобождения занятого участка. Файлы переименованы под имена классов. |