@ -1,25 +1,32 @@
extends Node
signal next_quick_slot
signal previous_quick_slot
signal select_quick_slot ( slot_index : int )
signal quick_slot_selected ( slot_index : int )
signal item_picked_up ( item : DBItemResource )
signal item_dropped ( item : DBItemResource )
signal inventory_opened
signal inventory_closed
signal item_picked_up ( item : DBItemResource )
signal clear_inventory
#region Inventory Specific
signal add_to_inventory ( item_id : String , amount : int )
signal remove_from_inventory ( item_id : String , amount : int )
signal clear_inventory ## Remove all items in inventory
signal item_added ( item_id : String , amount : int )
signal item_removed ( item_id : String , amount : int )
signal inventory_closed
signal inventory_opened
signal inventory_slot_updated ( slot_index : int )
signal remove_from_inventory ( item_id : String , amount : int )
signal remove_from_slot ( slot_index : int , amount : int )
#endregion
#region Quickslots
signal next_quick_slot
signal previous_quick_slot
signal quick_slot_selected ( slot_index : int )
signal select_quick_slot ( slot_index : int )
#endregion
var max_inventory_items : int = 40 # 4 rows of 10
var quick_slot_count : int = 10
var selected_quick_slot : int = 0
var max_inventory_items : int = 40 # 4 rows of 10
var inventory : Array [ DBItemResource ] = [ ] ## To ensure inventory is automatically sorted, "empty" inventory cells will be replaced with null to keep positions
var _inventory_cache : Dictionary [ String , Dictionary ] = { } ## Used for caching certain information
@ -30,11 +37,10 @@ func _ready() -> void:
self . item_dropped . connect ( _on_item_dropped )
self . add_to_inventory . connect ( _on_add_to_inventory )
self . remove_from_inventory . connect ( _on_remove_from_inventory )
self . clear_inventory . connect ( _on_clear_inventory )
self . quick_slot_selected . connect ( _on_quick_slot_selected )
self . remove_from_inventory . connect ( _on_remove_from_inventory )
self . remove_from_slot . connect ( _on_remove_from_slot )
func available_space ( item_id : String ) - > int :
var full_stacks : int = floor ( _inventory_cache [ item_id ] . total / DBItems . data [ item_id ] . max_stack_size )
@ -166,3 +172,16 @@ func _on_item_picked_up(item: DBItemResource) -> void:
func _on_quick_slot_selected ( slot_index : int ) - > void :
selected_quick_slot = slot_index
## Removes an amount of items from a specific slot
## If the amount exceeds the amount of the slot, will NOT remove from other stacks
func _on_remove_from_slot ( slot_index : int , amount : int ) - > void :
if slot_index > = max_inventory_items :
printerr ( " Slot Index " , slot_index , " out of inventory range " )
return
inventory [ slot_index ] . amount -= amount
if inventory [ slot_index ] . amount < = 0 :
inventory [ slot_index ] = null
inventory_slot_updated . emit ( slot_index )