summaryrefslogtreecommitdiff
path: root/scenes/defenders/base_defender.gd
blob: 66be11dc23c82aa042c37e9bb9d64dbf330866c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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()