Files
agame/scripts/inventory/inventory_slot.gd
T
2026-09-12 22:18:23 +08:00

58 lines
1.2 KiB
GDScript

class_name InventorySlot
extends RefCounted
var item_id: String = ""
var quantity: int = 0
func is_empty() -> bool:
return item_id.is_empty() or quantity <= 0
func add_item(item: Item, amount: int = 1) -> int:
var max_quantity = item.max_stack if item.stackable else 1
if is_empty():
item_id = item.id
quantity = min(amount, max_quantity)
return amount - quantity
if item_id == item.id and item.stackable:
var space_available = item.max_stack - quantity
var amount_to_add = min(amount, space_available)
quantity += amount_to_add
return amount - amount_to_add
return amount
func remove_item(amount: int = 1) -> int:
var removed = min(amount, quantity)
quantity -= removed
if quantity <= 0:
clear()
return removed
func clear() -> void:
item_id = ""
quantity = 0
func to_dict() -> Dictionary:
return {"item_id": item_id, "quantity": quantity}
func from_dict(data: Dictionary) -> void:
item_id = data.get("item_id", "")
quantity = data.get("quantity", 0)
if is_empty():
clear()
return
var item = ItemDatabase.get_item(item_id)
if not item:
clear()
return
var max_quantity = item.max_stack if item.stackable else 1
quantity = clampi(quantity, 1, max_quantity)