# Экономика Ресурсы и производство: сколько у игрока дерева, еды, золота и остального, кто их добывает и тратит. - **Сборка:** `Bogatyri.Economy`. - **Папка:** `Assets/Scripts/Modules/Economy`. - **Зависит от:** ядра. ## Контракт `IEconomy` | Метод | Что делает | | --- | --- | | `Get(type)` | Сколько ресурса сейчас. | | `Has(type, amount)` | Хватает ли. | | `Add(type, amount)` | Добавить (или отнять отрицательным числом; в минус не уходит). | | `TrySpend(type, amount)` | Потратить, если хватает. | | `CanAfford(cost)` / `TrySpend(cost)` | Проверить и списать цену из нескольких ресурсов — всё или ничего. | Получить: `GameServices.Get()`. ## События - **Публикует:** `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`. ## Решения и план - **Этап 1 (план разработки):** лимиты Склада и Амбара; `Gems` → `BlueCrystal`; `Power` убрать из ресурсов. - **Решение команды от 19.10.2026:** у синего кристалла отдельный небольшой настраиваемый лимит хранения, не бесконечный. Переполнение — одно правило для наград и добычи. Число не утверждено. - **Этап 3:** убрать кликер (`ResourceCollector`); производство = рабочие × норма × качество месторождения × бонус уровня. - Все числа — из `EconomyConfig`, не в коде. ## Журнал изменений | Дата | Кто | Что | | --- | --- | --- | | 19.10.2026 | Claude | `ResetState()`: при сбросе сохранений ресурсы возвращаются к стартовым. | | 19.10.2026 | Claude | Модуль выделен: `ResourceManager`, `ResourceProducer`, `ResourceCollector` перенесены в `Modules/Economy`. `ResourceManager` реализует `IEconomy`, публикует `ResourceChangedEvent`, сам сохраняет секцию `"economy"`. |