From 920ec74d61f563b1c5015ba9d597d2db16418757 Mon Sep 17 00:00:00 2001 From: kittyegg Date: Wed, 27 May 2026 22:48:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BC=D0=B0=D0=B3=D0=B0=D0=B7=D0=B8=D0=BD=20?= =?UTF-8?q?=D1=82=D1=83=D1=80=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/Island.unity | 24 ++--- Assets/Scripts/Debugger.cs | 15 --- Assets/Scripts/TurretUpdater.cs | 17 ---- Assets/Scripts/TurretsShop.cs | 134 +++++++++---------------- Assets/Scripts/UI/TurretsShopViewer.cs | 21 ++-- 5 files changed, 68 insertions(+), 143 deletions(-) diff --git a/Assets/Scenes/Island.unity b/Assets/Scenes/Island.unity index 85b1d23..96954d2 100644 --- a/Assets/Scenes/Island.unity +++ b/Assets/Scenes/Island.unity @@ -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: /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: /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: diff --git a/Assets/Scripts/Debugger.cs b/Assets/Scripts/Debugger.cs index 324b565..7eb029c 100644 --- a/Assets/Scripts/Debugger.cs +++ b/Assets/Scripts/Debugger.cs @@ -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"); diff --git a/Assets/Scripts/TurretUpdater.cs b/Assets/Scripts/TurretUpdater.cs index 9d00833..e30315c 100644 --- a/Assets/Scripts/TurretUpdater.cs +++ b/Assets/Scripts/TurretUpdater.cs @@ -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(); } - private void OnDestoyTurretSelected() - { - _isDestroyingTurret = true; - ClickedTurret = null; - } - - private void OnDestroyTurretDeselected() - { - _isDestroyingTurret = false; - ClickedTurret = null; - } - private void UpgradeTurret() { if (ClickedTurret == null || _wallet.Money < ClickedTurret.UpgradeCost) diff --git a/Assets/Scripts/TurretsShop.cs b/Assets/Scripts/TurretsShop.cs index f5cae3c..8a974d0 100644 --- a/Assets/Scripts/TurretsShop.cs +++ b/Assets/Scripts/TurretsShop.cs @@ -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 _onTurretSelected; - [SerializeField] private UnityEvent _onTurretDeselected; - [SerializeField] private UnityEvent _onDestroyTurretSelected; - [SerializeField] private UnityEvent _onDestroyTurretDeselected; - - public event UnityAction 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 _onBlockSelected; + [SerializeField] private UnityEvent _onBlockDeselected; public IReadOnlyCollection TurretShopItems => _turretShopItems; - private TurretShopItem _selectedTurret; - private bool _isTurretSelected = false; - private bool _isDestroySelected = false; - - public void SelectTurret(TurretShopItem item) + public event UnityAction 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()); + 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(); } diff --git a/Assets/Scripts/UI/TurretsShopViewer.cs b/Assets/Scripts/UI/TurretsShopViewer.cs index d9d1b47..16a3c31 100644 --- a/Assets/Scripts/UI/TurretsShopViewer.cs +++ b/Assets/Scripts/UI/TurretsShopViewer.cs @@ -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)