diff options
author | bd <bdunahu@operationnull.com> | 2025-05-22 13:50:49 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-22 13:50:49 -0400 |
commit | 8c5c4863aeacb4afcf70f339df6d601e2df1a7a6 (patch) | |
tree | 6c2af54a18271534864a7a1daed7814ebac5abd1 /scripts/base_defender.gd | |
parent | 80e145ba2b85e08f895e76ba6a03bb67bc9ce9ea (diff) |
Reorganized files into scenes and scripts
Diffstat (limited to 'scripts/base_defender.gd')
-rw-r--r-- | scripts/base_defender.gd | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/scripts/base_defender.gd b/scripts/base_defender.gd new file mode 100644 index 0000000..66be11d --- /dev/null +++ b/scripts/base_defender.gd @@ -0,0 +1,49 @@ +extends StaticBody2D + +@onready var sprite_node = $Sprite2D + +var defender_range : float +var fire_rate : float +var damage : int +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() |