State machines
In life, as well as in game development, state machines (or Finite State Machines as they are more commonly called) are a core component for day-to-day running. At a basic level, they tell us exactly what we are doing right now, what we were doing previously, and what we can do next.
They are commonly used for the following:
Menu systems
Game-level transitions
AI/behaviors
We can implement these within games in various ways, from the very basic (and generally hard to manage) to a more ordered system and beyond with full state managers.
A basic state machine is like a flowchart and looks something like the following diagram:
Defining states
In all implementations, we start with a collection of states, which define both what conditions/states are in the game and what we do when that state changes.
These states describe both what can happen when that state is active and what other potential states could result in an action from the current state. If we look at an example that describes...