35 lines
660 B
GDScript
35 lines
660 B
GDScript
class_name StateMachine
|
|
extends Node
|
|
|
|
signal state_changed(previous: int, current: int)
|
|
|
|
var current_state := 0
|
|
var state_names: Array[StringName] = [
|
|
&"ground",
|
|
&"ground",
|
|
&"air",
|
|
&"ground",
|
|
&"ground",
|
|
&"air",
|
|
&"guarding",
|
|
&"charging",
|
|
&"bladeChain",
|
|
&"burstCharge",
|
|
&"bursting",
|
|
&"hitstun",
|
|
]
|
|
|
|
|
|
func change_state(next_state: int) -> void:
|
|
if next_state == current_state:
|
|
return
|
|
var previous := current_state
|
|
current_state = next_state
|
|
state_changed.emit(previous, current_state)
|
|
|
|
|
|
func get_current_state_name() -> StringName:
|
|
if current_state >= 0 and current_state < state_names.size():
|
|
return state_names[current_state]
|
|
return &"any"
|