58 lines
1.5 KiB
GDScript
58 lines
1.5 KiB
GDScript
class_name ItemSystem extends Node
|
|
const Inventory = preload("res://scripts/Item/Inventory.gd")
|
|
|
|
|
|
static var PLAYER_INVENTORY = Inventory.new();
|
|
static var ITEM_MAP:Dictionary[Item.Type,Item]
|
|
|
|
func _addItemRecursively(node:Node) -> void:
|
|
if node is Item:
|
|
if ITEM_MAP.has(node.type):
|
|
assert(false, "Duplicate item type found: " + str(node.type))
|
|
ITEM_MAP[node.type] = node
|
|
|
|
for childIndex in node.get_child_count():
|
|
_addItemRecursively(node.get_child(childIndex))
|
|
|
|
func _enter_tree() -> void:
|
|
# Add all items
|
|
ITEM_MAP = {}
|
|
_addItemRecursively(self)
|
|
|
|
# Check if we are missing any item types.
|
|
for itemType in Item.Type.values():
|
|
if !ITEM_MAP.has(itemType):
|
|
assert(false, "Missing item type: " + Item.Type.find_key(itemType))
|
|
|
|
|
|
static func isStackable(itemType:Item.Type) -> bool:
|
|
if not ITEM_MAP.has(itemType):
|
|
return false
|
|
|
|
var item:Item = ITEM_MAP[itemType]
|
|
return item.stackable
|
|
|
|
static func getItemName(itemType:Item.Type, count:int = 1) -> String:
|
|
if not ITEM_MAP.has(itemType):
|
|
return ""
|
|
|
|
var item:Item = ITEM_MAP[itemType]
|
|
if count > 1:
|
|
return str(count) + "x " + item.title
|
|
else:
|
|
return item.title
|
|
|
|
static func getItemDescription(itemType:Item.Type) -> String:
|
|
if not ITEM_MAP.has(itemType):
|
|
return ""
|
|
|
|
var item:Item = ITEM_MAP[itemType]
|
|
return item.description_text
|
|
|
|
static func getItemCategory(itemType:Item.Type) -> Item.Category:
|
|
if not ITEM_MAP.has(itemType):
|
|
return Item.Category.INGREDIENT
|
|
|
|
var item:Item = ITEM_MAP[itemType]
|
|
return item.category
|