2020-01-07 13:54:06 +01:00
|
|
|
extends Node
|
|
|
|
class_name GameState
|
|
|
|
|
|
|
|
# https://github.com/GDQuest/godot-demos/blob/master/2018/04-24-finite-state-machine/player_v2/state_machine.gd
|
|
|
|
# http://www.gameprogrammingpatterns.com/state.html
|
|
|
|
|
|
|
|
enum State { MAIN, WINNING, GAME_OVER }
|
|
|
|
var transitions = {
|
|
|
|
State.MAIN : [ State.WINNING ],
|
|
|
|
State.WINNING : [ State.GAME_OVER ],
|
|
|
|
State.GAME_OVER : [ State.MAIN ]
|
|
|
|
}
|
|
|
|
|
|
|
|
signal state_changed(previous, current)
|
|
|
|
|
|
|
|
export(State) var current_state = State.MAIN
|
|
|
|
|
|
|
|
func current_state_name() -> String:
|
|
|
|
return State.keys()[current_state]
|
|
|
|
|
|
|
|
func transition_to(state):
|
|
|
|
assert(state in transitions[current_state])
|
|
|
|
var previous_state = current_state
|
|
|
|
current_state = state
|
2020-02-07 13:39:41 +01:00
|
|
|
emit_signal("state_changed", previous_state, current_state)
|