@tool class_name ItemPickup extends CharacterBody2D signal picked_up @export var item_data: ItemData : set = set_item_data @onready var area: Area2D = $Area2D @onready var sprite: Sprite2D = $Sprite2D @onready var audio_player: AudioStreamPlayer2D = $AudioStreamPlayer2D func _ready() -> void: update_texture() if Engine.is_editor_hint(): return area.body_entered.connect(on_body_enter) func _physics_process(delta: float) -> void: var collision_info := move_and_collide(velocity * delta) if collision_info: velocity = velocity.bounce(collision_info.get_normal()) velocity -= velocity * delta * 4 func on_body_enter(body: Node2D) -> void: if !item_data or body is not Player: return if PlayerManager.INVENTORY_DATA.add_item(item_data): item_picked_up() func item_picked_up() -> void: area.body_entered.disconnect(on_body_enter) audio_player.play() visible = false picked_up.emit() await audio_player.finished queue_free() func update_texture() -> void: if !item_data or !sprite: return sprite.texture = item_data.texture func set_item_data(new_item_data: ItemData) -> void: item_data = new_item_data update_texture()