Cow_Life_Sim_RPG/Inventory/InventoryManager.gd

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]