mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
Переделал систему прокачки туррелей
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
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;
|
||||
_upgradeCostMultiplier += _upgradeCostMultiplierIncrement;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 97de97cce299b0f479cd791fdfff039a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b6c10b08ad53464fbbd5fd07a5d752b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 68a1d6af410516a45b1a068a14506079
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user