summaryrefslogtreecommitdiff
path: root/scenes/defenders/base_defender.gd
diff options
context:
space:
mode:
Diffstat (limited to 'scenes/defenders/base_defender.gd')
-rw-r--r--scenes/defenders/base_defender.gd59
1 files changed, 36 insertions, 23 deletions
diff --git a/scenes/defenders/base_defender.gd b/scenes/defenders/base_defender.gd
index 14d6249..66be11d 100644
--- a/scenes/defenders/base_defender.gd
+++ b/scenes/defenders/base_defender.gd
@@ -2,35 +2,48 @@ extends StaticBody2D
@onready var sprite_node = $Sprite2D
-var defender_range: float
-var damage: int
-var curr : PathFollow2D
+var defender_range : float
+var fire_rate : float
+var damage : int
+var target : CharacterBody2D
-func _on_tower_body_entered(_body: Node2D):
- select_target(get_node("Tower").get_overlapping_bodies())
- handle_animation()
+func _on_fire_timer_timeout() -> void:
+ # extending classes override here
+ pass
-func _on_tower_body_exited(_body: Node2D):
- select_target(get_node("Tower").get_overlapping_bodies())
- handle_animation()
-
-func handle_animation():
- if (curr == null):
- sprite_node.idle_state()
- else:
- sprite_node.attack_state()
-
-func select_target(targets):
- var tmp = []
- for i in targets:
- if "Crawler" in i.name:
- tmp.append(i)
+func select_target() -> void:
+ var targets : Array = _find_targets()
# this is all to select the furthest target on the track
- curr = null
- for i in tmp:
+ 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()