summaryrefslogtreecommitdiff
path: root/scripts/warlock_projectile.gd
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/warlock_projectile.gd')
-rw-r--r--scripts/warlock_projectile.gd28
1 files changed, 22 insertions, 6 deletions
diff --git a/scripts/warlock_projectile.gd b/scripts/warlock_projectile.gd
index 326dfba..2c3830f 100644
--- a/scripts/warlock_projectile.gd
+++ b/scripts/warlock_projectile.gd
@@ -3,11 +3,16 @@ extends CharacterBody2D
var target : CharacterBody2D
var speed : int
var projectile_damage : int
+var max_lifetime : float
+var chaos_factor : float
-func _physics_process(_delta: float):
- if !is_instance_valid(target):
+var _total_lifetime : float = 0.0
+
+func _physics_process(delta: float):
+ if _total_lifetime > max_lifetime:
queue_free()
else:
+ _total_lifetime += delta
_move_projectile()
func _on_area_2d_body_entered(body: Node2D):
@@ -16,8 +21,19 @@ func _on_area_2d_body_entered(body: Node2D):
queue_free()
func _move_projectile():
- var pos : Vector2
- pos = target.global_position
- velocity = global_position.direction_to(pos) * speed
- look_at(pos)
+ var pos : Vector2 = _get_target_position()
+ var curve_offset = Vector2(
+ sin(_total_lifetime * 5) * chaos_factor,
+ cos(_total_lifetime * 5) * chaos_factor,
+ )
+ velocity = global_position.direction_to(pos) * speed + curve_offset
move_and_slide()
+
+func _get_target_position() -> Vector2:
+ if is_instance_valid(target):
+ return target.global_position
+ else:
+ return Vector2(randf_range(-2.0, 2.0), randf_range(-2.0, 2.0)) + global_position
+
+#func _assign_new_target():
+ #var enemies = get_tree().get_nodes_in_group("enemies")