class_name StateMachine extends Node @export var initialState: ChessGameState = null @onready var state: ChessGameState = (func getInitialState() -> State: return initialState if initialState != null else get_child(0) ).call() @onready var parent = get_parent() var previouseState = null var disabled = true @onready var stateString: RichTextLabel = owner.get_node("StateLabel") func _ready() -> void: print("Ready Statemachine") func start() -> void: disabled = false for stateNode: ChessGameState in find_children("*", "ChessGameState"): stateNode.game = owner stateNode.finished.connect(transitionToNextState) await owner.ready state.enter("") func enter() -> void: disabled = false state.enter("") func enable() -> void: disabled = false func disable() -> void: disabled = true func unhandledInput(event: InputEvent) -> void: # print("StateMachine received input:", event) state.handleInput(event) func process(delta: float) -> void: state.update(delta) func transitionToNextState(targetStatePath: String, data: Dictionary = {}) -> void: if disabled: previouseState = state.name state.exit() state = get_node(Constants.ROUND_END) stateString.text = Constants.ROUND_END; state.enter(previouseState, data) print("DISABLED TRANSITION TO: ", targetStatePath, "Going to", Constants.ROUND_END) return print("TRANSITIONING TO: ", targetStatePath) if not has_node(targetStatePath): printerr(owner.name + ": Trying to transition to state " + targetStatePath + " but it does not exist.") return previouseState = state.name state.exit() state = get_node(targetStatePath) stateString.text = targetStatePath; state.enter(previouseState, data)