# OnBegin spins up the state machine in the background and returns immediately. InternalStateMachineHandler(NPCAgent : agent) : void = spawn{ InternalStateMachine(NPCAgent) } # The dispatcher: pick the current state and run its method. InternalStateMachine(InAgent : agent) : void = case (CurrentState): npc_states.Idle => StateIdle(InAgent) npc_states.Sleep => StateSleep(InAgent) npc_states.Hint => StateHint(InAgent) # ...one method per state