Blobby/src/Actors/Enemies/Beings/FlyerStateMachine.gd

64 lines
1.6 KiB
GDScript

extends StateMachine
onready var anim_tree = $"../FlyerSprite/AnimationTree"
onready var anim_state_playback = $"../FlyerSprite/AnimationTree".get("parameters/playback")
func _ready() -> void:
add_state("searching")
add_state("hunting")
add_state("fleeing")
add_state("sleeping")
state = states.searching
set_state(states.searching)
print(self.state)
for state in states:
if state_matching_method_exists(state):
continue
else:
printerr("StateMachine -> State: " + state + " has no matching method in parent.")
push_error("StateMachine -> State: " + state + " has no matching method in parent.")
# Game logic consequences of state
func _state_logic(delta):
var state_action_ref = funcref(parent, self.state)
parent.path_direction = state_action_ref.call_func()
parent.execute_movement(delta)
func _get_transition(_delta):
parent.get_node("StateLabel").text = self.state
_animation_logic()
var new_state
if parent.target == null:
new_state = states.searching
if parent.target != null:
new_state = states.hunting
if parent.is_hurt:
new_state = states.sleeping
if new_state != self.state:
return new_state
return null
func _enter_state(_new_state, _previous_state):
pass
func _exit_state(_previous_state, _new_state):
pass
func _animation_logic():
_set_blendspaces_direction()
if self.state == "searching":
anim_state_playback.travel("searching")
else:
anim_state_playback.travel("hunting")
func _set_blendspaces_direction():
var value = parent.get_facing_direction()
anim_tree.set("parameters/searching/blend_position", value)
anim_tree.set("parameters/hunting/blend_position", value)