Example Game Manager Class
with explanations
4 min readAug 29, 2023
using System;
using UnityEngine;
/// <summary>
/// Nice, easy to understand enum-based game manager. For larger and more complex games, look into
/// state machines. But this will serve just fine for most games.
/// </summary>
public class ExampleGameManager : StaticInstance<ExampleGameManager> {
public static event Action<GameState> OnBeforeStateChanged;
public static event Action<GameState> OnAfterStateChanged;
public GameState State { get; private set; }
// Kick the game off with the first state
void Start() => ChangeState(GameState.Starting);
public void ChangeState(GameState newState) {
OnBeforeStateChanged?.Invoke(newState);
State = newState;
switch (newState) {
case GameState.Starting:
HandleStarting();
break;
case GameState.SpawningHeroes:
HandleSpawningHeroes();
break;
case GameState.SpawningEnemies:
HandleSpawningEnemies();
break;
case GameState.HeroTurn:
HandleHeroTurn();
break;
case GameState.EnemyTurn:
break;
case GameState.Win:
break;
case GameState.Lose:
break;
default:
throw new ArgumentOutOfRangeException(nameof(newState), newState, null);
}
OnAfterStateChanged?.Invoke(newState);
Debug.Log($"New state: {newState}");
}
private void…