KitchenChaos/Assets/Scripts/KitchenGameManager.cs

79 lines
2.6 KiB
C#

using System;
using UnityEngine;
public class KitchenGameManager : MonoBehaviour {
public static KitchenGameManager Instance { get; private set; }
public event EventHandler OnStateChanged;
public event EventHandler OnGamePaused;
public event EventHandler OnGameUnpaused;
private enum State {
WaitingToStart,
CountdownToStart,
GamePlaying,
GameOver
}
private State state;
private float waitingToStartTimer = 1f;
private float countdownToStartTimer = 3f;
private float gamePlayingTimer;
private const float gamePlayingTimerMax = 10f;
private bool isGamePaused;
private void Awake() {
Instance = this;
state = State.WaitingToStart;
gamePlayingTimer = gamePlayingTimerMax;
}
private void Start() => GameInput.Instance.OnPauseAction += GameInput_OnPauseAction;
private void GameInput_OnPauseAction(object sender, EventArgs e) => TogglePauseGame();
private void TogglePauseGame() {
isGamePaused = !isGamePaused;
if (isGamePaused) {
Time.timeScale = 0f;
OnGamePaused?.Invoke(this, EventArgs.Empty);
}
else {
Time.timeScale = 1f;
OnGameUnpaused?.Invoke(this, EventArgs.Empty);
}
}
private void Update() {
switch (state) {
case State.WaitingToStart:
waitingToStartTimer -= Time.deltaTime;
if (waitingToStartTimer > 0f) return;
state = State.CountdownToStart;
OnStateChanged?.Invoke(this, EventArgs.Empty);
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 bool IsGamePlaying() => state == State.GamePlaying;
public bool IsCountToStartActive() => state == State.CountdownToStart;
public float GetCountdownToStartTimer() => countdownToStartTimer;
public bool IsGameOver() => state == State.GameOver;
public float GetGamePlayingTimerNormalized() => 1 - (gamePlayingTimer / gamePlayingTimerMax);
}