godot-wild-jam-66/npc/StateMachine/NpcWait.gd

40 lines
899 B
GDScript

extends State
class_name NpcWait
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
@export var parent: CharacterBody3D
var navigation_agent: NavigationAgent3D
@export var raycaster: Node3D
@export var wait_time : float
var remaining_time : float
func _ready() -> void:
Harbinger.subscribe("npc_reset", reset)
func Enter():
parent.velocity.x = 0
parent.velocity.z = 0
navigation_agent.set_target_position(parent.position)
func Physics_Update(delta):
if !parent.is_on_floor():
parent.velocity.y -= gravity * delta
if remaining_time > 0:
remaining_time -=delta
parent.velocity.x = 0
parent.velocity.z = 0
navigation_agent.set_target_position(parent.position)
else:
remaining_time = wait_time
Transitioned.emit(self, "PatrolState")
if raycaster.detected >= 0.9:
Transitioned.emit(self, "ChaseState")
func reset(_p) -> void:
remaining_time = 0.0