Добавлена прокачка туррелей

This commit is contained in:
2026-05-20 23:14:42 +03:00
parent be0933e569
commit 2f8f3a7d41
7 changed files with 997 additions and 3 deletions
+21
View File
@@ -2,18 +2,30 @@ using UnityEngine;
public class Turret : MonoBehaviour
{
[Header("References")]
[SerializeField] private TurretBullet _bulletPrefab;
[SerializeField] private Transform _bulletSpawnPoint;
[Header("Stats")]
[SerializeField] private float _reloadTime = 1f;
[SerializeField] private float _damage;
[SerializeField] private float _distance = 3f;
[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] private float _upgradeDamageMultiplier = 1.5f;
[SerializeField] private float _upgradeDistanceMultiplier = 1.5f;
[SerializeField] private float _upgradeReloadTimeMultiplier = 0.75f;
private float _reloadTimer;
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);
private void Start()
{
@@ -21,6 +33,15 @@ public class Turret : MonoBehaviour
_bulletSpawnPoint = transform;
}
public void Upgrade()
{
// TODO: исправить умножение на 0
_damage *= _upgradeDamageMultiplier;
_distance *= _upgradeDistanceMultiplier;
_reloadTime *= _upgradeReloadTimeMultiplier;
_upgradeCostMultiplier += _upgradeCostMultiplierIncrement;
}
private void Update()
{
SpawnBullet(Vector3.forward);
+95
View File
@@ -0,0 +1,95 @@
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class TurretUpdater : MonoBehaviour
{
[SerializeField] private BlockDetector _blockDetector;
[SerializeField] private TurretsShop _shop;
[SerializeField] private Wallet _wallet;
[SerializeField] private Button _sellButton;
[SerializeField] private Button _upgradeButton;
[SerializeField] private UnityEvent<Turret> _onTurretClicked;
public event UnityAction<Turret> OnTurretClicked
{
add => _onTurretClicked.AddListener(value);
remove => _onTurretClicked.RemoveListener(value);
}
private Turret _clickedTurret;
private bool _isDestroyingTurret;
private Turret ClickedTurret
{
get => _clickedTurret;
set
{
_clickedTurret = value;
_onTurretClicked?.Invoke(value);
}
}
private void OnEnable()
{
_blockDetector.OnBlockClicked += OnBlockClicked;
_shop.OnDestroyTurretSelected += OnDestoyTurretSelected;
_shop.OnDestroyTurretDeselected += OnDestroyTurretDeselected;
}
private void OnDisable()
{
_blockDetector.OnBlockClicked -= OnBlockClicked;
_shop.OnDestroyTurretSelected -= OnDestoyTurretSelected;
_shop.OnDestroyTurretDeselected -= OnDestroyTurretDeselected;
}
private void Start()
{
_sellButton.onClick.AddListener(SellTurret);
_upgradeButton.onClick.AddListener(UpgradeTurret);
}
private void OnBlockClicked(BlockScript block)
{
if (_isDestroyingTurret)
return;
if (_clickedTurret != null)
ClickedTurret = null;
if (block.Type == BlockScript.BlockType.Turret)
ClickedTurret = block.GetComponent<Turret>();
}
private void OnDestoyTurretSelected()
{
_isDestroyingTurret = true;
ClickedTurret = null;
}
private void OnDestroyTurretDeselected()
{
_isDestroyingTurret = false;
ClickedTurret = null;
}
private void UpgradeTurret()
{
if (ClickedTurret == null || _wallet.Money < ClickedTurret.UpgradeCost)
return;
_wallet.TakeMoney(ClickedTurret.UpgradeCost);
ClickedTurret.Upgrade();
}
private void SellTurret()
{
if (ClickedTurret == null)
return;
_wallet.AddMoney(ClickedTurret.SellPrice);
Destroy(ClickedTurret.gameObject);
ClickedTurret = null;
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d63733fd87507ca4cb124b9fc3e63d1e
+1 -2
View File
@@ -9,7 +9,6 @@ public class TurretsShop : MonoBehaviour
[SerializeField] private BlockDetector _blockDetector;
[SerializeField] private Transform _turretsHolder;
[SerializeField] private InputAction _deselectAction;
[SerializeField] private float _sellingCoefficient = 0.5f;
[SerializeField] private TurretShopItem[] _turretShopItems;
[SerializeField] private UnityEvent<TurretShopItem> _onTurretSelected;
[SerializeField] private UnityEvent _onTurretDeselected;
@@ -134,7 +133,7 @@ public class TurretsShop : MonoBehaviour
if (turret == null || !_isDestroySelected)
return;
_wallet.AddMoney(Mathf.RoundToInt(turret.Price * _sellingCoefficient));
_wallet.AddMoney(turret.SellPrice);
Destroy(turret.gameObject);
}
}
+44
View File
@@ -0,0 +1,44 @@
using UnityEngine;
using UnityEngine.UI;
public class TurretUpgradeViewer : MonoBehaviour
{
[SerializeField] private Transform _viewerHolder;
[SerializeField] private TurretUpdater _turretUpdater;
[SerializeField] private Wallet _wallet;
[SerializeField] private Button _upgradeButton;
[SerializeField] private TMPro.TextMeshProUGUI _upgradeCostText;
private int _upgradeCost;
private void OnEnable()
{
_wallet.OnMoneyChanged += OnMoneyChanged;
_turretUpdater.OnTurretClicked += OnTurretClicked;
}
private void OnDisable()
{
_wallet.OnMoneyChanged -= OnMoneyChanged;
_turretUpdater.OnTurretClicked -= OnTurretClicked;
}
private void OnMoneyChanged(int newMoney)
{
_upgradeButton.interactable = newMoney >= _upgradeCost;
}
private void OnTurretClicked(Turret turret)
{
if (turret == null)
{
_viewerHolder.gameObject.SetActive(false);
return;
}
_viewerHolder.gameObject.SetActive(true);
_upgradeCost = turret.UpgradeCost;
_upgradeCostText.text = _upgradeCost.ToString();
_upgradeButton.interactable = _wallet.Money >= _upgradeCost;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5a5c59e7dcbc4ec42ad5edbfc2e9952f