# Upgrades Manager

#### **Интеграция в проект:**

1. В любом удобном месте создаем ScriptableObject UpgradeData (Create > Installers > UpgradeData) и заполняем данными&#x20;
2. На канвасе создаем объект и накидываем на него скрипт UpgradesManager&#x20;
3. В UpgradesManager создаем дочерний объект(Button(TextMeshPro)) и накидываем скрипт UpgradeButton, после чего прокидываем ссылки на тексты и на UpgradeData, созданный ранее

#### **Поля ScriptableObject(UpgradeData):**

1. `ButtonName` – название улучшения, используем, чтобы обращаться к улучшению через `Singleton`**`<UpgradeManager>`**
2. `StartPrice` – стартовая цена улучшения&#x20;
3. `PriceIncreaseValue` – Значение на/в которое будет увеличиваться стоимость каждого последующего улучшения&#x20;
4. `IncreaseType` – Тип увеличения стоимости каждого последующего улучшения

#### **Типы увеличения стоимости улучшения:**

1. Sum – увеличение стоимости каждый раз на определенную сумму, таким образом стоимость улучшения будет следующей (1 lvl - 100, 2 lvl - 125, 3 lvl - 150 и т.д.)&#x20;
2. Multiply – увеличение стоимости каждый раз во сколько-то раз, таким образом стоимость улучшения будет следующей (1 lvl - 100, 2 lvl - 200, 3 lvl - 400 и т.д.)

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

1. В созданную кнопку добавляем Listener “UpgradeButton > Upgrade()”, проверка на то хватает ли монет происходит внутри метода, там же происходит вычитание денег из CoinsManager’a и увеличение стоимости следующего улучшения&#x20;
2. Кнопки должны обязательно лежать внутри объекта UpgradesManager для того, чтобы происходила автоматическая инициализация в методе Awake()&#x20;
3. К улучшениям можно обратиться через Singleton:&#x20;
   1. GetUpgradesLevel(*Название улучшения*) – возвращает текущий уровень улучшения
   2. SubscribeOnChanges(*Название улучшения*, *Action*) – Подписка на событие улучшения
