fix state and make animations loop, refactoring animals ai
This commit is contained in:
@@ -5,8 +5,10 @@ class_name State
|
||||
@export var state_id: StringName = &""
|
||||
@export var next_state_id: StringName
|
||||
@export var animation_name: String
|
||||
@export var exit_on_action_finished: bool
|
||||
@export var exit_on_animation_finished: bool
|
||||
@export var wait_time: float = 3.0
|
||||
@export var min_wait_time: float = 3.0
|
||||
@export var max_wait_time: float = 10
|
||||
|
||||
var runtime_timer: Timer
|
||||
|
||||
@@ -15,7 +17,7 @@ var runtime_timer: Timer
|
||||
signal transitioned(state: State, new_state_id: StringName)
|
||||
|
||||
func _ready() -> void:
|
||||
if wait_time > 0:
|
||||
if min_wait_time > 0 and !exit_on_action_finished:
|
||||
runtime_timer = Timer.new()
|
||||
runtime_timer.name = "IdleTimer"
|
||||
runtime_timer.one_shot = true
|
||||
@@ -26,7 +28,8 @@ func enter() -> void:
|
||||
if exit_on_animation_finished:
|
||||
if not agent.anim_player.animation_finished.is_connected(_on_animation_finished):
|
||||
agent.anim_player.animation_finished.connect(_on_animation_finished)
|
||||
elif wait_time > 0:
|
||||
elif min_wait_time > 0 and !exit_on_action_finished:
|
||||
var wait_time:= randf_range(min_wait_time, max_wait_time)
|
||||
runtime_timer.start(wait_time)
|
||||
|
||||
func exit() -> void:
|
||||
@@ -48,7 +51,10 @@ func run_animation() -> void:
|
||||
|
||||
func _on_animation_finished(anim_name: StringName) -> void:
|
||||
if animation_name == anim_name:
|
||||
if wait_time > 0:
|
||||
if exit_on_action_finished:
|
||||
return
|
||||
elif min_wait_time > 0:
|
||||
var wait_time := randf_range(min_wait_time, max_wait_time)
|
||||
runtime_timer.start(wait_time)
|
||||
else:
|
||||
transitioned.emit(self, next_state_id)
|
||||
|
||||
Reference in New Issue
Block a user