Files
Cube-Tower-Defense/Assets/Scripts/GameManager.cs
T
2026-06-07 04:22:40 +03:00

72 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.Events;
public class GameManager : MonoBehaviour
{
public enum GameState
{
BuildingPath,
BuildingTurrets,
Level,
Win,
Lose
}
[SerializeField] private Level[] _levels;
[SerializeField] private UnityEvent<GameState> _onStateChanged;
[SerializeField] private UnityEvent<OnLevelChangedEventArgs> _onLevelChanged;
public event UnityAction<GameState> OnStateChanged
{
add => _onStateChanged.AddListener(value);
remove => _onStateChanged.RemoveListener(value);
}
public event UnityAction<OnLevelChangedEventArgs> OnLevelChanged
{
add => _onLevelChanged.AddListener(value);
remove => _onLevelChanged.RemoveListener(value);
}
private int _currentLvlIndex = -1;
private GameState _currentState = GameState.BuildingPath;
public GameState CurrentState
{
get => _currentState;
set
{
if (_currentState == GameState.Lose ||
_currentState == GameState.Win)
return;
_currentState = value;
_onStateChanged?.Invoke(value);
}
}
public int CurrentLevel => _currentLvlIndex + 1;
public int TotalLevels => _levels.Length;
public void NextLevel()
{
_currentLvlIndex = (_currentLvlIndex + 1) % _levels.Length;
CurrentState = GameState.Level;
_onLevelChanged?.Invoke(new OnLevelChangedEventArgs
{
Level = _levels[_currentLvlIndex],
CurrentLevel = CurrentLevel,
TotalLevels = TotalLevels
});
}
public class OnLevelChangedEventArgs
{
public Level Level { get; set; }
public int CurrentLevel { get; set; }
public int TotalLevels { get; set; }
public bool IsLastLevel => CurrentLevel == TotalLevels;
}
}