diff options
Diffstat (limited to 'scripts/warlock_projectile.gd')
-rw-r--r-- | scripts/warlock_projectile.gd | 28 |
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") |