Example Game Manager Class

with explanations

Tech Notes
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…

--

--