Fixed item

This commit is contained in:
2026-01-15 09:35:57 -06:00
parent 5af98a69a2
commit c48de36f2e
8 changed files with 67 additions and 39 deletions

View File

@@ -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

View File

@@ -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)
# func _sortByItemKey(a:ItemStack, b:ItemStack) -> int:
# return Item.getItemById(a.item).key.casecmp_to(Item.getItemById(b.item).key)

View File

@@ -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]
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()

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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"]

View File

@@ -13,4 +13,4 @@ static var BACKPACK = Inventory.new()
static func getFullParty() -> Array[PartyMember]:
return [
PARTY_JOHN
]
]