mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
Compare commits
2 Commits
8ad1ddd874
...
6edf74b370
| Author | SHA1 | Date | |
|---|---|---|---|
| 6edf74b370 | |||
| 920ec74d61 |
@@ -4940,7 +4940,6 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Debugger
|
||||
_gameManager: {fileID: 1875710079}
|
||||
_sandPathBuildService: {fileID: 305503}
|
||||
_turretShop: {fileID: 1311268619}
|
||||
_spawnDeathControl: {fileID: 694046010}
|
||||
_tower: {fileID: 1739395621}
|
||||
--- !u!1 &645921916
|
||||
@@ -10458,19 +10457,20 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 5980606f117d314418be8bbb5abf9a95, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::TurretsShop
|
||||
_gameManager: {fileID: 1875710079}
|
||||
_wallet: {fileID: 1030979928}
|
||||
_blockDetector: {fileID: 709556715}
|
||||
_turretsHolder: {fileID: 23034195}
|
||||
_deselectAction:
|
||||
m_Name: Deselect
|
||||
m_Type: 1
|
||||
m_ExpectedControlType: Button
|
||||
m_Id: 04bf8539-31c8-4175-8ec1-628bffc18cc4
|
||||
m_Type: 0
|
||||
m_ExpectedControlType:
|
||||
m_Id: b141255a-455e-4cce-a6f5-0a47c89a1df0
|
||||
m_Processors:
|
||||
m_Interactions:
|
||||
m_SingletonActionBindings:
|
||||
- m_Name:
|
||||
m_Id: 7a182793-f5b0-43b1-91fb-b857f239aa7d
|
||||
m_Id: b9246c48-ca02-4ef2-8291-12a4f941543b
|
||||
m_Path: <Keyboard>/escape
|
||||
m_Interactions:
|
||||
m_Processors:
|
||||
@@ -10478,7 +10478,7 @@ MonoBehaviour:
|
||||
m_Action: Deselect
|
||||
m_Flags: 0
|
||||
- m_Name:
|
||||
m_Id: deb5c6fa-481c-4811-a3ae-403ba593dfe2
|
||||
m_Id: f857fada-95e0-4cdd-ab6c-2c18f4cf9d72
|
||||
m_Path: <Keyboard>/space
|
||||
m_Interactions:
|
||||
m_Processors:
|
||||
@@ -10489,16 +10489,10 @@ MonoBehaviour:
|
||||
_turretShopItems:
|
||||
- _turretPrefab: {fileID: 1128128508282001352, guid: 7f26b5a7dee15d04ba8f57d552771424, type: 3}
|
||||
_icon: {fileID: 21300000, guid: 6dfa29c1d95915449b61fa6c240fb394, type: 3}
|
||||
_onTurretSelected:
|
||||
_onBlockSelected:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onTurretDeselected:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onDestroyTurretSelected:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
_onDestroyTurretDeselected:
|
||||
_onBlockDeselected:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &1311268620
|
||||
@@ -10514,7 +10508,6 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::TurretUpdater
|
||||
_blockDetector: {fileID: 709556715}
|
||||
_shop: {fileID: 1311268619}
|
||||
_wallet: {fileID: 1030979928}
|
||||
_sellButton: {fileID: 448804123}
|
||||
_upgradeButton: {fileID: 1047497976}
|
||||
@@ -13700,7 +13693,6 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::TurretsShopViewer
|
||||
_shop: {fileID: 1311268619}
|
||||
_wallet: {fileID: 1030979928}
|
||||
_gameManager: {fileID: 1875710079}
|
||||
_buttonPrefab: {fileID: 3635012363401127766, guid: f87d5d34136775b41907fc1187ef4bc2, type: 3}
|
||||
--- !u!95 &1789632543
|
||||
Animator:
|
||||
|
||||
@@ -4,7 +4,6 @@ public class Debugger : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private GameManager _gameManager;
|
||||
[SerializeField] private SandPathBuildService _sandPathBuildService;
|
||||
[SerializeField] private TurretsShop _turretShop;
|
||||
[SerializeField] private SpawnDeathEnemyController _spawnDeathControl;
|
||||
[SerializeField] private Tower _tower;
|
||||
|
||||
@@ -12,8 +11,6 @@ public class Debugger : MonoBehaviour
|
||||
{
|
||||
_gameManager.OnStateChanged += OnGameStateChanged;
|
||||
_sandPathBuildService.OnBuildComplete += OnBuildComplete;
|
||||
_turretShop.OnTurretSelected += OnTurretSelected;
|
||||
_turretShop.OnTurretDeselected += OnTurretDeselected;
|
||||
_spawnDeathControl.OnLastEnemyDestroyed += OnLastEnemyDestroyed;
|
||||
_tower.OnGameOver += OnGameOver;
|
||||
}
|
||||
@@ -22,8 +19,6 @@ public class Debugger : MonoBehaviour
|
||||
{
|
||||
_gameManager.OnStateChanged -= OnGameStateChanged;
|
||||
_sandPathBuildService.OnBuildComplete -= OnBuildComplete;
|
||||
_turretShop.OnTurretSelected -= OnTurretSelected;
|
||||
_turretShop.OnTurretDeselected -= OnTurretDeselected;
|
||||
_spawnDeathControl.OnLastEnemyDestroyed -= OnLastEnemyDestroyed;
|
||||
_tower.OnGameOver -= OnGameOver;
|
||||
}
|
||||
@@ -38,16 +33,6 @@ public class Debugger : MonoBehaviour
|
||||
print("Build complete");
|
||||
}
|
||||
|
||||
private static void OnTurretSelected(TurretShopItem item)
|
||||
{
|
||||
print("Turret selected: " + item.TurretPrefab.name);
|
||||
}
|
||||
|
||||
private static void OnTurretDeselected()
|
||||
{
|
||||
print("Turret deselected");
|
||||
}
|
||||
|
||||
private void OnLastEnemyDestroyed()
|
||||
{
|
||||
print("Last enemy destroyed");
|
||||
|
||||
@@ -11,7 +11,6 @@ public class GameManager : MonoBehaviour
|
||||
}
|
||||
|
||||
[SerializeField] private Level[] _levels;
|
||||
[SerializeField] private SandPathBuildService _pathBuildService;
|
||||
[SerializeField] private UnityEvent<GameState> _onStateChanged;
|
||||
[SerializeField] private UnityEvent<OnLevelChangedEventArgs> _onLevelChanged;
|
||||
|
||||
@@ -44,20 +43,6 @@ public class GameManager : MonoBehaviour
|
||||
public int CurrentLevel => _currentLvlIndex + 1;
|
||||
public int TotalLevels => _levels.Length;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_pathBuildService.OnBuildComplete += OnBuildComplete;
|
||||
}
|
||||
private void OnDisable()
|
||||
{
|
||||
_pathBuildService.OnBuildComplete -= OnBuildComplete;
|
||||
}
|
||||
|
||||
private void OnBuildComplete()
|
||||
{
|
||||
CurrentState = GameState.BuildingTurrets;
|
||||
}
|
||||
|
||||
public void NextLevel()
|
||||
{
|
||||
_currentLvlIndex = (_currentLvlIndex + 1) % _levels.Length;
|
||||
|
||||
@@ -56,7 +56,6 @@ public class SandPathBuildService : MonoBehaviour
|
||||
|
||||
public void ResetPath()
|
||||
{
|
||||
// TODO: исправить удаление блоков финала пути
|
||||
for (int i = _predefinedBlocks.Length; i < _blocksInPath.Count; i++)
|
||||
{
|
||||
var block = _blocksInPath[i];
|
||||
@@ -85,6 +84,7 @@ public class SandPathBuildService : MonoBehaviour
|
||||
_currentBlock = _pathEnd;
|
||||
_blocksInPath.Add(_currentBlock);
|
||||
_onBuildComplete?.Invoke();
|
||||
_gameManager.CurrentState = GameManager.GameState.BuildingTurrets;
|
||||
}
|
||||
|
||||
DestroyBlock(block);
|
||||
|
||||
@@ -5,7 +5,6 @@ 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;
|
||||
@@ -40,15 +39,11 @@ public class TurretUpdater : MonoBehaviour
|
||||
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()
|
||||
@@ -69,18 +64,6 @@ public class TurretUpdater : MonoBehaviour
|
||||
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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ public class TurretsShopViewer : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private TurretsShop _shop;
|
||||
[SerializeField] private Wallet _wallet;
|
||||
[SerializeField] private GameManager _gameManager;
|
||||
[SerializeField] private Button _buttonPrefab;
|
||||
|
||||
private Animator _animator;
|
||||
@@ -29,7 +28,7 @@ public class TurretsShopViewer : MonoBehaviour
|
||||
icon.sprite = item.Icon;
|
||||
}
|
||||
|
||||
button.onClick.AddListener(() => _shop.SelectTurret(item));
|
||||
button.onClick.AddListener(() => _shop.BuyTurret(item));
|
||||
_buttons.Add(button, item);
|
||||
}
|
||||
}
|
||||
@@ -41,25 +40,33 @@ public class TurretsShopViewer : MonoBehaviour
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_gameManager.OnStateChanged += OnGameStateChanged;
|
||||
_wallet.OnMoneyChanged += OnMoneyChanged;
|
||||
_shop.OnBlockSelected += OnBlockSelected;
|
||||
_shop.OnBlockDeselected += OnBlockDeselected;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
_gameManager.OnStateChanged -= OnGameStateChanged;
|
||||
_wallet.OnMoneyChanged -= OnMoneyChanged;
|
||||
_shop.OnBlockSelected -= OnBlockSelected;
|
||||
_shop.OnBlockDeselected -= OnBlockDeselected;
|
||||
}
|
||||
|
||||
private void OnGameStateChanged(GameManager.GameState state)
|
||||
private void OnBlockSelected(BlockScript block)
|
||||
{
|
||||
if (!_hidden || state != GameManager.GameState.BuildingTurrets)
|
||||
if (!_hidden)
|
||||
return;
|
||||
|
||||
_animator.Play(_showAnimation);
|
||||
_animator.CrossFade(_showAnimation, 0.1f);
|
||||
_hidden = false;
|
||||
}
|
||||
|
||||
private void OnBlockDeselected()
|
||||
{
|
||||
_animator.CrossFade(_hideAnimation, 0.1f);
|
||||
_hidden = true;
|
||||
}
|
||||
|
||||
private void OnMoneyChanged(int money)
|
||||
{
|
||||
foreach (var (button, item) in _buttons)
|
||||
|
||||
Reference in New Issue
Block a user