taqin/src/GameState.gd

28 lines
754 B
GDScript

class_name GameState
extends Node
signal state_changed(previous, new)
# 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 ]
}
export(State) var current_state = State.MAIN
func current_state_name() -> String:
return State.keys()[current_state]
func transition_to(state):
if current_state == state:
return
assert(state in transitions[current_state])
var previous_state = current_state
current_state = state
emit_signal("state_changed", previous_state, current_state)