taqin/src/GameState.gd

26 lines
721 B
GDScript

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
emit_signal("state_changed", previous_state, current_state)