extends Node2D var shootingTime = 0 var bulletSpeed = 0 var hitpoint = 0 var follower = false var target = null const ARROW = preload("res://Game/Bullets/arrow.tscn") func _ready() -> void: follower = true get_node("CharacterBody2D/Area2D").connect("body_entered", Callable(self, "choose_target")) get_node("Timer").timeout.connect(shoot) set_process_input(true) set_properties() func _process(delta: float) -> void: if follower: position = get_viewport().get_mouse_position() if not target: if get_node("CharacterBody2D/Area2D").get_overlapping_bodies(): choose_target(null) func set_properties() -> void: if self.name.contains("ArcherTower"): get_node("Timer").wait_time = 0.8 bulletSpeed = 400 hitpoint = 50 func get_if_moving_state(): return follower func _input(event): if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: if abs(position) <= get_viewport().get_mouse_position(): follower = false func choose_target(body : Node2D) -> void: if not follower: var surroinding_enemies = get_node("CharacterBody2D/Area2D").get_overlapping_bodies() target = surroinding_enemies[0] for i in surroinding_enemies: if i.get_parent().get_progress() > target.get_parent().get_progress(): target = i pass func shoot() -> void: if target != null: if self.name.contains("ArcherTower"): var arrow = ARROW.instantiate() arrow.position = self.position arrow.set_speed(bulletSpeed) arrow.set_targe(target) arrow.set_hitpoint(hitpoint) get_parent().add_child(arrow) pass