summaryrefslogtreecommitdiff
path: root/scenes/defenders
diff options
context:
space:
mode:
Diffstat (limited to 'scenes/defenders')
-rw-r--r--scenes/defenders/wyvern.gd36
-rw-r--r--scenes/defenders/wyvern.gd.uid1
-rw-r--r--scenes/defenders/wyvern_projectile.gd18
-rw-r--r--scenes/defenders/wyvern_projectile.gd.uid1
-rw-r--r--scenes/defenders/wyvern_projectile.tscn62
5 files changed, 118 insertions, 0 deletions
diff --git a/scenes/defenders/wyvern.gd b/scenes/defenders/wyvern.gd
new file mode 100644
index 0000000..8341d41
--- /dev/null
+++ b/scenes/defenders/wyvern.gd
@@ -0,0 +1,36 @@
+extends "res://scenes/defenders/base_defender.gd"
+
+var projectile: PackedScene = preload("res://scenes/defenders/wyvern_projectile.tscn")
+var damage_tick_rate: float = 0.25
+var firing : bool = false
+
+func _ready():
+ damage = 2
+ fire_rate = 1.0
+
+func _process(_delta):
+ select_target()
+ if firing:
+ if target == null:
+ $WyvernProjectile.queue_free()
+ firing = false
+ else:
+ $WyvernProjectile.target = target
+ $WyvernProjectile.move_projectile()
+
+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)
+
+func _on_fire_timer_timeout():
+ if (target != null):
+ var tmp_projectile = projectile.instantiate()
+ tmp_projectile.target = target
+ tmp_projectile.projectile_damage = damage
+ tmp_projectile.damage_tick_rate = 0.25
+ add_child(tmp_projectile)
+ tmp_projectile.global_position = $Aim.global_position
+ firing = true
+ $FireTimer.stop()
diff --git a/scenes/defenders/wyvern.gd.uid b/scenes/defenders/wyvern.gd.uid
new file mode 100644
index 0000000..abe259e
--- /dev/null
+++ b/scenes/defenders/wyvern.gd.uid
@@ -0,0 +1 @@
+uid://cfhnd8k1sy116
diff --git a/scenes/defenders/wyvern_projectile.gd b/scenes/defenders/wyvern_projectile.gd
new file mode 100644
index 0000000..104bc6f
--- /dev/null
+++ b/scenes/defenders/wyvern_projectile.gd
@@ -0,0 +1,18 @@
+extends CharacterBody2D
+
+var target
+var curr = ""
+var projectile_damage
+# todo hook this up
+var damage_tick_rate
+
+func _on_damage_tick_timeout() -> void:
+ var enemies = $Area2D.get_overlapping_bodies()
+ for i in enemies:
+ if "Crawler" in i.name:
+ i.health -= projectile_damage
+
+func move_projectile() -> void:
+ var pos : Vector2
+ pos = target.global_position
+ look_at(pos)
diff --git a/scenes/defenders/wyvern_projectile.gd.uid b/scenes/defenders/wyvern_projectile.gd.uid
new file mode 100644
index 0000000..3882240
--- /dev/null
+++ b/scenes/defenders/wyvern_projectile.gd.uid
@@ -0,0 +1 @@
+uid://brqwmj8ydtipd
diff --git a/scenes/defenders/wyvern_projectile.tscn b/scenes/defenders/wyvern_projectile.tscn
new file mode 100644
index 0000000..34baca4
--- /dev/null
+++ b/scenes/defenders/wyvern_projectile.tscn
@@ -0,0 +1,62 @@
+[gd_scene load_steps=7 format=3 uid="uid://b5klvt4gcjnah"]
+
+[ext_resource type="Script" uid="uid://brqwmj8ydtipd" path="res://scenes/defenders/wyvern_projectile.gd" id="1_68je7"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_tajkb"]
+radius = 8.0
+
+[sub_resource type="Curve" id="Curve_tajkb"]
+_data = [Vector2(0, 0.966292), 0.0, 0.0, 0, 0, Vector2(0.680328, 0.651685), 0.0, 0.0, 0, 0, Vector2(1, 0.426966), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="Gradient" id="Gradient_tajkb"]
+offsets = PackedFloat32Array(0.125, 0.489583, 0.552083, 0.625)
+colors = PackedColorArray(0.996078, 0.133333, 0.172549, 1, 1, 0.772549, 0, 1, 0, 0.784314, 0.321569, 1, 1, 0.717647, 0.321569, 1)
+
+[sub_resource type="Curve" id="Curve_68je7"]
+_limits = [-1.0, 1.0, 0.0, 1.0]
+_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.707865), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_68je7"]
+radius = 5.0
+
+[node name="WyvernProjectile" type="CharacterBody2D"]
+script = ExtResource("1_68je7")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_tajkb")
+disabled = true
+
+[node name="DamageTick" type="Timer" parent="."]
+wait_time = 0.25
+autostart = true
+
+[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
+skew = 0.401426
+amount = 1500
+lifetime = 0.25
+explosiveness = 0.15
+randomness = 0.86
+emission_shape = 1
+emission_sphere_radius = 2.0
+spread = 17.5
+gravity = Vector2(0, 0)
+initial_velocity_max = 300.0
+orbit_velocity_min = -0.5
+orbit_velocity_max = 0.5
+scale_amount_min = 0.5
+scale_amount_max = 1.5
+scale_amount_curve = SubResource("Curve_tajkb")
+color_ramp = SubResource("Gradient_tajkb")
+hue_variation_curve = SubResource("Curve_68je7")
+anim_speed_max = 20.0
+
+[node name="Area2D" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+position = Vector2(20, 0)
+scale = Vector2(5, 1)
+shape = SubResource("CircleShape2D_68je7")
+
+[connection signal="timeout" from="DamageTick" to="." method="_on_damage_tick_timeout"]