Добавил возможность проиграть

This commit is contained in:
2026-05-16 17:31:11 +03:00
parent 5343e3f459
commit a9b985cfd4
5 changed files with 113 additions and 25 deletions
+8
View File
@@ -6,6 +6,7 @@ public class Debugger : MonoBehaviour
[SerializeField] private SandPathBuildService _sandPathBuildService;
[SerializeField] private TurretsShop _turretShop;
[SerializeField] private SpawnDeathEnemyController _spawnDeathControl;
[SerializeField] private Tower _tower;
private void OnEnable()
{
@@ -14,6 +15,7 @@ public class Debugger : MonoBehaviour
_turretShop.OnTurretSelected += OnTurretSelected;
_turretShop.OnTurretDeselected += OnTurretDeselected;
_spawnDeathControl.OnLastEnemyDestroyed += OnLastEnemyDestroyed;
_tower.OnGameOver += OnGameOver;
}
private void OnDisable()
@@ -23,6 +25,7 @@ public class Debugger : MonoBehaviour
_turretShop.OnTurretSelected -= OnTurretSelected;
_turretShop.OnTurretDeselected -= OnTurretDeselected;
_spawnDeathControl.OnLastEnemyDestroyed -= OnLastEnemyDestroyed;
_tower.OnGameOver -= OnGameOver;
}
private static void OnGameStateChanged(GameManager.GameState newState)
@@ -49,4 +52,9 @@ public class Debugger : MonoBehaviour
{
print("Last enemy destroyed");
}
private void OnGameOver()
{
print("Game over");
}
}
+22 -1
View File
@@ -1,14 +1,29 @@
using System;
using UnityEngine;
using UnityEngine.Events;
[RequireComponent(typeof(TowerHealth))]
public class Tower : MonoBehaviour
{
[SerializeField] private UnityEvent _onGameOver;
public event UnityAction OnGameOver
{
add => _onGameOver.AddListener(value);
remove => _onGameOver.RemoveListener(value);
}
private TowerHealth _towerHealth;
private void Start()
private void OnEnable()
{
_towerHealth = GetComponent<TowerHealth>();
_towerHealth.OnHealthChanged += OnHealthChanged;
}
private void OnDisable()
{
_towerHealth.OnHealthChanged -= OnHealthChanged;
}
private void OnTriggerEnter(Collider other)
@@ -16,4 +31,10 @@ public class Tower : MonoBehaviour
if (other.TryGetComponent(out Enemy enemy))
_towerHealth.TakeDamage(enemy.Damage);
}
private void OnHealthChanged(TowerHealth.OnHealthChangedEventArgs args)
{
if (args.CurrentHealth <= 0)
_onGameOver?.Invoke();
}
}
+1 -5
View File
@@ -14,7 +14,7 @@ public class TowerHealth : MonoBehaviour
add => _onHealthChanged.AddListener(value);
remove => _onHealthChanged.RemoveListener(value);
}
public float MaxHealth
{
get => _maxHealth;
@@ -47,10 +47,6 @@ public class TowerHealth : MonoBehaviour
public void TakeDamage(float damage)
{
CurrentHealth -= damage;
// TODO: доделать проигрыш
if (CurrentHealth <= 0)
Debug.Log("Game over");
}
public class OnHealthChangedEventArgs : EventArgs
+21
View File
@@ -3,13 +3,34 @@ using UnityEngine.SceneManagement;
public class GameOverMenu : MonoBehaviour
{
[SerializeField] private Tower _tower;
[SerializeField] private Transform _menuPanel;
private void OnEnable()
{
_tower.OnGameOver += OnGameOver;
}
private void OnDisable()
{
_tower.OnGameOver -= OnGameOver;
}
public void RestartGame()
{
Time.timeScale = 1f;
SceneManager.LoadScene("Island");
}
public void MainMenu()
{
Time.timeScale = 1f;
SceneManager.LoadScene("MainMenu");
}
private void OnGameOver()
{
Time.timeScale = 0f;
_menuPanel.gameObject.SetActive(true);
}
}