using System; using UnityEngine; public class KitchenGameManager : MonoBehaviour { [SerializeField] private const float gamePlayingTimerMax = 300f; private bool isGamePaused; private State state; public static KitchenGameManager Instance { get; private set; } public float CountdownToStartTimer { get; private set; } = 1f; public float GamePlayingTimer { get; private set; } private void Awake() { Instance = this; state = State.WaitingToStart; GamePlayingTimer = gamePlayingTimerMax; } private void Start() { GameInput.Instance.OnPauseAction += GameInput_OnPauseAction; GameInput.Instance.OnInteractAction += GameInput_OnInteractAction; //DEBUG trigger game start automatically state = State.CountdownToStart; OnStateChanged?.Invoke(this, EventArgs.Empty); } private void Update() { switch (state) { case State.WaitingToStart: break; case State.CountdownToStart: CountdownToStartTimer -= Time.deltaTime; if (CountdownToStartTimer > 0f) return; state = State.GamePlaying; OnStateChanged?.Invoke(this, EventArgs.Empty); break; case State.GamePlaying: GamePlayingTimer -= Time.deltaTime; if (GamePlayingTimer > 0f) return; state = State.GameOver; GamePlayingTimer = gamePlayingTimerMax; OnStateChanged?.Invoke(this, EventArgs.Empty); break; case State.GameOver: break; } // Debug.Log(state); } public event EventHandler OnStateChanged; public event EventHandler OnGamePaused; public event EventHandler OnGameUnpaused; private void GameInput_OnPauseAction(object sender, EventArgs e) { TogglePauseGame(); } private void GameInput_OnInteractAction(object sender, EventArgs e) { if (state == State.WaitingToStart) { state = State.CountdownToStart; OnStateChanged?.Invoke(this, EventArgs.Empty); } } public void TogglePauseGame() { isGamePaused = !isGamePaused; if (isGamePaused) { Time.timeScale = 0f; OnGamePaused?.Invoke(this, EventArgs.Empty); } else { Time.timeScale = 1f; OnGameUnpaused?.Invoke(this, EventArgs.Empty); } } public bool IsGamePlaying() { return state == State.GamePlaying; } public bool IsCountToStartActive() { return state == State.CountdownToStart; } public bool IsGameOver() { return state == State.GameOver; } public float GetGamePlayingTimerNormalized() { return 1 - GamePlayingTimer / gamePlayingTimerMax; } private enum State { WaitingToStart, CountdownToStart, GamePlaying, GameOver } }