diff options
Diffstat (limited to 'scenes/defenders/base_defender.gd')
-rw-r--r-- | scenes/defenders/base_defender.gd | 59 |
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() |