init
This commit is contained in:
46
player/scripts/player_state_machine.gd
Normal file
46
player/scripts/player_state_machine.gd
Normal file
@@ -0,0 +1,46 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user