extends CharacterBody2D var target : CharacterBody2D var speed : int var projectile_damage : int var max_lifetime : float var chaos_factor : float 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): if "Crawler" in body.name: body.deal_damage(projectile_damage) queue_free() func _move_projectile(): 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")