Files
aarpg/player/scripts/player_state_machine.gd
Andriy Yednarovych e877c5f058 init
2026-02-22 19:26:26 +01:00

47 lines
1.0 KiB
GDScript

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()