Fixed item
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
65
item/Item.gd
65
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]
|
||||
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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -13,4 +13,4 @@ static var BACKPACK = Inventory.new()
|
||||
static func getFullParty() -> Array[PartyMember]:
|
||||
return [
|
||||
PARTY_JOHN
|
||||
]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user