mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
Переделал магазин турелей
This commit is contained in:
@@ -5,91 +5,48 @@ using UnityEngine.InputSystem;
|
||||
|
||||
public class TurretsShop : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private GameManager _gameManager;
|
||||
[SerializeField] private Wallet _wallet;
|
||||
[SerializeField] private BlockDetector _blockDetector;
|
||||
[SerializeField] private Transform _turretsHolder;
|
||||
[SerializeField] private InputAction _deselectAction;
|
||||
[SerializeField] private TurretShopItem[] _turretShopItems;
|
||||
[SerializeField] private UnityEvent<TurretShopItem> _onTurretSelected;
|
||||
[SerializeField] private UnityEvent _onTurretDeselected;
|
||||
[SerializeField] private UnityEvent _onDestroyTurretSelected;
|
||||
[SerializeField] private UnityEvent _onDestroyTurretDeselected;
|
||||
|
||||
public event UnityAction<TurretShopItem> OnTurretSelected
|
||||
{
|
||||
add => _onTurretSelected.AddListener(value);
|
||||
remove => _onTurretSelected.RemoveListener(value);
|
||||
}
|
||||
|
||||
public event UnityAction OnTurretDeselected
|
||||
{
|
||||
add => _onTurretDeselected.AddListener(value);
|
||||
remove => _onTurretDeselected.RemoveListener(value);
|
||||
}
|
||||
|
||||
public event UnityAction OnDestroyTurretSelected
|
||||
{
|
||||
add => _onDestroyTurretSelected.AddListener(value);
|
||||
remove => _onDestroyTurretSelected.RemoveListener(value);
|
||||
}
|
||||
|
||||
public event UnityAction OnDestroyTurretDeselected
|
||||
{
|
||||
add => _onDestroyTurretDeselected.AddListener(value);
|
||||
remove => _onDestroyTurretDeselected.RemoveListener(value);
|
||||
}
|
||||
[SerializeField] private UnityEvent<BlockScript> _onBlockSelected;
|
||||
[SerializeField] private UnityEvent _onBlockDeselected;
|
||||
|
||||
public IReadOnlyCollection<TurretShopItem> TurretShopItems => _turretShopItems;
|
||||
|
||||
private TurretShopItem _selectedTurret;
|
||||
private bool _isTurretSelected = false;
|
||||
private bool _isDestroySelected = false;
|
||||
|
||||
public void SelectTurret(TurretShopItem item)
|
||||
public event UnityAction<BlockScript> OnBlockSelected
|
||||
{
|
||||
_isTurretSelected = _wallet.Money >= item.Price;
|
||||
if (!_isTurretSelected)
|
||||
return;
|
||||
|
||||
if (_isDestroySelected)
|
||||
DeselectDestroyTurret();
|
||||
|
||||
_selectedTurret = item;
|
||||
_onTurretSelected?.Invoke(item);
|
||||
add => _onBlockSelected.AddListener(value);
|
||||
remove => _onBlockSelected.RemoveListener(value);
|
||||
}
|
||||
|
||||
public void DeselectTurret()
|
||||
public event UnityAction OnBlockDeselected
|
||||
{
|
||||
_isTurretSelected = false;
|
||||
_onTurretDeselected?.Invoke();
|
||||
add => _onBlockDeselected.AddListener(value);
|
||||
remove => _onBlockDeselected.RemoveListener(value);
|
||||
}
|
||||
|
||||
public void SelectDestroyTurret()
|
||||
{
|
||||
if (_isTurretSelected)
|
||||
DeselectTurret();
|
||||
|
||||
_isDestroySelected = true;
|
||||
_onDestroyTurretSelected?.Invoke();
|
||||
}
|
||||
|
||||
public void DeselectDestroyTurret()
|
||||
{
|
||||
_isDestroySelected = false;
|
||||
_onDestroyTurretDeselected?.Invoke();
|
||||
}
|
||||
private BlockScript _selectedBlock;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_deselectAction.Enable();
|
||||
_deselectAction.performed += DeselectActionPerformed;
|
||||
if (_deselectAction != null)
|
||||
{
|
||||
_deselectAction.Enable();
|
||||
_deselectAction.performed += DeselectActionPerformed;
|
||||
}
|
||||
|
||||
_blockDetector.OnBlockClicked += OnBlockClicked;
|
||||
}
|
||||
private void OnDisable()
|
||||
{
|
||||
_deselectAction.performed -= DeselectActionPerformed;
|
||||
_deselectAction.Disable();
|
||||
if (_deselectAction != null)
|
||||
{
|
||||
_deselectAction.performed -= DeselectActionPerformed;
|
||||
_deselectAction.Disable();
|
||||
}
|
||||
|
||||
_blockDetector.OnBlockClicked -= OnBlockClicked;
|
||||
}
|
||||
@@ -100,40 +57,41 @@ public class TurretsShop : MonoBehaviour
|
||||
_turretsHolder = transform;
|
||||
}
|
||||
|
||||
private void DeselectActionPerformed(InputAction.CallbackContext _)
|
||||
{
|
||||
if (_isTurretSelected)
|
||||
DeselectTurret();
|
||||
else if (_isDestroySelected)
|
||||
DeselectDestroyTurret();
|
||||
}
|
||||
|
||||
private void OnBlockClicked(BlockScript block)
|
||||
{
|
||||
if (block.Type == BlockScript.BlockType.Turret)
|
||||
if (_selectedBlock == block)
|
||||
{
|
||||
DestroyTurret(block.GetComponent<Turret>());
|
||||
DeselectBlock();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!block.CompareTag("GrassBlock") || !_isTurretSelected || _selectedTurret.Price > _wallet.Money)
|
||||
return;
|
||||
|
||||
var pos = block.transform.position;
|
||||
pos.y += 1;
|
||||
Instantiate(_selectedTurret.TurretPrefab, pos, Quaternion.identity, _turretsHolder);
|
||||
|
||||
_wallet.TakeMoney(_selectedTurret.Price);
|
||||
if (_wallet.Money < _selectedTurret.Price)
|
||||
DeselectTurret();
|
||||
if (_gameManager.CurrentState != GameManager.GameState.BuildingPath &&
|
||||
block.CompareTag("GrassBlock"))
|
||||
SelectBlock(block);
|
||||
}
|
||||
|
||||
private void DestroyTurret(Turret turret)
|
||||
|
||||
public void BuyTurret(TurretShopItem item)
|
||||
{
|
||||
if (turret == null || !_isDestroySelected)
|
||||
if (_selectedBlock == null || _wallet.Money < item.Price)
|
||||
return;
|
||||
|
||||
_wallet.AddMoney(turret.SellPrice);
|
||||
Destroy(turret.gameObject);
|
||||
_wallet.TakeMoney(item.Price);
|
||||
Instantiate(item.TurretPrefab, _selectedBlock.transform.position + Vector3.up, Quaternion.identity, _turretsHolder);
|
||||
DeselectBlock();
|
||||
}
|
||||
|
||||
public void SelectBlock(BlockScript block)
|
||||
{
|
||||
_selectedBlock = block;
|
||||
_onBlockSelected?.Invoke(block);
|
||||
}
|
||||
|
||||
public void DeselectBlock()
|
||||
{
|
||||
_selectedBlock = null;
|
||||
_onBlockDeselected?.Invoke();
|
||||
}
|
||||
|
||||
private void DeselectActionPerformed(InputAction.CallbackContext _) =>
|
||||
DeselectBlock();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user