- Ядро (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>
3.4 KiB
3.4 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.
Решения и план
- Этап 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". |