extends StaticBody3D class_name Tower var bullet : PackedScene = preload("res://Bullets/arrow.tscn") @export var bullet_damage : int = 1 var current_targets : Array = [] var current : CharacterBody3D var can_shoot : bool = true func _process(delta: float) -> void: if is_instance_valid(current): if can_shoot: shoot() can_shoot = false $Cooldown.start() else: for i in $BulletContainer.get_child_count(): $BulletContainer.get_child(i).queue_free() func shoot() -> void: var temp_bullet : Bullet = bullet.instantiate() temp_bullet.target = current temp_bullet.bullet_damage = bullet_damage $BulletContainer.add_child(temp_bullet) temp_bullet.global_position = $Aim.global_position func choose_target(_current_targets : Array) -> void: var temp_array : Array = _current_targets var current_target : CharacterBody3D = null for i in temp_array: if current_target == null : current_target = i else: if i.get_parent().get_progress() > current_target.get_parent().get_progress(): current_target = i current = current_target func _on_range_body_entered(body: Node3D) -> void: if body is Enemy: current_targets.append(body) choose_target(current_targets) func _on_range_body_exited(body: Node3D) -> void: if body is Enemy: current_targets.erase(body) choose_target(current_targets) func _on_cooldown_timeout() -> void: can_shoot = true