using System; using UnityEngine; using Level; using Objects; public enum GameState { Editing, Gameplay } public class GameManager : MonoBehaviour { // Static private static GameManager instance; // Events public event GameStateChangedHandler GameStateChanged; public delegate void GameStateChangedHandler(GameState newState); // Public public GameState currentState { get; private set; } = GameState.Editing; // Private [SerializeField] private GameplayUI gameplayUI; private LevelData currentLevelData; // Properties public static GameManager Instance => instance; // Methods private void Awake() { if (instance != null && instance != this) { Destroy(gameObject); return; } instance = this; } private void Start() { Player.Instance.PlayerMoved += CheckWin; } // Used by button OnClick public void SetPlayState() { currentLevelData = LevelBuilder.Instance.CreateLevelData(); SetState(GameState.Gameplay); } // Use by button OnClick public void SetEditState() { LevelBuilder.Instance.LoadLevelData(currentLevelData); SetState(GameState.Editing); } private void SetState(GameState newState) { currentState = newState; GameStateChanged?.Invoke(currentState); } private void CheckWin() { if (!LevelBuilder.Instance.UnoccupiedTargetExists()) { gameplayUI.ShowWinScreen(); } } }