fix state and make animations loop, refactoring animals ai

This commit is contained in:
2026-05-24 18:37:59 +02:00
parent 36dd5631ea
commit 3f5e6309fa
21 changed files with 135 additions and 51 deletions

View File

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