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 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: global_position += global_transform.basis * Vector3(0,0,-speed) * delta else: global_position += global_transform.basis * Vector3(0,0,-speed) * delta else: pickup_collision.monitorable = true pickup_follow(delta) func pickup_follow(delta): if follow_target != null: if spawn_out: follow_target.arrow += 1 queue_free() else: if global_position.distance_to(follow_target.global_position) < .5: spawn_out = true else: var direction_to_player = global_position.direction_to(follow_target.global_position) var distance_to_player = global_position.distance_to(follow_target.global_position) global_position += global_transform.basis * direction_to_player * (5 + distance_to_player * 3) * delta