extends RigidBody3D @export var collision_shape = Node @export var despawning = false @export var despawn_time_s = 10 @export_enum("Ammo", "Stamina", "Health", "Money","Weapon") var pickupType: int @onready var level_control = get_tree().current_scene @onready var timer: Timer = $Timer var pickupable = false var pick_up = false var rand_amt var player_follow var player # Called when the node enters the scene tree for the first time. func _ready(): add_to_group("pickup") add_to_group("spawned") #find player player = level_control.player rand_amt = randi_range(25,100) if despawning == true: timer.wait_time = despawn_time_s timer.start() func _physics_process(delta): if player_follow != null: if !pick_up: despawning = false angular_velocity = lerp(angular_velocity, Vector3(0,0,0), delta) position = lerp(position, player.item_holder.global_position, 25 * delta) if abs(position - player.item_holder.global_position) < Vector3(.5,.5,.5): await get_tree().create_timer(1).timeout position = lerp(position, player.camera.global_position, .01 * delta) await get_tree().create_timer(.01).timeout picked_up() func picked_up(): player.pickup_sound.pitch_scale = 1 + randf_range(-.3,.3) player.pickup_sound.play() match pickupType: # Ammo 0: var ammo_add_amount : int = (rand_amt * .01) * player.gun.max_ammo level_control.ammo_reserve[level_control.current_gun_index] += ammo_add_amount print("ammo + " +str(ammo_add_amount)) # Stamina 1: var stamina_add_amount = (rand_amt * .01) * player.MAX_STAMINA player.remaining_stamina += stamina_add_amount print("stamina + " +str(stamina_add_amount)) # Health 2: level_control.health += 1 # Money 3: level_control.money += rand_amt queue_free() func _on_timer_timeout() -> void: if despawning == true: collision_shape.disabled = true await get_tree().create_timer(1).timeout self.queue_free()