diff --git a/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs b/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs new file mode 100644 index 0000000..fc39985 --- /dev/null +++ b/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +[CreateAssetMenu(fileName = "TurretLvl_", menuName = "Scriptable Objects/Turret Upgrade")] +public class TurretUpgrade : ScriptableObject +{ + // TODO: инкапсулировать поля + public float UpgradeDamageMultiplier = 1.5f; + public float UpgradeDistanceMultiplier = 1.5f; + public float UpgradeReloadTimeMultiplier = 0.75f; +} diff --git a/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs.meta b/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs.meta new file mode 100644 index 0000000..0bf7406 --- /dev/null +++ b/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 55eb675261abc594980c07f1195ca644 \ No newline at end of file diff --git a/Assets/Scripts/Turret.cs b/Assets/Scripts/Turret.cs index 64bf8bc..c6650bf 100644 --- a/Assets/Scripts/Turret.cs +++ b/Assets/Scripts/Turret.cs @@ -15,17 +15,17 @@ public class Turret : MonoBehaviour [SerializeField] private float _upgradeCostMultiplier = 0.2f; [SerializeField] private float _upgradeCostMultiplierIncrement = 0.1f; [Header("Upgrade")] - [SerializeField] private float _upgradeDamageMultiplier = 1.5f; - [SerializeField] private float _upgradeDistanceMultiplier = 1.5f; - [SerializeField] private float _upgradeReloadTimeMultiplier = 0.75f; + [SerializeField] TurretUpgrade[] _upgrades; private float _reloadTimer; + private int _lvl; public int Price => _price; public float Damage => _damage; public float Distance => _distance; public int SellPrice => Mathf.RoundToInt(_price * _sellingMultiplier); public int UpgradeCost => Mathf.RoundToInt(_price * _upgradeCostMultiplier); + public bool IsMaxLevel => _lvl >= _upgrades.Length - 1; private void Start() { @@ -35,10 +35,14 @@ public class Turret : MonoBehaviour public void Upgrade() { + if (IsMaxLevel) + return; + + var upgrade = _upgrades[_lvl++]; // TODO: исправить умножение на 0 - _damage *= _upgradeDamageMultiplier; - _distance *= _upgradeDistanceMultiplier; - _reloadTime *= _upgradeReloadTimeMultiplier; + _damage *= upgrade.UpgradeDamageMultiplier; + _distance *= upgrade.UpgradeDistanceMultiplier; + _reloadTime *= upgrade.UpgradeReloadTimeMultiplier; _upgradeCostMultiplier += _upgradeCostMultiplierIncrement; } diff --git a/Assets/Scripts/UI/TurretUpgradeViewer.cs b/Assets/Scripts/UI/TurretUpgradeViewer.cs index 633f040..d7d3da6 100644 --- a/Assets/Scripts/UI/TurretUpgradeViewer.cs +++ b/Assets/Scripts/UI/TurretUpgradeViewer.cs @@ -46,6 +46,6 @@ public class TurretUpgradeViewer : MonoBehaviour { _upgradeCost = turret.UpgradeCost; _upgradeCostText.text = _upgradeCost.ToString(); - _upgradeButton.interactable = _wallet.Money >= _upgradeCost; + _upgradeButton.interactable = _wallet.Money >= _upgradeCost && !turret.IsMaxLevel; } }