extends Node class_name StateMachine var state = null setget set_state var previous_state = null var states = {} onready var parent = get_parent() func _ready(): pass # Replace with function body. func _physics_process(delta): if state !=null: _state_logic(delta) var transition = _get_transition(delta) if transition !=null: set_state(transition) func _state_logic(delta): pass func _get_transition(delta): return null func _enter_state(new_state,old_state): pass func _exit_state(old_state,new_state): pass func set_state(new_state): previous_state = state state=new_state if previous_state!=null: _exit_state(previous_state,new_state) if new_state!=null: _enter_state(new_state,previous_state) func add_state(state_name): states[state_name] = states.size()