extends Projectile class_name Arrow @onready var hit_ray: RayCast3D = $HitRay @onready var land_depth: Marker3D = $LandDepth @onready var arrow: MeshInstance3D = $Arrow @onready var pickup_collision: Area3D = $PickupCollision var follow_target var spawn_out = false const SPEED_DRAIN_RATE : float = 10.0 func _ready() -> void: pickup_collision.monitorable = false func _physics_process(delta: float) -> void: if !despawn: if hit_ray.is_colliding(): despawn = true var body_hit = hit_ray.get_collider() if body_hit is EnemyCharacter: body_hit.hit(damage) reparent(body_hit) var stick_point = hit_ray.get_collision_point() if land_depth.global_position.distance_to(stick_point) > .2: arrow_move(delta) else: arrow_move(delta) else: pickup_collision.monitorable = true pickup_follow(delta) func arrow_move(delta): current_speed = clamp(current_speed - (delta * SPEED_DRAIN_RATE),.001,1000) var applied_gravity = -9.8 * ((start_speed - current_speed) / current_speed) global_position += global_transform.basis * Vector3(0,applied_gravity,-current_speed) * delta func pickup_follow(delta): if follow_target != null: follow_target.arrows += 1 queue_free()