ChessBuilder/Systems/StateMachine/StateMachine.gd

34 lines
931 B
GDScript

class_name StateMachine extends Node
@export var initialState: State = null
@onready var state: State = (func getInitialState() -> State:
return initialState if initialState != null else get_child(0)
).call()
func ready() -> void:
for stateNode: State in find_children("*", "State"):
stateNode.finished.connect(transitionToNextState)
await owner.ready
state.enter("")
func unhandledInput(event: InputEvent) -> void:
state.handleInput(event)
func process(delta: float) -> void:
state.update(delta)
func transitionToNextState(targetStatePath: String, data: Dictionary = {}) -> void:
if not has_node(targetStatePath):
printerr(owner.name + ": Trying to transition to state " + targetStatePath + " but it does not exist.")
return
var previousStatePath := state.name
state.exit()
state = get_node(targetStatePath)
state.enter(previousStatePath, data)