Fixed item
This commit is contained in:
@@ -4,7 +4,10 @@ const ConversationAction = preload("res://cutscene/conversation/ConversationActi
|
|||||||
static func itemGetCallable(params:Dictionary) -> int:
|
static func itemGetCallable(params:Dictionary) -> int:
|
||||||
assert(params.has('stack'))
|
assert(params.has('stack'))
|
||||||
PARTY.BACKPACK.addStack(params['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,
|
'position': Cutscene.CUTSCENE_ADD_NEXT,
|
||||||
}))
|
}))
|
||||||
return Cutscene.CUTSCENE_CONTINUE
|
return Cutscene.CUTSCENE_CONTINUE
|
||||||
|
|||||||
@@ -6,15 +6,15 @@ var items:Array[ItemStack] = []
|
|||||||
|
|
||||||
enum InventorySortType {
|
enum InventorySortType {
|
||||||
ITEM_TYPE,
|
ITEM_TYPE,
|
||||||
ITEM_KEY
|
# ITEM_KEY
|
||||||
}
|
}
|
||||||
|
|
||||||
signal itemAdded(item:Item.ItemId)
|
signal itemAdded(item:Item.Id)
|
||||||
signal itemRemoved(item:Item.ItemId)
|
signal itemRemoved(item:Item.Id)
|
||||||
signal itemQuantityChanged(item:Item.ItemId, quantity:int)
|
signal itemQuantityChanged(item:Item.Id, quantity:int)
|
||||||
signal inventorySorted(sortBy:InventorySortType, reverse:bool)
|
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:
|
if quantity < 0:
|
||||||
push_error("Cannot set item quantity to negative value, using 0")
|
push_error("Cannot set item quantity to negative value, using 0")
|
||||||
quantity = 0
|
quantity = 0
|
||||||
@@ -42,13 +42,13 @@ func setItem(item:Item.ItemId, quantity:int) -> void:
|
|||||||
itemAdded.emit(item)
|
itemAdded.emit(item)
|
||||||
itemQuantityChanged.emit(item, quantity)
|
itemQuantityChanged.emit(item, quantity)
|
||||||
|
|
||||||
func getItemQuantity(item:Item.ItemId) -> int:
|
func getItemQuantity(item:Item.Id) -> int:
|
||||||
for itemStack in items:
|
for itemStack in items:
|
||||||
if itemStack.item == item:
|
if itemStack.item == item:
|
||||||
return itemStack.quantity
|
return itemStack.quantity
|
||||||
return 0
|
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
|
# Add can only take positive quantities, otherwise use set or remove
|
||||||
if quantity <= 0:
|
if quantity <= 0:
|
||||||
push_error("Cannot add non-positive item quantity")
|
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:
|
func addStack(stack:ItemStack) -> void:
|
||||||
self.addItem(stack.item, stack.quantity)
|
self.addItem(stack.item, stack.quantity)
|
||||||
|
|
||||||
func removeItem(item:Item.ItemId) -> void:
|
func removeItem(item:Item.Id) -> void:
|
||||||
self.setItem(item, 0)
|
self.setItem(item, 0)
|
||||||
|
|
||||||
func sort(sortBy:InventorySortType, reverse:bool = false) -> void:
|
func sort(sortBy:InventorySortType, reverse:bool = false) -> void:
|
||||||
match sortBy:
|
match sortBy:
|
||||||
InventorySortType.ITEM_TYPE:
|
InventorySortType.ITEM_TYPE:
|
||||||
items.sort_custom(_sortByItemType)
|
items.sort_custom(_sortByItemType)
|
||||||
InventorySortType.ITEM_KEY:
|
# InventorySortType.ITEM_KEY:
|
||||||
items.sort_custom(_sortByItemKey)
|
# items.sort_custom(_sortByItemKey)
|
||||||
|
|
||||||
if reverse:
|
if reverse:
|
||||||
items.reverse()
|
items.reverse()
|
||||||
@@ -75,7 +75,7 @@ func sort(sortBy:InventorySortType, reverse:bool = false) -> void:
|
|||||||
|
|
||||||
# Sorters
|
# Sorters
|
||||||
func _sortByItemType(a:ItemStack, b:ItemStack) -> int:
|
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:
|
# func _sortByItemKey(a:ItemStack, b:ItemStack) -> int:
|
||||||
return Item.getItemById(a.item).key.casecmp_to(Item.getItemById(b.item).key)
|
# 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
|
class_name Item
|
||||||
|
|
||||||
# Enum Types
|
# Enum Types
|
||||||
enum ItemType {
|
enum Type {
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
MEDICINE,
|
MEDICINE,
|
||||||
KEY_ITEM,
|
KEY_ITEM,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ItemId {
|
enum Id {
|
||||||
NULL,
|
NULL,
|
||||||
POTION,
|
POTION,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Properties
|
# Main dictionary holding all item data
|
||||||
var itemType:ItemType
|
static var ITEM_DATA:Array = []
|
||||||
var key:String
|
|
||||||
|
|
||||||
# Item Constructor
|
# Class definition
|
||||||
func _init(key:String, itemType:ItemType) -> void:
|
static func itemDefine(params:Dictionary) -> Dictionary:
|
||||||
self.key = key
|
assert(params.has('id'))
|
||||||
self.itemType = itemType
|
assert(params.has('handle'))
|
||||||
|
assert(params.has('type'))
|
||||||
|
assert(!ITEM_DATA.has(params['id']))
|
||||||
|
|
||||||
func getName() -> String:
|
var obj:Dictionary = {}
|
||||||
# For now just return key
|
ITEM_DATA.insert(params['id'], obj)
|
||||||
return self.key
|
|
||||||
|
|
||||||
# Item Table
|
obj['id'] = params['id']
|
||||||
static var ITEM_DEFINITIONS = {
|
obj['handle'] = params['handle']
|
||||||
[ItemId.NULL]: Item.new("NULL", ItemType.NULL),
|
obj['type'] = params['type']
|
||||||
[ItemId.POTION]: Item.new("POTION", ItemType.MEDICINE),
|
|
||||||
}
|
|
||||||
|
|
||||||
static func getItemById(itemId:ItemId) -> Item:
|
return obj
|
||||||
assert(ITEM_DEFINITIONS.has(itemId))
|
|
||||||
return ITEM_DEFINITIONS[itemId]
|
# 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 Item = preload("res://item/Item.gd")
|
||||||
const ItemStack = preload("res://item/ItemStack.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
|
@export var quantity:int = 0
|
||||||
|
|
||||||
func toItemStack() -> ItemStack:
|
func toItemStack() -> ItemStack:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
class_name ItemStack
|
class_name ItemStack
|
||||||
const Item = preload("res://item/Item.gd")
|
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
|
var quantity:int = 0
|
||||||
@@ -22,7 +22,7 @@ func isInteractable() -> bool:
|
|||||||
return false
|
return false
|
||||||
if entity.oneTimeItem.quantity <= 0:
|
if entity.oneTimeItem.quantity <= 0:
|
||||||
return false
|
return false
|
||||||
if entity.oneTimeItem.item == Item.ItemId.NULL:
|
if entity.oneTimeItem.item == Item.Id.NULL:
|
||||||
return false
|
return false
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ metadata/_custom_type_script = "uid://yn7kxdargafx"
|
|||||||
[sub_resource type="Resource" id="Resource_125nt"]
|
[sub_resource type="Resource" id="Resource_125nt"]
|
||||||
script = ExtResource("4_xf0pb")
|
script = ExtResource("4_xf0pb")
|
||||||
item = 1
|
item = 1
|
||||||
quantity = 2
|
quantity = 1
|
||||||
metadata/_custom_type_script = "uid://38ya6vphm5bu"
|
metadata/_custom_type_script = "uid://38ya6vphm5bu"
|
||||||
|
|
||||||
[node name="TestMap" type="Node3D"]
|
[node name="TestMap" type="Node3D"]
|
||||||
|
|||||||
Reference in New Issue
Block a user