@tool class_name PickupItem extends Node3D signal item_picked_up(node_path:NodePath) @onready var world_item_node = %WorldItemNode @export var item:Item: get: return item set(value): if value != item: item = value if not Engine.is_editor_hint() or world_item_node == null: return for child in world_item_node.get_children(): child.get_parent().remove_child(child) child.queue_free() world_item_node.add_child(item.scene.instantiate()) # Called when the node enters the scene tree for the first time. func _ready(): if item == null: push_error ("Error: invalid PickupItem at %s" % str(global_position)) return var item_scene = item.scene.instantiate() world_item_node.add_child(item_scene) func _on_area_3d_body_entered(body): if body.has_method("on_item_picked_up"): body.on_item_picked_up(item) emit_signal("item_picked_up", get_path()) queue_free()