TinyAdventure/objects/pickup_item.gd

40 lines
891 B
GDScript

@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)
item_picked_up.emit(get_path())
queue_free()