Compare commits

...

2 Commits

7 changed files with 69 additions and 159 deletions
+8 -16
View File
@@ -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:
-15
View File
@@ -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");
-15
View File
@@ -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;
+1 -1
View File
@@ -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);
-17
View File
@@ -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)
+41 -83
View File
@@ -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()
{
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;
}
@@ -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();
}
+14 -7
View File
@@ -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)