extends Node class_name StateMachine @export var current_state: State var states: Dictionary[StringName,State] = {} func _ready() -> void: for child in get_children(): if child is State: states[child.name] = child child.transition.connect(on_transition_required.rpc) else: push_warning("Child of state machine is not state") @rpc("authority","call_local","reliable") func on_transition_required(to: StringName): if states.has(to) == false: push_warning("Incorrect state request: " + to) return change_state(states[to]) func change_state(to_state: State) -> void: if current_state != null: current_state.exit() current_state = to_state current_state.enter() @rpc("authority","call_local","unreliable") func clear_state(): if current_state == null: return current_state.exit() current_state = null func _process(delta: float) -> void: if current_state == null: return current_state.update(delta) func _physics_process(delta: float) -> void: if current_state == null: return current_state.physics_update(delta)