Skip to content

Latest commit

 

History

History
85 lines (64 loc) · 5.33 KB

File metadata and controls

85 lines (64 loc) · 5.33 KB

Shop

Что это: Shop — основной runtime-контроллер магазина. Он загружает цены и экипированный товар через SaveProvider, показывает превью, создаёт недостающие ShopItem, обрабатывает покупку через IMoneySpend и обновляет визуализацию. Файл: Scripts/Shop/Shop.cs, пространство имён: Neo.Shop.

Как использовать:

  1. Создать ассеты ShopItemData, назначить их в массив Shop Item Datas.
  2. На сцену добавить объект с компонентом Shop; привязать Shop Item Preview и массив Shop Items (или задать Prefab и Container для автозаполнения).
  3. В Money Spend Source указать объект с IMoneySpend (например Money); если пусто — используется Money.I.
  4. Вызовы: Buy() / Buy(id) для покупки, Select(id) через свойство Id или события.

Что делает компонент

  • Загружает стартовые цены из ShopItemData[] или из сохранения.
  • Восстанавливает последний экипированный товар по _keySaveEquipped.
  • Может автоматически создать недостающие ShopItem из _prefab.
  • Подписывает кнопки покупки у элементов магазина, если включён _autoSubscribe.
  • Покупает товар через IMoneySpend.
  • Для одноразовых покупок может обнулить цену после покупки.
  • Обновляет превью и визуал всех элементов.

Публичные свойства

Свойство Описание
Prices Текущий массив цен.
ShopItemDatas Ассеты данных товаров.
PreviewId ID товара в превью.
Id ID текущего выбранного товара. Установка вызывает Select().

Настройки Inspector

  • Shop Item Datas — данные товаров.
  • Shop Item Preview — отдельный элемент для показа текущего превью.
  • Shop Items — готовые runtime-элементы магазина.
  • Use Set Item — визуально выделять выбранный товар через ShopItem.Select().
  • Auto Subscribe — автоматически подписывать кнопки buttonBuy.
  • Activate Saved Equipped — активировать последний сохранённый товар после загрузки.
  • Key Save — префикс ключей сохранения цен.
  • Key Save Equipped — ключ сохранения выбранного товара.
  • Change Preview On Purchase Failed — переключать ли превью на товар при неудачной покупке.
  • Container / Prefab — используются для автоспавна ShopItem.
  • moneySpendSource — объект с IMoneySpend; если не задан, используется Money.I.

Основные методы

Метод Описание
ShowPreview(int id) Показывает товар в превью без покупки.
Buy() Покупает текущий товар из превью.
Buy(int id) Покупает товар по id.
Visual() Перерисовывает все ShopItem.

События

  • OnSelect — выбор товара.
  • OnPurchased — успешная покупка.
  • OnPurchaseFailed — неудачная покупка.
  • OnLoad — завершение загрузки магазина.

Сохранение

Компонент не привязан напрямую к PlayerPrefs.

Текущая версия использует SaveProvider:

  • цены читаются через SaveProvider.GetInt(_keySave + i, defaultValue);
  • изменённые цены сохраняются через SaveProvider.SetInt(...);
  • выбранный товар сохраняется через SaveProvider.SetInt(_keySaveEquipped, _id).

Shop.Save() не вызывает SaveProvider.Save() вручную, а только обновляет значения в активном provider backend.

Поведение покупки

  • Если цена товара уже 0, компонент просто выбирает его без списания денег.
  • Если покупка успешна и у ShopItemData.isSinglePurchase == true, цена товара становится 0.
  • Если денег недостаточно, вызывается OnPurchaseFailed.
  • При включённом _changePreviewOnPurchaseFailed превью переключится на товар, который не удалось купить.

См. также