summaryrefslogtreecommitdiff
path: root/scenes/defenders
diff options
context:
space:
mode:
Diffstat (limited to 'scenes/defenders')
-rw-r--r--scenes/defenders/warlock.gd37
-rw-r--r--scenes/defenders/warlock.gd.uid1
-rw-r--r--scenes/defenders/warlock.tscn40
-rw-r--r--scenes/defenders/warlock_projectile.gd27
-rw-r--r--scenes/defenders/warlock_projectile.gd.uid1
-rw-r--r--scenes/defenders/warlock_projectile.tscn28
6 files changed, 134 insertions, 0 deletions
diff --git a/scenes/defenders/warlock.gd b/scenes/defenders/warlock.gd
new file mode 100644
index 0000000..18803be
--- /dev/null
+++ b/scenes/defenders/warlock.gd
@@ -0,0 +1,37 @@
+extends StaticBody2D
+
+@export var projectile_damage = 5
+
+var projectile = preload("res://scenes/defenders/warlock_projectile.tscn")
+var path_name
+
+func select_target(targets):
+ var tmp = []
+ for i in targets:
+ if "Crawler" in i.name:
+ tmp.append(i)
+
+ # this is all to select the furthest target on the track
+ var curr = null
+ for i in tmp:
+ if curr == null:
+ curr = i.get_node("../")
+ else:
+ if i.get_parent().get_progress() > curr.get_progress():
+ curr = i.get_node("../")
+ path_name = null if (curr == null) else curr.get_parent().name
+
+func _on_tower_body_entered(body: Node2D):
+ if "CrawlerSoldier" in body.name:
+ select_target(get_node("Tower").get_overlapping_bodies())
+
+func _on_tower_body_exited(_body: Node2D):
+ select_target(get_node("Tower").get_overlapping_bodies())
+
+func _on_fire_rate_timeout():
+ if (path_name != null):
+ var tmp_projectile = projectile.instantiate()
+ tmp_projectile.path_name = path_name
+ tmp_projectile.projectile_damage = projectile_damage
+ get_node("ProjectileContainer").call_deferred("add_child", tmp_projectile)
+ tmp_projectile.global_position = $Aim.global_position
diff --git a/scenes/defenders/warlock.gd.uid b/scenes/defenders/warlock.gd.uid
new file mode 100644
index 0000000..64a7007
--- /dev/null
+++ b/scenes/defenders/warlock.gd.uid
@@ -0,0 +1 @@
+uid://dvhqpgw6vhayu
diff --git a/scenes/defenders/warlock.tscn b/scenes/defenders/warlock.tscn
new file mode 100644
index 0000000..7b097c5
--- /dev/null
+++ b/scenes/defenders/warlock.tscn
@@ -0,0 +1,40 @@
+[gd_scene load_steps=5 format=3 uid="uid://d27cf3jwfvbqu"]
+
+[ext_resource type="Script" uid="uid://dvhqpgw6vhayu" path="res://scenes/defenders/warlock.gd" id="1_rpypk"]
+[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="1_wu3n4"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_wu3n4"]
+size = Vector2(16, 16)
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_rpypk"]
+radius = 64.0
+
+[node name="Warlock" type="StaticBody2D"]
+script = ExtResource("1_rpypk")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_wu3n4")
+disabled = true
+
+[node name="Aim" type="Marker2D" parent="."]
+position = Vector2(6, -5)
+
+[node name="Tower" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Tower"]
+shape = SubResource("CircleShape2D_rpypk")
+
+[node name="ProjectileContainer" type="Node" parent="."]
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("1_wu3n4")
+region_enabled = true
+region_rect = Rect2(496, 16, 16, 16)
+
+[node name="FireRate" type="Timer" parent="."]
+wait_time = 0.75
+autostart = true
+
+[connection signal="body_entered" from="Tower" to="." method="_on_tower_body_entered"]
+[connection signal="body_exited" from="Tower" to="." method="_on_tower_body_exited"]
+[connection signal="timeout" from="FireRate" to="." method="_on_fire_rate_timeout"]
diff --git a/scenes/defenders/warlock_projectile.gd b/scenes/defenders/warlock_projectile.gd
new file mode 100644
index 0000000..b46ed29
--- /dev/null
+++ b/scenes/defenders/warlock_projectile.gd
@@ -0,0 +1,27 @@
+extends CharacterBody2D
+
+var target
+var speed = 300
+var path_name = ""
+var projectile_damage
+
+func _physics_process(_delta: float):
+ var path_spawner_node = get_tree().get_root().get_node("Main/PathSpawner")
+ for i in path_spawner_node.get_child_count():
+ if path_spawner_node.get_child(i).name == path_name:
+ target = path_spawner_node.get_child(i).get_child(0).get_child(0)
+
+ # another tower destroyed this target
+ if !is_instance_valid(target):
+ queue_free()
+ else:
+ target = target.global_position
+ velocity = global_position.direction_to(target) * speed
+ look_at(target)
+ move_and_slide()
+
+
+func _on_area_2d_body_entered(body: Node2D):
+ if "CrawlerSoldier" in body.name:
+ body.health -= projectile_damage
+ queue_free()
diff --git a/scenes/defenders/warlock_projectile.gd.uid b/scenes/defenders/warlock_projectile.gd.uid
new file mode 100644
index 0000000..3225e3e
--- /dev/null
+++ b/scenes/defenders/warlock_projectile.gd.uid
@@ -0,0 +1 @@
+uid://kolqesiin33p
diff --git a/scenes/defenders/warlock_projectile.tscn b/scenes/defenders/warlock_projectile.tscn
new file mode 100644
index 0000000..ab71e50
--- /dev/null
+++ b/scenes/defenders/warlock_projectile.tscn
@@ -0,0 +1,28 @@
+[gd_scene load_steps=4 format=3 uid="uid://bjt768hxqfu5h"]
+
+[ext_resource type="Script" uid="uid://kolqesiin33p" path="res://scenes/defenders/warlock_projectile.gd" id="1_jonmr"]
+[ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="2_c7g7q"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_0ilu8"]
+radius = 8.0
+
+[node name="WarlockBullet" type="CharacterBody2D"]
+script = ExtResource("1_jonmr")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+scale = Vector2(0.5, 0.5)
+texture = ExtResource("2_c7g7q")
+region_enabled = true
+region_rect = Rect2(432, 320, 16, 16)
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+scale = Vector2(0.2, 0.2)
+shape = SubResource("CircleShape2D_0ilu8")
+
+[node name="Area2D" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+scale = Vector2(0.3, 0.3)
+shape = SubResource("CircleShape2D_0ilu8")
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"]