38 lines
946 B
GDScript
38 lines
946 B
GDScript
extends Node2D
|
|
|
|
@export var min_distance := 250.0
|
|
@export var rotation_speed := 8.0
|
|
|
|
var _target_pos: Vector2
|
|
var _has_target := false
|
|
|
|
func _process(delta: float) -> void:
|
|
_find_target()
|
|
_update_rotation(delta)
|
|
|
|
func _find_target() -> void:
|
|
var enemies = get_tree().get_nodes_in_group("enemy")
|
|
var closest_enemy: Node2D = null
|
|
var shortest_dist := INF
|
|
|
|
for enemy in enemies:
|
|
if enemy is Node2D:
|
|
var dist = global_position.distance_to(enemy.global_position)
|
|
if dist < shortest_dist:
|
|
shortest_dist = dist
|
|
closest_enemy = enemy
|
|
|
|
if closest_enemy and shortest_dist > min_distance:
|
|
_target_pos = closest_enemy.global_position
|
|
_has_target = true
|
|
visible = true
|
|
else:
|
|
_has_target = false
|
|
visible = false
|
|
|
|
func _update_rotation(delta: float) -> void:
|
|
if not _has_target:
|
|
return
|
|
|
|
var desired_angle = global_position.angle_to_point(_target_pos)
|
|
rotation = lerp_angle(rotation, desired_angle, rotation_speed * delta)
|