From 102cb2b9c2ddfb8d841909cb53528b73741957a0 Mon Sep 17 00:00:00 2001 From: kittyegg Date: Fri, 22 May 2026 16:22:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=83=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BA=D0=B0=D1=87=D0=BA=D0=B8=20=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Prefabs/TurretLvl1.prefab | 3 ++ .../ScriptableObjects/TurretUpgrade.cs | 22 +++++++--- Assets/Scripts/Turret.cs | 43 +++++++++++++++---- Assets/Scripts/UI/TurretUpgradeViewer.cs | 13 +++++- Assets/TurretUpgrades.meta | 8 ++++ Assets/TurretUpgrades/TurretLvl1.meta | 8 ++++ Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset | 19 ++++++++ .../TurretLvl1/Lvl_2.asset.meta | 8 ++++ 8 files changed, 108 insertions(+), 16 deletions(-) create mode 100644 Assets/TurretUpgrades.meta create mode 100644 Assets/TurretUpgrades/TurretLvl1.meta create mode 100644 Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset create mode 100644 Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset.meta diff --git a/Assets/Prefabs/TurretLvl1.prefab b/Assets/Prefabs/TurretLvl1.prefab index 4bcf4d6..69b54c9 100644 --- a/Assets/Prefabs/TurretLvl1.prefab +++ b/Assets/Prefabs/TurretLvl1.prefab @@ -53,6 +53,9 @@ MonoBehaviour: _damage: 0 _distance: 0 _price: 100 + _sellingMultiplier: 0.5 + _upgrades: + - {fileID: 11400000, guid: 68a1d6af410516a45b1a068a14506079, type: 2} --- !u!114 &4447708407417138733 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs b/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs index fc39985..4687ff1 100644 --- a/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs +++ b/Assets/Scripts/ScriptableObjects/TurretUpgrade.cs @@ -1,10 +1,22 @@ using UnityEngine; -[CreateAssetMenu(fileName = "TurretLvl_", menuName = "Scriptable Objects/Turret Upgrade")] +[CreateAssetMenu(fileName = "Lvl_", 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; + [Tooltip("Процент стоисти от базовой цены турели для улучшения")] + [SerializeField] private float _upgradeCostMultiplier = 0.2f; + [Tooltip("null, чтобы не менять префаб пули")] + [SerializeField] private TurretBullet _bulletPrefab; + [Tooltip("-1, чтобы не менять урон")] + [SerializeField] private float _upgradeDamageMultiplier = -1f; + [Tooltip("-1, чтобы не менять дальность")] + [SerializeField] private float _upgradeDistanceMultiplier = -1f; + [Tooltip("-1, чтобы не менять время перезарядки")] + [SerializeField] private float _upgradeReloadTimeMultiplier = -1f; + + public float UpgradeConstMultiplier => _upgradeCostMultiplier; + public TurretBullet BulletPrefab => _bulletPrefab; + public float UpgradeDamageMultiplier => _upgradeDamageMultiplier; + public float UpgradeDistanceMultiplier => _upgradeDistanceMultiplier; + public float UpgradeReloadTimeMultiplier => _upgradeReloadTimeMultiplier; } diff --git a/Assets/Scripts/Turret.cs b/Assets/Scripts/Turret.cs index c6650bf..1988b5d 100644 --- a/Assets/Scripts/Turret.cs +++ b/Assets/Scripts/Turret.cs @@ -12,8 +12,6 @@ public class Turret : MonoBehaviour [Header("Economy")] [SerializeField] private int _price; [SerializeField] private float _sellingMultiplier = 0.5f; - [SerializeField] private float _upgradeCostMultiplier = 0.2f; - [SerializeField] private float _upgradeCostMultiplierIncrement = 0.1f; [Header("Upgrade")] [SerializeField] TurretUpgrade[] _upgrades; @@ -24,8 +22,19 @@ public class Turret : MonoBehaviour 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; + public int UpgradeCost + { + get + { + if (IsMaxLevel) + return 0; + + return Mathf.RoundToInt(_price * _upgrades[_lvl].UpgradeConstMultiplier); + } + } + public bool IsMaxLevel => _lvl >= _upgrades.Length; + public int Level => _lvl + 1; + public int MaxLevel => _upgrades.Length; private void Start() { @@ -39,11 +48,27 @@ public class Turret : MonoBehaviour return; var upgrade = _upgrades[_lvl++]; - // TODO: исправить умножение на 0 - _damage *= upgrade.UpgradeDamageMultiplier; - _distance *= upgrade.UpgradeDistanceMultiplier; - _reloadTime *= upgrade.UpgradeReloadTimeMultiplier; - _upgradeCostMultiplier += _upgradeCostMultiplierIncrement; + if (upgrade.BulletPrefab != null) + _bulletPrefab = upgrade.BulletPrefab; + + if (upgrade.UpgradeDistanceMultiplier != -1) + { + if (_damage == 0) + _damage = upgrade.UpgradeDamageMultiplier; + else + _damage *= upgrade.UpgradeDamageMultiplier; + } + + if (upgrade.UpgradeDistanceMultiplier != -1) + { + if (_distance == 0) + _distance = upgrade.UpgradeDistanceMultiplier; + else + _distance *= upgrade.UpgradeDistanceMultiplier; + } + + if (upgrade.UpgradeReloadTimeMultiplier != -1) + _reloadTime *= upgrade.UpgradeReloadTimeMultiplier; } private void Update() diff --git a/Assets/Scripts/UI/TurretUpgradeViewer.cs b/Assets/Scripts/UI/TurretUpgradeViewer.cs index d7d3da6..7236e78 100644 --- a/Assets/Scripts/UI/TurretUpgradeViewer.cs +++ b/Assets/Scripts/UI/TurretUpgradeViewer.cs @@ -10,6 +10,7 @@ public class TurretUpgradeViewer : MonoBehaviour [SerializeField] private TMPro.TextMeshProUGUI _upgradeCostText; private int _upgradeCost; + private bool _isMaxLevel; private void OnEnable() { @@ -27,7 +28,7 @@ public class TurretUpgradeViewer : MonoBehaviour private void OnMoneyChanged(int newMoney) { - _upgradeButton.interactable = newMoney >= _upgradeCost; + _upgradeButton.interactable = newMoney >= _upgradeCost && !_isMaxLevel; } private void OnTurretClicked(Turret turret) @@ -44,8 +45,16 @@ public class TurretUpgradeViewer : MonoBehaviour private void UpdateBtn(Turret turret) { + _isMaxLevel = turret.IsMaxLevel; + if (_isMaxLevel) + { + _upgradeCostText.text = "MAX"; + _upgradeButton.interactable = false; + return; + } + _upgradeCost = turret.UpgradeCost; _upgradeCostText.text = _upgradeCost.ToString(); - _upgradeButton.interactable = _wallet.Money >= _upgradeCost && !turret.IsMaxLevel; + _upgradeButton.interactable = _wallet.Money >= _upgradeCost; } } diff --git a/Assets/TurretUpgrades.meta b/Assets/TurretUpgrades.meta new file mode 100644 index 0000000..0440ace --- /dev/null +++ b/Assets/TurretUpgrades.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97de97cce299b0f479cd791fdfff039a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TurretUpgrades/TurretLvl1.meta b/Assets/TurretUpgrades/TurretLvl1.meta new file mode 100644 index 0000000..da7ab2b --- /dev/null +++ b/Assets/TurretUpgrades/TurretLvl1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b6c10b08ad53464fbbd5fd07a5d752b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset b/Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset new file mode 100644 index 0000000..e6ae9da --- /dev/null +++ b/Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 55eb675261abc594980c07f1195ca644, type: 3} + m_Name: Lvl_2 + m_EditorClassIdentifier: Assembly-CSharp::TurretUpgrade + _upgradeCostMultiplier: 0.2 + _bulletPrefab: {fileID: 0} + _upgradeDamageMultiplier: 1.5 + _upgradeDistanceMultiplier: 1.5 + _upgradeReloadTimeMultiplier: 0.75 diff --git a/Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset.meta b/Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset.meta new file mode 100644 index 0000000..563668d --- /dev/null +++ b/Assets/TurretUpgrades/TurretLvl1/Lvl_2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68a1d6af410516a45b1a068a14506079 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: