49 lines
1.2 KiB
GDScript
49 lines
1.2 KiB
GDScript
extends EnemyState
|
|
class_name EnemySearch
|
|
|
|
@export var scan_time : float = 3
|
|
@export var scan_cone_angle : float = 90
|
|
var scan_timer
|
|
var scan_direction = scan_cone_angle/2
|
|
|
|
func Enter():
|
|
scan_timer = scan_time
|
|
get_new_point_of_interest()
|
|
|
|
func Update(delta):
|
|
attack_on_sight()
|
|
#on timeout change scan direction
|
|
if scan_timer > 0:
|
|
scan_timer -= delta
|
|
else:
|
|
change_scan_direction()
|
|
|
|
func Physics_Update(delta):
|
|
#draw target for debug purposes
|
|
debug_marker(move_target)
|
|
|
|
#if navigation is finished get new point, otherwise continue on path
|
|
if enemy.nav_agent.is_navigation_finished():
|
|
get_new_point_of_interest()
|
|
else:
|
|
move_to_nav_point(delta)
|
|
|
|
#do turret scan
|
|
turret_scan(Vector3(0,scan_direction,0),delta)
|
|
|
|
func get_new_point_of_interest():
|
|
if enemy.player_last_seen != null:
|
|
move_target = enemy.player_last_seen
|
|
enemy.player_last_seen = null
|
|
enemy.nav_agent.set_target_position(move_target)
|
|
elif enemy.points_of_interest.size() > 0:
|
|
var point_of_interest = enemy.points_of_interest.pop_back()
|
|
move_target = point_of_interest["point"]
|
|
enemy.nav_agent.set_target_position(move_target)
|
|
else:
|
|
Transitioned.emit(self,"idle")
|
|
|
|
func change_scan_direction():
|
|
scan_timer = scan_time
|
|
scan_direction = -scan_direction
|