pretty happy with basic AI behavior
This commit is contained in:
@@ -3,7 +3,8 @@ class_name EnemyState
|
||||
|
||||
@export var enemy : CharacterBody3D
|
||||
@export var move_speed : float = 3
|
||||
@export var can_see : bool = false # indicates whether the enemy is able to see things in the state
|
||||
@export var turret_speed : float = 6.0
|
||||
@export var can_see : bool = true # indicates whether the enemy is able to see things in the state
|
||||
@export var time_to_lose_target = 1.0
|
||||
|
||||
@onready var target_lost_timer = time_to_lose_target
|
||||
@@ -14,7 +15,7 @@ func Update(delta):
|
||||
func move_target():
|
||||
if enemy.player_last_seen != null:
|
||||
return enemy.player_last_seen
|
||||
elif enemy.points_of_interest.size() > 0:
|
||||
elif enemy.points_of_interest != null:
|
||||
var move_point = {"loudness" : 0.0,"point" : Vector3.ZERO}
|
||||
for point in enemy.points_of_interest:
|
||||
if point["loudness"] > move_point["loudness"]:
|
||||
@@ -27,7 +28,29 @@ func attack_on_sight():
|
||||
if can_see:
|
||||
if enemy.is_player_in_area() and enemy.is_player_visible():
|
||||
Transitioned.emit(self,"attack")
|
||||
if enemy.turret_look.is_colliding():
|
||||
if enemy.turret_look.get_collider() is Player:
|
||||
Transitioned.emit(self,"attack")
|
||||
|
||||
func search_on_lost_target(delta):
|
||||
if !enemy.is_player_visible():
|
||||
Transitioned.emit(self,"attack")
|
||||
|
||||
func move_target_adj():
|
||||
var position = move_target()
|
||||
return Vector3(position.x,enemy.global_position.y,position.z)
|
||||
|
||||
func rotate_to_face2D(object,target,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:
|
||||
target_transformed = object.global_position
|
||||
elif target is Vector3:
|
||||
target_transformed = target
|
||||
elif target is Node3D:
|
||||
target_transformed = target.global_position
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user