refactoring ai and add new animations

This commit is contained in:
2026-05-24 17:39:04 +02:00
parent 0c237430ea
commit 9e5946ddab
21 changed files with 4375 additions and 81 deletions

View File

@@ -5,26 +5,53 @@ class_name State
@export var state_id: StringName = &""
@export var next_state_id: StringName
@export var animation_name: String
@export var exit_on_animation_finished: bool
@export var wait_time: float = 3.0
var runtime_timer: Timer
@onready var agent: AIBase = owner
@warning_ignore("unused_signal")
signal transitioned(state: State, new_state_id: StringName)
func enter() -> void:
func _ready() -> void:
if wait_time > 0:
runtime_timer = Timer.new()
runtime_timer.name = "IdleTimer"
runtime_timer.one_shot = true
add_child(runtime_timer)
runtime_timer.timeout.connect(_on_timer_timeout)
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:
runtime_timer.start(wait_time)
func exit() -> void:
if exit_on_animation_finished and agent.anim_player.animation_finished.is_connected(_on_animation_finished):
agent.anim_player.animation_finished.disconnect(_on_animation_finished)
if runtime_timer and not runtime_timer.is_stopped():
runtime_timer.stop()
func update(_delta: float) -> void:
pass
func exit() -> void:
pass
func update(_delta) -> void:
pass
func physics_update(_delta) -> void:
func physics_update(_delta: float) -> void:
pass
func run_animation() -> void:
if agent.anim_player and agent.anim_player.has_animation(animation_name):
var anim = agent.anim_player.get_animation(animation_name)
anim.loop_mode = Animation.LOOP_LINEAR
agent.anim_player.play(animation_name)
func _on_animation_finished(anim_name: StringName) -> void:
if animation_name == anim_name:
if wait_time > 0:
runtime_timer.start(wait_time)
else:
transitioned.emit(self, next_state_id)
func _on_timer_timeout() -> void:
transitioned.emit(self, next_state_id)