119 lines
3.4 KiB
GDScript
119 lines
3.4 KiB
GDScript
extends Node
|
|
|
|
signal playerInventoryUpdated
|
|
|
|
var grapeScene = preload("res://Items/Foods/Fruits/Grape.gd")
|
|
|
|
var inventories = {}
|
|
|
|
func _ready():
|
|
initialize_inventory()
|
|
playerInventoryUpdated.emit()
|
|
|
|
func clear_all_inventories():
|
|
inventories = {}
|
|
initialize_inventory()
|
|
playerInventoryUpdated.emit()
|
|
|
|
func empty_inventory(inventoryName:String = "normal"):
|
|
inventories[inventoryName] = Inventory.new()
|
|
|
|
func spend_item(item:Item, quantity:int = 1, inventoryName:String = "normal"):
|
|
if !check_if_in_inventory(item, quantity, inventoryName):
|
|
return false
|
|
else:
|
|
remove_item_from_inventory(item, quantity, inventoryName)
|
|
return true
|
|
|
|
func check_if_in_inventory(item:Item, quantity:int = 1, inventoryName:String = "normal"):
|
|
var currentInventory = inventories[inventoryName]
|
|
|
|
var itemPos = currentInventory.find_item_position(item)
|
|
if itemPos < 0 or currentInventory.quantities[itemPos] < quantity:
|
|
return false
|
|
|
|
return true
|
|
|
|
func get_inventory_weight(inventoryName = "normal"):
|
|
var currentInventory = inventories[inventoryName]
|
|
return currentInventory.get_inventory_weight()
|
|
|
|
func get_item_count(item, inventoryName = "normal", modifiers = false):
|
|
var currentInventory = inventories[inventoryName]
|
|
|
|
var itemPos = currentInventory.find_item_position(item)
|
|
if itemPos < 0:
|
|
return 0
|
|
|
|
return currentInventory.quantities[itemPos]
|
|
|
|
func get_item_count_by_name(itemName, inventoryName = "normal", modifiers = false):
|
|
var currentInventory = inventories[inventoryName]
|
|
|
|
for i in range(currentInventory.items.size()):
|
|
var currentItemName = currentInventory.items[i].get_name(modifiers)
|
|
if currentItemName == itemName:
|
|
return currentInventory.quantities[i]
|
|
return 0
|
|
|
|
func add_item_to_inventory(item:Item, quantity:int = 1, inventoryName:String = "normal", skipEmit:bool = false):
|
|
if not inventoryName in inventories.keys():
|
|
create_inventory(inventoryName)
|
|
|
|
var currentInventory = inventories[inventoryName]
|
|
|
|
currentInventory.add_item(item, quantity)
|
|
if !skipEmit:
|
|
playerInventoryUpdated.emit()
|
|
|
|
func remove_item_from_inventory(item:Item, quantity:int = 1, inventoryName:String = "normal"):
|
|
var currentInventory = inventories[inventoryName]
|
|
|
|
currentInventory.remove_item(item, quantity)
|
|
playerInventoryUpdated.emit()
|
|
|
|
func soak_player_inventory():
|
|
var currentInventory = inventories["normal"]
|
|
ItemSoaking.soak_inventory(currentInventory)
|
|
playerInventoryUpdated.emit()
|
|
|
|
func dry_player_inventory(amount:int = 1):
|
|
var currentInventory = inventories["normal"]
|
|
ItemDrying.dry_inventory_items(currentInventory, amount)
|
|
playerInventoryUpdated.emit()
|
|
|
|
func get_grape_count():
|
|
var currentInventory = inventories["normal"]
|
|
|
|
var grape = grapeScene.new()
|
|
for i in range(currentInventory.items.size()):
|
|
if currentInventory.items[i].equals(grape):
|
|
return currentInventory.quantities[i]
|
|
return 0
|
|
|
|
func alter_grape_count(amount:int):
|
|
var grape = grapeScene.new()
|
|
|
|
if amount > 0:
|
|
add_item_to_inventory(grape, amount)
|
|
elif amount < 0:
|
|
remove_item_from_inventory(grape, -1*amount)
|
|
|
|
func get_all_inventories():
|
|
return inventories
|
|
|
|
func create_inventory(inventoryName:String):
|
|
if not inventoryName in inventories.keys():
|
|
inventories[inventoryName] = Inventory.new()
|
|
|
|
func initialize_inventory():
|
|
inventories["normal"] = Inventory.new()
|
|
inventories["keyItems"] = Inventory.new()
|
|
|
|
func get_inventory(inventoryName:String = "normal"):
|
|
if not inventoryName in inventories.keys():
|
|
create_inventory(inventoryName)
|
|
|
|
return inventories[inventoryName]
|
|
|