diff options
Diffstat (limited to 'scenes/defenders')
-rw-r--r-- | scenes/defenders/warlock.gd | 37 | ||||
-rw-r--r-- | scenes/defenders/warlock.gd.uid | 1 | ||||
-rw-r--r-- | scenes/defenders/warlock.tscn | 40 | ||||
-rw-r--r-- | scenes/defenders/warlock_projectile.gd | 27 | ||||
-rw-r--r-- | scenes/defenders/warlock_projectile.gd.uid | 1 | ||||
-rw-r--r-- | scenes/defenders/warlock_projectile.tscn | 28 |
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"] |