From c48de36f2e36d921c2cee1d209b679ad7551c455 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Thu, 15 Jan 2026 09:35:57 -0600 Subject: [PATCH] Fixed item --- cutscene/item/ItemAction.gd | 5 +- item/Inventory.gd | 26 ++++----- item/Item.gd | 65 +++++++++++++++------- item/ItemResource.gd | 2 +- item/ItemStack.gd | 2 +- overworld/entity/EntityInteractableArea.gd | 2 +- overworld/map/TestMap.tscn | 2 +- party/Party.gd | 2 +- 8 files changed, 67 insertions(+), 39 deletions(-) diff --git a/cutscene/item/ItemAction.gd b/cutscene/item/ItemAction.gd index be4bcb3..1759136 100644 --- a/cutscene/item/ItemAction.gd +++ b/cutscene/item/ItemAction.gd @@ -4,7 +4,10 @@ const ConversationAction = preload("res://cutscene/conversation/ConversationActi static func itemGetCallable(params:Dictionary) -> int: assert(params.has('stack')) PARTY.BACKPACK.addStack(params['stack']) - params['cutscene'].addCallable(ConversationAction.getTextboxCallable('TEST').merged({ + + # var text = "Obtained %s x%d." % [Item.getItemName(params['stack'].item), params['stack'].quantity] + var text = Item.getItemName(Item.Id.POTION) + params['cutscene'].addCallable(ConversationAction.getTextboxCallable(text).merged({ 'position': Cutscene.CUTSCENE_ADD_NEXT, })) return Cutscene.CUTSCENE_CONTINUE diff --git a/item/Inventory.gd b/item/Inventory.gd index 76c69fb..c9a67c9 100644 --- a/item/Inventory.gd +++ b/item/Inventory.gd @@ -6,15 +6,15 @@ var items:Array[ItemStack] = [] enum InventorySortType { ITEM_TYPE, - ITEM_KEY + # ITEM_KEY } -signal itemAdded(item:Item.ItemId) -signal itemRemoved(item:Item.ItemId) -signal itemQuantityChanged(item:Item.ItemId, quantity:int) +signal itemAdded(item:Item.Id) +signal itemRemoved(item:Item.Id) +signal itemQuantityChanged(item:Item.Id, quantity:int) signal inventorySorted(sortBy:InventorySortType, reverse:bool) -func setItem(item:Item.ItemId, quantity:int) -> void: +func setItem(item:Item.Id, quantity:int) -> void: if quantity < 0: push_error("Cannot set item quantity to negative value, using 0") quantity = 0 @@ -42,13 +42,13 @@ func setItem(item:Item.ItemId, quantity:int) -> void: itemAdded.emit(item) itemQuantityChanged.emit(item, quantity) -func getItemQuantity(item:Item.ItemId) -> int: +func getItemQuantity(item:Item.Id) -> int: for itemStack in items: if itemStack.item == item: return itemStack.quantity return 0 -func addItem(item:Item.ItemId, quantity:int = 1) -> void: +func addItem(item:Item.Id, quantity:int = 1) -> void: # Add can only take positive quantities, otherwise use set or remove if quantity <= 0: push_error("Cannot add non-positive item quantity") @@ -58,15 +58,15 @@ func addItem(item:Item.ItemId, quantity:int = 1) -> void: func addStack(stack:ItemStack) -> void: self.addItem(stack.item, stack.quantity) -func removeItem(item:Item.ItemId) -> void: +func removeItem(item:Item.Id) -> void: self.setItem(item, 0) func sort(sortBy:InventorySortType, reverse:bool = false) -> void: match sortBy: InventorySortType.ITEM_TYPE: items.sort_custom(_sortByItemType) - InventorySortType.ITEM_KEY: - items.sort_custom(_sortByItemKey) + # InventorySortType.ITEM_KEY: + # items.sort_custom(_sortByItemKey) if reverse: items.reverse() @@ -75,7 +75,7 @@ func sort(sortBy:InventorySortType, reverse:bool = false) -> void: # Sorters func _sortByItemType(a:ItemStack, b:ItemStack) -> int: - return int(Item.getItemById(a.item).itemType) - int(Item.getItemById(b.item).itemType) + return int(Item.getType(a.item)) - int(Item.getType(b.item)) -func _sortByItemKey(a:ItemStack, b:ItemStack) -> int: - return Item.getItemById(a.item).key.casecmp_to(Item.getItemById(b.item).key) \ No newline at end of file +# func _sortByItemKey(a:ItemStack, b:ItemStack) -> int: +# return Item.getItemById(a.item).key.casecmp_to(Item.getItemById(b.item).key) diff --git a/item/Item.gd b/item/Item.gd index 7c69b27..aa191be 100644 --- a/item/Item.gd +++ b/item/Item.gd @@ -1,37 +1,62 @@ class_name Item # Enum Types -enum ItemType { +enum Type { NULL, MEDICINE, KEY_ITEM, } -enum ItemId { +enum Id { NULL, POTION, } -# Properties -var itemType:ItemType -var key:String +# Main dictionary holding all item data +static var ITEM_DATA:Array = [] -# Item Constructor -func _init(key:String, itemType:ItemType) -> void: - self.key = key - self.itemType = itemType +# Class definition +static func itemDefine(params:Dictionary) -> Dictionary: + assert(params.has('id')) + assert(params.has('handle')) + assert(params.has('type')) + assert(!ITEM_DATA.has(params['id'])) -func getName() -> String: - # For now just return key - return self.key + var obj:Dictionary = {} + ITEM_DATA.insert(params['id'], obj) -# Item Table -static var ITEM_DEFINITIONS = { - [ItemId.NULL]: Item.new("NULL", ItemType.NULL), - [ItemId.POTION]: Item.new("POTION", ItemType.MEDICINE), -} + obj['id'] = params['id'] + obj['handle'] = params['handle'] + obj['type'] = params['type'] -static func getItemById(itemId:ItemId) -> Item: - assert(ITEM_DEFINITIONS.has(itemId)) - return ITEM_DEFINITIONS[itemId] \ No newline at end of file + return obj + +# Item Data +static var ITEM_NULL = itemDefine({ + 'id': Id.NULL, + 'handle': "unknown", + 'type': Type.NULL +}) + +static var ITEM_POTION = itemDefine({ + 'id': Id.POTION, + 'handle': "potion", + 'type': Type.MEDICINE +}) + +# Item Accessors +static func getItemDef(item:Id) -> Dictionary: + if ITEM_DATA.size() <= item || item < 0: + return ITEM_NULL + return ITEM_DATA[item] + +static func getType(item:Id) -> Type: + return getItemDef(item).type + +static func getItemHandle(item:Id) -> String: + return getItemDef(item).handle + +static func getItemName(item:Id) -> String: + var handle = Item.getItemHandle(item) + return (handle + "_name").to_upper() diff --git a/item/ItemResource.gd b/item/ItemResource.gd index bfd4e1d..7f03d0d 100644 --- a/item/ItemResource.gd +++ b/item/ItemResource.gd @@ -3,7 +3,7 @@ class_name ItemResource const Item = preload("res://item/Item.gd") const ItemStack = preload("res://item/ItemStack.gd") -@export var item:Item.ItemId = Item.ItemId.NULL +@export var item:Item.Id = Item.Id.NULL @export var quantity:int = 0 func toItemStack() -> ItemStack: diff --git a/item/ItemStack.gd b/item/ItemStack.gd index ff07cb6..e28eb5f 100644 --- a/item/ItemStack.gd +++ b/item/ItemStack.gd @@ -1,5 +1,5 @@ class_name ItemStack const Item = preload("res://item/Item.gd") -var item:Item.ItemId = Item.ItemId.NULL +var item:Item.Id = Item.Id.NULL var quantity:int = 0 \ No newline at end of file diff --git a/overworld/entity/EntityInteractableArea.gd b/overworld/entity/EntityInteractableArea.gd index 7df04c1..896431e 100644 --- a/overworld/entity/EntityInteractableArea.gd +++ b/overworld/entity/EntityInteractableArea.gd @@ -22,7 +22,7 @@ func isInteractable() -> bool: return false if entity.oneTimeItem.quantity <= 0: return false - if entity.oneTimeItem.item == Item.ItemId.NULL: + if entity.oneTimeItem.item == Item.Id.NULL: return false return true diff --git a/overworld/map/TestMap.tscn b/overworld/map/TestMap.tscn index 5569685..59328ba 100644 --- a/overworld/map/TestMap.tscn +++ b/overworld/map/TestMap.tscn @@ -15,7 +15,7 @@ metadata/_custom_type_script = "uid://yn7kxdargafx" [sub_resource type="Resource" id="Resource_125nt"] script = ExtResource("4_xf0pb") item = 1 -quantity = 2 +quantity = 1 metadata/_custom_type_script = "uid://38ya6vphm5bu" [node name="TestMap" type="Node3D"] diff --git a/party/Party.gd b/party/Party.gd index 355166a..56aae59 100644 --- a/party/Party.gd +++ b/party/Party.gd @@ -13,4 +13,4 @@ static var BACKPACK = Inventory.new() static func getFullParty() -> Array[PartyMember]: return [ PARTY_JOHN - ] \ No newline at end of file + ]