diff options
-rw-r--r-- | scenes/defenders/wyvern.gd | 36 | ||||
-rw-r--r-- | scenes/defenders/wyvern.gd.uid | 1 | ||||
-rw-r--r-- | scenes/defenders/wyvern_projectile.gd | 18 | ||||
-rw-r--r-- | scenes/defenders/wyvern_projectile.gd.uid | 1 | ||||
-rw-r--r-- | scenes/defenders/wyvern_projectile.tscn | 62 |
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"] |