From 58fa20d2e762d3aa2535b6420d3ba89172e79d2b Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Sun, 9 Aug 2020 17:12:05 +0200 Subject: [PATCH] Added a StateMachine interface --- src/StateMachines/StateMachine.gd | 45 ++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/StateMachines/StateMachine.gd b/src/StateMachines/StateMachine.gd index 6d0388e..afcc8ad 100644 --- a/src/StateMachines/StateMachine.gd +++ b/src/StateMachines/StateMachine.gd @@ -1,18 +1,39 @@ - extends Node - class_name StateMachine +extends Node +class_name StateMachine - var state = null - var previous_state = null +var state = null setget set_state +var previous_state = null +var states = {} - onready var parent = get_parent() +onready var parent = get_parent() - func _state_logic(delta): - pass +func _physics_process(delta): + if state != null: + _state_logic(delta) + var transition = _get_transition(delta) + if transition != null: + set_state(transition) - func _get_transition(delta): - return null +func _state_logic(_delta): + pass - func _enter_state(new_state, old_state): - pass +func _get_transition(_delta): + return null - func _exit_state +func _enter_state(_new_state, _previous_state): + pass + +func _exit_state(_previous_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[states.size()] = state_name \ No newline at end of file