5.1 KiB
Экономика
Ресурсы и производство: сколько у игрока дерева, еды, золота и остального, кто их добывает и тратит.
- Сборка:
Bogatyri.Economy. - Папка:
Assets/Scripts/Modules/Economy. - Зависит от: ядра.
Контракт IEconomy
| Метод | Что делает |
|---|---|
Get(type) |
Сколько ресурса сейчас. |
Has(type, amount) |
Хватает ли. |
Add(type, amount) |
Добавить (или отнять отрицательным числом; в минус не уходит). |
TrySpend(type, amount) |
Потратить, если хватает. |
CanAfford(cost) / TrySpend(cost) |
Проверить и списать цену из нескольких ресурсов — всё или ничего. |
Получить: GameServices.Get<IEconomy>().
События
- Публикует:
ResourceChangedEvent— при любом изменении ресурса (тип и новое значение). - Слушает: ничего.
Для интерфейса остаётся C#-событие ResourceManager.OnResourceChanged (его слушает ResourceUIText).
Сохранение
Секция "economy": { "resources": [ { "type", "amount" } ] } — имена полей как в старом save.json.
Сброс (ResetState): стартовые значения из Inspector ResourceManager (startWood и т.д.).
Файлы
| Файл | Что это |
|---|---|
ResourceManager.cs |
Хранилище ресурсов, реализует IEconomy и ISaveParticipant. Живёт между сценами. |
ResourceProducer.cs |
Здание, добывающее ресурс по таймеру. |
ResourceCollector.cs |
Временная добыча по клику. Реализует ILeveledBuilding. |
Интерфейс экономики остаётся в слое приложения: Assets/Scripts/Economy/ResourceUIText.cs, BuildingUI.cs.
Таблица баланса EconomyConfig
Все числа экономики — в ассете Assets/Resources/EconomyConfig.asset (класс App/EconomyConfig.cs, слой приложения). Меняются в Inspector без перекомпиляции. Разделы: население, стартовые ресурсы новой игры, производство T1, месторождения, цена солдата. Числа с пометкой «не утверждено» — временные.
Модули конфиг не видят: App/GameModules переводит его в правила модуля (например, PopulationRules). Нет ассета — берутся числа по умолчанию из EconomyConfig.cs и в консоли предупреждение.
Стартовые ресурсы новой игры выдаёт App/GameModules (при первой игре и после сброса): ресурс поднимается до стартового, если его меньше.
Ресурс Population («Люди») теперь отражает модуль Населения: App/GameModules держит его равным IPopulation.Total. Тратить его напрямую не нужно.
Решения и план
- Этап 1 (план разработки): лимиты Склада и Амбара;
Gems→BlueCrystal;Powerубрать из ресурсов. - Решение команды от 19.10.2026: у синего кристалла отдельный небольшой настраиваемый лимит хранения, не бесконечный. Переполнение — одно правило для наград и добычи. Число не утверждено.
- Этап 3: убрать кликер (
ResourceCollector); производство = рабочие × норма × качество месторождения × бонус уровня. - Все числа — из
EconomyConfig, не в коде. Таблица создана 26.10.2026; производство, месторождения и цена солдата в ней уже есть, но используются начиная с этапов 3–5.
Журнал изменений
| Дата | Кто | Что |
|---|---|---|
| 26.10.2026 | Claude | Таблица баланса EconomyConfig. Стартовые ресурсы новой игры. Ресурс «Люди» отражает модуль Населения. |
| 19.10.2026 | Claude | ResetState(): при сбросе сохранений ресурсы возвращаются к стартовым. |
| 19.10.2026 | Claude | Модуль выделен: ResourceManager, ResourceProducer, ResourceCollector перенесены в Modules/Economy. ResourceManager реализует IEconomy, публикует ResourceChangedEvent, сам сохраняет секцию "economy". |