extends StaticBody2D @onready var sprite_node = $Sprite2D var defender_range : float var fire_rate : float var damage : float var target : CharacterBody2D func _on_fire_timer_timeout() -> void: # extending classes override here pass func select_target() -> void: var targets : Array = _find_targets() # this is all to select the furthest target on the track var curr : PathFollow2D = null for i in targets: if curr == null: curr = i.get_node("../") else: if i.get_parent().get_progress() > curr.get_progress(): curr = i.get_node("../") _update_state_machine(curr) func _find_targets() -> Array: var targets : Array = get_node("Tower").get_overlapping_bodies() var tmp : Array = [] for i in targets: if "Crawler" in i.name: tmp.append(i) return tmp func _update_state_machine(curr : PathFollow2D) -> void: if (curr == null): target = null sprite_node.idle_state() else: target = curr.get_child(0) sprite_node.attack_state() func _on_tower_body_entered(_body: Node2D) -> void: var old_target : CharacterBody2D = target select_target() if old_target == null && old_target != target: $FireTimer.start(fire_rate) _on_fire_timer_timeout()