mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
Добавил возможность проиграть
This commit is contained in:
@@ -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
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user