very happy with idle script now
This commit is contained in:
@@ -1,37 +1,40 @@
|
||||
extends EnemyState
|
||||
class_name EnemyIdle
|
||||
|
||||
@export var idle_time_range : Vector2 = Vector2(5,7)
|
||||
@export var wander_distance_max : float = 30.0
|
||||
@export var wander_distance_max : float = 15.0
|
||||
@export var scan_cone_angle : float = 90
|
||||
@export var scan_time : float = 3
|
||||
|
||||
var idle_timer
|
||||
var scan_timer
|
||||
var scan_direction
|
||||
|
||||
func Enter():
|
||||
idle_timer = randf_range(idle_time_range.x,idle_time_range.y)
|
||||
scan_direction = scan_cone_angle/2
|
||||
scan_timer = scan_time
|
||||
get_new_wander_point()
|
||||
|
||||
func Update(delta):
|
||||
#attack_on_sight()
|
||||
if idle_timer > 0:
|
||||
idle_timer -= delta
|
||||
if scan_timer > 0:
|
||||
scan_timer -= delta
|
||||
else:
|
||||
get_new_wander_point()
|
||||
|
||||
change_scan_direction()
|
||||
|
||||
func Physics_Update(delta):
|
||||
debug_marker(move_target)
|
||||
move_to_nav_point(delta)
|
||||
#turret_look(delta)
|
||||
if enemy.nav_agent.is_navigation_finished():
|
||||
get_new_wander_point()
|
||||
else:
|
||||
move_to_nav_point(delta)
|
||||
turret_scan_look(enemy.nav_agent.get_next_path_position(),scan_direction,delta)
|
||||
|
||||
func get_new_wander_point():
|
||||
#reset timer
|
||||
idle_timer = randf_range(idle_time_range.x,idle_time_range.y)
|
||||
var x = randf_range(-wander_distance_max,wander_distance_max)
|
||||
var z = randf_range(-wander_distance_max,wander_distance_max)
|
||||
move_target = enemy.global_position + Vector3(x,0,z)
|
||||
enemy.nav_agent.set_target_position(move_target)
|
||||
|
||||
print("MOVE TARGET : ",move_target)
|
||||
|
||||
get_turret_look_destination()
|
||||
|
||||
func get_turret_look_destination():
|
||||
look_target = move_target + Vector3(0,3,0)
|
||||
func change_scan_direction():
|
||||
scan_timer = scan_time
|
||||
scan_direction = -scan_direction
|
||||
|
||||
@@ -48,7 +48,7 @@ func search_for_suspicious_sounds():
|
||||
enemy.player_last_seen = null
|
||||
Transitioned.emit(self,"search")
|
||||
|
||||
func rotate_to_face2D(object,target,delta,turn_speed):
|
||||
func rotate_to_face2D(object,target,target_offset_angle,delta,turn_speed):
|
||||
#to allow both nodes and positions to be passed to this function, test the target and use Vector3 coords
|
||||
var target_transformed
|
||||
if target == null:
|
||||
@@ -61,21 +61,22 @@ func rotate_to_face2D(object,target,delta,turn_speed):
|
||||
var pos2d = Vector2(object.global_position.x,object.global_position.z)
|
||||
var target_pos2d = Vector2(target_transformed.x,target_transformed.z)
|
||||
var direction = (pos2d - target_pos2d)
|
||||
return lerp_angle(object.rotation.y,atan2(direction.x,direction.y),delta * turn_speed)
|
||||
|
||||
func clear_point_of_interest():
|
||||
enemy.point_of_interest = null
|
||||
return lerp_angle(object.global_rotation.y,atan2(direction.x,direction.y) + deg_to_rad(target_offset_angle),delta * turn_speed)
|
||||
|
||||
func move_to_nav_point(delta):
|
||||
var destination = enemy.nav_agent.get_next_path_position()
|
||||
var local_destination = destination - enemy.global_position
|
||||
var direction = local_destination.normalized()
|
||||
if enemy.global_position.distance_to(destination) > 1:
|
||||
enemy.velocity = direction * move_speed
|
||||
enemy.global_rotation.y = rotate_to_face2D(enemy,destination,delta,body_turn_speed)
|
||||
enemy.velocity = direction * move_speed
|
||||
enemy.global_rotation.y = rotate_to_face2D(enemy,destination,0,delta,body_turn_speed)
|
||||
|
||||
func turret_look(delta):
|
||||
enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,move_target,delta,50)
|
||||
func turret_look(target,delta):
|
||||
enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,target,0,delta,turret_speed)
|
||||
|
||||
|
||||
func turret_scan_look(target,scan_direction,delta):
|
||||
enemy.turret_look.global_rotation.y = rotate_to_face2D(enemy.turret_look,target,scan_direction,delta,turret_speed)
|
||||
|
||||
|
||||
func debug_marker(target_pos):
|
||||
if enemy.debug_tools:
|
||||
|
||||
@@ -36,7 +36,6 @@ var last_enemy : bool = false
|
||||
@onready var postfire_timer = $Timers/postfire_timer
|
||||
@onready var knocked_timer = $Timers/knocked_timer
|
||||
@onready var stunned_timer = $Timers/stunned_timer
|
||||
@onready var turret_look_next = $TurretLookNext
|
||||
@onready var body = $body
|
||||
@onready var audio_fire = $AUIDO/Fire
|
||||
@onready var turret = $TurretLook/Turret
|
||||
|
||||
Reference in New Issue
Block a user