mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
98 lines
2.7 KiB
C#
98 lines
2.7 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.Events;
|
|
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<BlockScript> _onBlockSelected;
|
|
[SerializeField] private UnityEvent _onBlockDeselected;
|
|
|
|
public IReadOnlyCollection<TurretShopItem> TurretShopItems => _turretShopItems;
|
|
|
|
public event UnityAction<BlockScript> OnBlockSelected
|
|
{
|
|
add => _onBlockSelected.AddListener(value);
|
|
remove => _onBlockSelected.RemoveListener(value);
|
|
}
|
|
|
|
public event UnityAction OnBlockDeselected
|
|
{
|
|
add => _onBlockDeselected.AddListener(value);
|
|
remove => _onBlockDeselected.RemoveListener(value);
|
|
}
|
|
|
|
private BlockScript _selectedBlock;
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (_deselectAction != null)
|
|
{
|
|
_deselectAction.Enable();
|
|
_deselectAction.performed += DeselectActionPerformed;
|
|
}
|
|
|
|
_blockDetector.OnBlockClicked += OnBlockClicked;
|
|
}
|
|
private void OnDisable()
|
|
{
|
|
if (_deselectAction != null)
|
|
{
|
|
_deselectAction.performed -= DeselectActionPerformed;
|
|
_deselectAction.Disable();
|
|
}
|
|
|
|
_blockDetector.OnBlockClicked -= OnBlockClicked;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (_turretsHolder == null)
|
|
_turretsHolder = transform;
|
|
}
|
|
|
|
private void OnBlockClicked(BlockScript block)
|
|
{
|
|
if (_selectedBlock == block)
|
|
{
|
|
DeselectBlock();
|
|
return;
|
|
}
|
|
|
|
if (_gameManager.CurrentState != GameManager.GameState.BuildingPath &&
|
|
block.CompareTag("GrassBlock"))
|
|
SelectBlock(block);
|
|
}
|
|
|
|
public void BuyTurret(TurretShopItem item)
|
|
{
|
|
if (_selectedBlock == null || _wallet.Money < item.Price)
|
|
return;
|
|
|
|
_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();
|
|
}
|