mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
Добавлена прокачка туррелей
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d63733fd87507ca4cb124b9fc3e63d1e
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user