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 m_EditorClassIdentifier: Assembly-CSharp::Debugger
_gameManager: {fileID: 1875710079} _gameManager: {fileID: 1875710079}
_sandPathBuildService: {fileID: 305503} _sandPathBuildService: {fileID: 305503}
_turretShop: {fileID: 1311268619}
_spawnDeathControl: {fileID: 694046010} _spawnDeathControl: {fileID: 694046010}
_tower: {fileID: 1739395621} _tower: {fileID: 1739395621}
--- !u!1 &645921916 --- !u!1 &645921916
@@ -10458,19 +10457,20 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 5980606f117d314418be8bbb5abf9a95, type: 3} m_Script: {fileID: 11500000, guid: 5980606f117d314418be8bbb5abf9a95, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Assembly-CSharp::TurretsShop m_EditorClassIdentifier: Assembly-CSharp::TurretsShop
_gameManager: {fileID: 1875710079}
_wallet: {fileID: 1030979928} _wallet: {fileID: 1030979928}
_blockDetector: {fileID: 709556715} _blockDetector: {fileID: 709556715}
_turretsHolder: {fileID: 23034195} _turretsHolder: {fileID: 23034195}
_deselectAction: _deselectAction:
m_Name: Deselect m_Name: Deselect
m_Type: 1 m_Type: 0
m_ExpectedControlType: Button m_ExpectedControlType:
m_Id: 04bf8539-31c8-4175-8ec1-628bffc18cc4 m_Id: b141255a-455e-4cce-a6f5-0a47c89a1df0
m_Processors: m_Processors:
m_Interactions: m_Interactions:
m_SingletonActionBindings: m_SingletonActionBindings:
- m_Name: - m_Name:
m_Id: 7a182793-f5b0-43b1-91fb-b857f239aa7d m_Id: b9246c48-ca02-4ef2-8291-12a4f941543b
m_Path: <Keyboard>/escape m_Path: <Keyboard>/escape
m_Interactions: m_Interactions:
m_Processors: m_Processors:
@@ -10478,7 +10478,7 @@ MonoBehaviour:
m_Action: Deselect m_Action: Deselect
m_Flags: 0 m_Flags: 0
- m_Name: - m_Name:
m_Id: deb5c6fa-481c-4811-a3ae-403ba593dfe2 m_Id: f857fada-95e0-4cdd-ab6c-2c18f4cf9d72
m_Path: <Keyboard>/space m_Path: <Keyboard>/space
m_Interactions: m_Interactions:
m_Processors: m_Processors:
@@ -10489,16 +10489,10 @@ MonoBehaviour:
_turretShopItems: _turretShopItems:
- _turretPrefab: {fileID: 1128128508282001352, guid: 7f26b5a7dee15d04ba8f57d552771424, type: 3} - _turretPrefab: {fileID: 1128128508282001352, guid: 7f26b5a7dee15d04ba8f57d552771424, type: 3}
_icon: {fileID: 21300000, guid: 6dfa29c1d95915449b61fa6c240fb394, type: 3} _icon: {fileID: 21300000, guid: 6dfa29c1d95915449b61fa6c240fb394, type: 3}
_onTurretSelected: _onBlockSelected:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
_onTurretDeselected: _onBlockDeselected:
m_PersistentCalls:
m_Calls: []
_onDestroyTurretSelected:
m_PersistentCalls:
m_Calls: []
_onDestroyTurretDeselected:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
--- !u!114 &1311268620 --- !u!114 &1311268620
@@ -10514,7 +10508,6 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: Assembly-CSharp::TurretUpdater m_EditorClassIdentifier: Assembly-CSharp::TurretUpdater
_blockDetector: {fileID: 709556715} _blockDetector: {fileID: 709556715}
_shop: {fileID: 1311268619}
_wallet: {fileID: 1030979928} _wallet: {fileID: 1030979928}
_sellButton: {fileID: 448804123} _sellButton: {fileID: 448804123}
_upgradeButton: {fileID: 1047497976} _upgradeButton: {fileID: 1047497976}
@@ -13700,7 +13693,6 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::TurretsShopViewer m_EditorClassIdentifier: Assembly-CSharp::TurretsShopViewer
_shop: {fileID: 1311268619} _shop: {fileID: 1311268619}
_wallet: {fileID: 1030979928} _wallet: {fileID: 1030979928}
_gameManager: {fileID: 1875710079}
_buttonPrefab: {fileID: 3635012363401127766, guid: f87d5d34136775b41907fc1187ef4bc2, type: 3} _buttonPrefab: {fileID: 3635012363401127766, guid: f87d5d34136775b41907fc1187ef4bc2, type: 3}
--- !u!95 &1789632543 --- !u!95 &1789632543
Animator: Animator:
-15
View File
@@ -4,7 +4,6 @@ public class Debugger : MonoBehaviour
{ {
[SerializeField] private GameManager _gameManager; [SerializeField] private GameManager _gameManager;
[SerializeField] private SandPathBuildService _sandPathBuildService; [SerializeField] private SandPathBuildService _sandPathBuildService;
[SerializeField] private TurretsShop _turretShop;
[SerializeField] private SpawnDeathEnemyController _spawnDeathControl; [SerializeField] private SpawnDeathEnemyController _spawnDeathControl;
[SerializeField] private Tower _tower; [SerializeField] private Tower _tower;
@@ -12,8 +11,6 @@ public class Debugger : MonoBehaviour
{ {
_gameManager.OnStateChanged += OnGameStateChanged; _gameManager.OnStateChanged += OnGameStateChanged;
_sandPathBuildService.OnBuildComplete += OnBuildComplete; _sandPathBuildService.OnBuildComplete += OnBuildComplete;
_turretShop.OnTurretSelected += OnTurretSelected;
_turretShop.OnTurretDeselected += OnTurretDeselected;
_spawnDeathControl.OnLastEnemyDestroyed += OnLastEnemyDestroyed; _spawnDeathControl.OnLastEnemyDestroyed += OnLastEnemyDestroyed;
_tower.OnGameOver += OnGameOver; _tower.OnGameOver += OnGameOver;
} }
@@ -22,8 +19,6 @@ public class Debugger : MonoBehaviour
{ {
_gameManager.OnStateChanged -= OnGameStateChanged; _gameManager.OnStateChanged -= OnGameStateChanged;
_sandPathBuildService.OnBuildComplete -= OnBuildComplete; _sandPathBuildService.OnBuildComplete -= OnBuildComplete;
_turretShop.OnTurretSelected -= OnTurretSelected;
_turretShop.OnTurretDeselected -= OnTurretDeselected;
_spawnDeathControl.OnLastEnemyDestroyed -= OnLastEnemyDestroyed; _spawnDeathControl.OnLastEnemyDestroyed -= OnLastEnemyDestroyed;
_tower.OnGameOver -= OnGameOver; _tower.OnGameOver -= OnGameOver;
} }
@@ -38,16 +33,6 @@ public class Debugger : MonoBehaviour
print("Build complete"); 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() private void OnLastEnemyDestroyed()
{ {
print("Last enemy destroyed"); print("Last enemy destroyed");
-15
View File
@@ -11,7 +11,6 @@ public class GameManager : MonoBehaviour
} }
[SerializeField] private Level[] _levels; [SerializeField] private Level[] _levels;
[SerializeField] private SandPathBuildService _pathBuildService;
[SerializeField] private UnityEvent<GameState> _onStateChanged; [SerializeField] private UnityEvent<GameState> _onStateChanged;
[SerializeField] private UnityEvent<OnLevelChangedEventArgs> _onLevelChanged; [SerializeField] private UnityEvent<OnLevelChangedEventArgs> _onLevelChanged;
@@ -44,20 +43,6 @@ public class GameManager : MonoBehaviour
public int CurrentLevel => _currentLvlIndex + 1; public int CurrentLevel => _currentLvlIndex + 1;
public int TotalLevels => _levels.Length; 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() public void NextLevel()
{ {
_currentLvlIndex = (_currentLvlIndex + 1) % _levels.Length; _currentLvlIndex = (_currentLvlIndex + 1) % _levels.Length;
+1 -1
View File
@@ -56,7 +56,6 @@ public class SandPathBuildService : MonoBehaviour
public void ResetPath() public void ResetPath()
{ {
// TODO: исправить удаление блоков финала пути
for (int i = _predefinedBlocks.Length; i < _blocksInPath.Count; i++) for (int i = _predefinedBlocks.Length; i < _blocksInPath.Count; i++)
{ {
var block = _blocksInPath[i]; var block = _blocksInPath[i];
@@ -85,6 +84,7 @@ public class SandPathBuildService : MonoBehaviour
_currentBlock = _pathEnd; _currentBlock = _pathEnd;
_blocksInPath.Add(_currentBlock); _blocksInPath.Add(_currentBlock);
_onBuildComplete?.Invoke(); _onBuildComplete?.Invoke();
_gameManager.CurrentState = GameManager.GameState.BuildingTurrets;
} }
DestroyBlock(block); DestroyBlock(block);
-17
View File
@@ -5,7 +5,6 @@ using UnityEngine.UI;
public class TurretUpdater : MonoBehaviour public class TurretUpdater : MonoBehaviour
{ {
[SerializeField] private BlockDetector _blockDetector; [SerializeField] private BlockDetector _blockDetector;
[SerializeField] private TurretsShop _shop;
[SerializeField] private Wallet _wallet; [SerializeField] private Wallet _wallet;
[SerializeField] private Button _sellButton; [SerializeField] private Button _sellButton;
[SerializeField] private Button _upgradeButton; [SerializeField] private Button _upgradeButton;
@@ -40,15 +39,11 @@ public class TurretUpdater : MonoBehaviour
private void OnEnable() private void OnEnable()
{ {
_blockDetector.OnBlockClicked += OnBlockClicked; _blockDetector.OnBlockClicked += OnBlockClicked;
_shop.OnDestroyTurretSelected += OnDestoyTurretSelected;
_shop.OnDestroyTurretDeselected += OnDestroyTurretDeselected;
} }
private void OnDisable() private void OnDisable()
{ {
_blockDetector.OnBlockClicked -= OnBlockClicked; _blockDetector.OnBlockClicked -= OnBlockClicked;
_shop.OnDestroyTurretSelected -= OnDestoyTurretSelected;
_shop.OnDestroyTurretDeselected -= OnDestroyTurretDeselected;
} }
private void Start() private void Start()
@@ -69,18 +64,6 @@ public class TurretUpdater : MonoBehaviour
ClickedTurret = block.GetComponent<Turret>(); ClickedTurret = block.GetComponent<Turret>();
} }
private void OnDestoyTurretSelected()
{
_isDestroyingTurret = true;
ClickedTurret = null;
}
private void OnDestroyTurretDeselected()
{
_isDestroyingTurret = false;
ClickedTurret = null;
}
private void UpgradeTurret() private void UpgradeTurret()
{ {
if (ClickedTurret == null || _wallet.Money < ClickedTurret.UpgradeCost) if (ClickedTurret == null || _wallet.Money < ClickedTurret.UpgradeCost)
+41 -83
View File
@@ -5,91 +5,48 @@ using UnityEngine.InputSystem;
public class TurretsShop : MonoBehaviour public class TurretsShop : MonoBehaviour
{ {
[SerializeField] private GameManager _gameManager;
[SerializeField] private Wallet _wallet; [SerializeField] private Wallet _wallet;
[SerializeField] private BlockDetector _blockDetector; [SerializeField] private BlockDetector _blockDetector;
[SerializeField] private Transform _turretsHolder; [SerializeField] private Transform _turretsHolder;
[SerializeField] private InputAction _deselectAction; [SerializeField] private InputAction _deselectAction;
[SerializeField] private TurretShopItem[] _turretShopItems; [SerializeField] private TurretShopItem[] _turretShopItems;
[SerializeField] private UnityEvent<TurretShopItem> _onTurretSelected; [SerializeField] private UnityEvent<BlockScript> _onBlockSelected;
[SerializeField] private UnityEvent _onTurretDeselected; [SerializeField] private UnityEvent _onBlockDeselected;
[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);
}
public IReadOnlyCollection<TurretShopItem> TurretShopItems => _turretShopItems; public IReadOnlyCollection<TurretShopItem> TurretShopItems => _turretShopItems;
private TurretShopItem _selectedTurret; public event UnityAction<BlockScript> OnBlockSelected
private bool _isTurretSelected = false;
private bool _isDestroySelected = false;
public void SelectTurret(TurretShopItem item)
{ {
_isTurretSelected = _wallet.Money >= item.Price; add => _onBlockSelected.AddListener(value);
if (!_isTurretSelected) remove => _onBlockSelected.RemoveListener(value);
return;
if (_isDestroySelected)
DeselectDestroyTurret();
_selectedTurret = item;
_onTurretSelected?.Invoke(item);
} }
public void DeselectTurret() public event UnityAction OnBlockDeselected
{ {
_isTurretSelected = false; add => _onBlockDeselected.AddListener(value);
_onTurretDeselected?.Invoke(); remove => _onBlockDeselected.RemoveListener(value);
} }
public void SelectDestroyTurret() private BlockScript _selectedBlock;
{
if (_isTurretSelected)
DeselectTurret();
_isDestroySelected = true;
_onDestroyTurretSelected?.Invoke();
}
public void DeselectDestroyTurret()
{
_isDestroySelected = false;
_onDestroyTurretDeselected?.Invoke();
}
private void OnEnable() private void OnEnable()
{
if (_deselectAction != null)
{ {
_deselectAction.Enable(); _deselectAction.Enable();
_deselectAction.performed += DeselectActionPerformed; _deselectAction.performed += DeselectActionPerformed;
}
_blockDetector.OnBlockClicked += OnBlockClicked; _blockDetector.OnBlockClicked += OnBlockClicked;
} }
private void OnDisable() private void OnDisable()
{
if (_deselectAction != null)
{ {
_deselectAction.performed -= DeselectActionPerformed; _deselectAction.performed -= DeselectActionPerformed;
_deselectAction.Disable(); _deselectAction.Disable();
}
_blockDetector.OnBlockClicked -= OnBlockClicked; _blockDetector.OnBlockClicked -= OnBlockClicked;
} }
@@ -100,40 +57,41 @@ public class TurretsShop : MonoBehaviour
_turretsHolder = transform; _turretsHolder = transform;
} }
private void DeselectActionPerformed(InputAction.CallbackContext _)
{
if (_isTurretSelected)
DeselectTurret();
else if (_isDestroySelected)
DeselectDestroyTurret();
}
private void OnBlockClicked(BlockScript block) private void OnBlockClicked(BlockScript block)
{ {
if (block.Type == BlockScript.BlockType.Turret) if (_selectedBlock == block)
{ {
DestroyTurret(block.GetComponent<Turret>()); DeselectBlock();
return; return;
} }
if (!block.CompareTag("GrassBlock") || !_isTurretSelected || _selectedTurret.Price > _wallet.Money) if (_gameManager.CurrentState != GameManager.GameState.BuildingPath &&
return; block.CompareTag("GrassBlock"))
SelectBlock(block);
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();
} }
private void DestroyTurret(Turret turret) public void BuyTurret(TurretShopItem item)
{ {
if (turret == null || !_isDestroySelected) if (_selectedBlock == null || _wallet.Money < item.Price)
return; return;
_wallet.AddMoney(turret.SellPrice); _wallet.TakeMoney(item.Price);
Destroy(turret.gameObject); 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 TurretsShop _shop;
[SerializeField] private Wallet _wallet; [SerializeField] private Wallet _wallet;
[SerializeField] private GameManager _gameManager;
[SerializeField] private Button _buttonPrefab; [SerializeField] private Button _buttonPrefab;
private Animator _animator; private Animator _animator;
@@ -29,7 +28,7 @@ public class TurretsShopViewer : MonoBehaviour
icon.sprite = item.Icon; icon.sprite = item.Icon;
} }
button.onClick.AddListener(() => _shop.SelectTurret(item)); button.onClick.AddListener(() => _shop.BuyTurret(item));
_buttons.Add(button, item); _buttons.Add(button, item);
} }
} }
@@ -41,25 +40,33 @@ public class TurretsShopViewer : MonoBehaviour
private void OnEnable() private void OnEnable()
{ {
_gameManager.OnStateChanged += OnGameStateChanged;
_wallet.OnMoneyChanged += OnMoneyChanged; _wallet.OnMoneyChanged += OnMoneyChanged;
_shop.OnBlockSelected += OnBlockSelected;
_shop.OnBlockDeselected += OnBlockDeselected;
} }
private void OnDisable() private void OnDisable()
{ {
_gameManager.OnStateChanged -= OnGameStateChanged;
_wallet.OnMoneyChanged -= OnMoneyChanged; _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; return;
_animator.Play(_showAnimation); _animator.CrossFade(_showAnimation, 0.1f);
_hidden = false; _hidden = false;
} }
private void OnBlockDeselected()
{
_animator.CrossFade(_hideAnimation, 0.1f);
_hidden = true;
}
private void OnMoneyChanged(int money) private void OnMoneyChanged(int money)
{ {
foreach (var (button, item) in _buttons) foreach (var (button, item) in _buttons)