A game scene flow like this:
Can be described by a Finite State Machine as a set of states and messages between them:
In the Swift code, each state is represented by a key in a dictionary. Another sub-dictionary describes the next state given a specific message.
///#States machine[.desert] = [ .openDoor : .room1, .digMore : .stairs ] machine[.room1] = [ .hallway : .room2, .goDown : .room3, .openDoor : .spider ] machine[.room2] = [ .hallway : .room1, .sitInChair : .treasure, .openDoor : .spider ] machine[.stairs] = [ .openDoor : .room1, .goDown : .room3 ] machine[.spider] = [ .openRightDoor : .room2, .openLeftDoor : .room1 ] machine[.lava] = [ .goBack : .room3, ] machine[.room3] = [ .openDoor : .lava, .goUp : .room1 ] machine[.treasure] = [ : ] ///#EndStates
The state diagram is synced with the Swift source code thanks to this VS Code Extension