class_name PlayerStateMachine extends Node var states: Array[State] var previous_state: State var current_state: State func _ready() -> void: process_mode = Node.PROCESS_MODE_DISABLED func _process(delta: float) -> void: change_state(current_state.process(delta)) func _physics_process(delta: float) -> void: change_state(current_state.process(delta)) func _unhandled_input(event) -> void: change_state(current_state.handle_input(event)) func initialize(player: Player) -> void: states = [] for child in get_children(): if child is State: states.append(child) if states.is_empty(): return var firstState = states[0] firstState.player = player firstState.state_machine = self for state in states: state.init() change_state(firstState) process_mode = Node.PROCESS_MODE_INHERIT func change_state(new_state: State) -> void: if new_state == null or new_state == current_state: return if current_state: current_state.exit() previous_state = current_state current_state = new_state current_state.enter()