79 lines
2.6 KiB
C#
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);
|
|
} |