ai and game menu
This commit was merged in pull request #23.
This commit is contained in:
10
core/ai/framework/patrol_state.gd
Normal file
10
core/ai/framework/patrol_state.gd
Normal file
@@ -0,0 +1,10 @@
|
||||
extends State
|
||||
|
||||
func enter() -> void:
|
||||
super.enter()
|
||||
run_animation()
|
||||
agent.navigate_to_random_point()
|
||||
|
||||
func physics_update(_delta) -> void:
|
||||
if agent.nav_agent.is_navigation_finished():
|
||||
transitioned.emit(self, next_state_id)
|
||||
1
core/ai/framework/patrol_state.gd.uid
Normal file
1
core/ai/framework/patrol_state.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bngfthvt04ivv
|
||||
6
core/ai/framework/run_animation_state.gd
Normal file
6
core/ai/framework/run_animation_state.gd
Normal file
@@ -0,0 +1,6 @@
|
||||
extends State
|
||||
|
||||
|
||||
func enter() -> void:
|
||||
super.enter()
|
||||
run_animation()
|
||||
1
core/ai/framework/run_animation_state.gd.uid
Normal file
1
core/ai/framework/run_animation_state.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://d3hy70ec8vqo5
|
||||
@@ -3,18 +3,61 @@ extends Node
|
||||
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 min_wait_time: float = 3.0
|
||||
@export var max_wait_time: float = 10
|
||||
|
||||
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 min_wait_time > 0 and !exit_on_action_finished:
|
||||
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 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:
|
||||
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:
|
||||
func physics_update(_delta: float) -> void:
|
||||
pass
|
||||
|
||||
func update(_delta) -> void:
|
||||
pass
|
||||
func run_animation() -> void:
|
||||
if agent.anim_player and agent.anim_player.has_animation(animation_name):
|
||||
agent.anim_player.play(animation_name)
|
||||
|
||||
func physics_update(_delta) -> void:
|
||||
pass
|
||||
func _on_animation_finished(anim_name: StringName) -> void:
|
||||
if animation_name == anim_name:
|
||||
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)
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
transitioned.emit(self, next_state_id)
|
||||
|
||||
Reference in New Issue
Block a user