class_name InventorySlot extends Node var item : Item var quantity : int @onready var icon : TextureRect = get_node("Icon") @onready var quantity_text : Label = get_node("QuanityText") var inventory : Inventory func set_item (new_item : Item): item = new_item quantity = 1 if item == null: icon.visible = false else: icon.visible = true icon.texture = item.icon update_quantity_text() func add_item (): quantity += 1 update_quantity_text() func remove_item (): quantity -= 1 update_quantity_text() if quantity == 0: set_item(null) func update_quantity_text(): if quantity <= 1: quantity_text.text = "" else: quantity_text.text = str(quantity) func _on_mouse_entered() -> void: if item == null: inventory.info_text.text = "" else: inventory.info_text.text = item.display_name func _on_mouse_exited() -> void: inventory.info_text.text = "" func _on_pressed(): if item == null: return var remove_after_use = item._on_use(inventory.get_parent()) if remove_after_use: remove_item() func drop_item(): if item == null: return var world_item = item.world_item_scene.instantiate() add_child(world_item) world_item.position = inventory.get_parent().position + Vector3(0, 1.5, 0) - inventory.get_parent().basis.z remove_item() func _on_gui_input(event: InputEvent) -> void: if event is InputEventMouseButton and event.pressed: if event.button_index == MOUSE_BUTTON_RIGHT: drop_item()