@ -3,7 +3,7 @@ extends Node
signal next_quick_slot
signal next_quick_slot
signal previous_quick_slot
signal previous_quick_slot
signal select_quick_slot ( slot_index : int )
signal select_quick_slot ( slot_index : int )
signal quick_slot_item_changed ( item_id : String )
signal quick_slot_selected ( slot_index : int )
signal item_picked_up ( item : DBItemResource )
signal item_picked_up ( item : DBItemResource )
signal item_dropped ( item : DBItemResource )
signal item_dropped ( item : DBItemResource )
signal inventory_opened
signal inventory_opened
@ -14,11 +14,11 @@ signal add_to_inventory(item_id: String, amount: int)
signal remove_from_inventory ( item_id : String , amount : int )
signal remove_from_inventory ( item_id : String , amount : int )
signal item_added ( item_id : String , amount : int )
signal item_added ( item_id : String , amount : int )
signal item_removed ( item_id : String , amount : int )
signal item_removed ( item_id : String , amount : int )
signal inventory_slot_clear ed ( slot_index : int )
signal inventory_slot_updat ed ( slot_index : int )
var quick_slot_item_id : String = " 001 "
var quick_slot_count : int = 10
var selected_quick_slot : int = 0
var max_inventory_items : int = 40 # 4 rows of 10
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 : Array [ DBItemResource ] = [ ] ## To ensure inventory is automatically sorted, "empty" inventory cells will be replaced with null to keep positions
@ -26,13 +26,14 @@ var _inventory_cache: Dictionary[String, Dictionary] = {} ## Used for caching ce
func _ready ( ) - > void :
func _ready ( ) - > void :
self . quick_slot_item_changed . connect ( _on_quick_slot_item_changed )
self . item_picked_up . connect ( _on_item_picked_up )
self . item_picked_up . connect ( _on_item_picked_up )
self . item_dropped . connect ( _on_item_dropped )
self . item_dropped . connect ( _on_item_dropped )
self . add_to_inventory . connect ( _on_add_to_inventory )
self . add_to_inventory . connect ( _on_add_to_inventory )
self . remove_from_inventory . connect ( _on_remove_from_inventory )
self . remove_from_inventory . connect ( _on_remove_from_inventory )
self . clear_inventory . connect ( _on_clear_inventory )
self . clear_inventory . connect ( _on_clear_inventory )
self . quick_slot_selected . connect ( _on_quick_slot_selected )
func available_space ( item_id : String ) - > int :
func available_space ( item_id : String ) - > int :
@ -50,6 +51,13 @@ func available_space(item_id: String) -> int:
var open_stack_amount : int = ( max_inventory_items - inventory . size ( ) ) * DBItems . data [ item_id ] . max_stack_size
var open_stack_amount : int = ( max_inventory_items - inventory . size ( ) ) * DBItems . data [ item_id ] . max_stack_size
return open_stack_amount + space_in_stacks
return open_stack_amount + space_in_stacks
func get_inventory_item ( item_slot : int = selected_quick_slot ) - > DBItemResource :
if item_slot > = inventory . size ( ) or item_slot < 0 :
return null
return inventory . get ( item_slot )
func get_quick_slot_item_id ( item_slot : int = selected_quick_slot ) - > String :
return inventory [ item_slot ] . id
func _find_stacks_by_id ( item_resource : DBItemResource , item_id : String ) - > bool :
func _find_stacks_by_id ( item_resource : DBItemResource , item_id : String ) - > bool :
return item_resource != null and item_resource . id == item_id
return item_resource != null and item_resource . id == item_id
@ -98,6 +106,8 @@ func _on_add_to_inventory(item_id: String, amount: int = 1) -> void:
_update_cache_total ( item_id , stack_resource . max_stack_size )
_update_cache_total ( item_id , stack_resource . max_stack_size )
inventory [ - 1 ] . amount = stack_resource . max_stack_size
inventory [ - 1 ] . amount = stack_resource . max_stack_size
amount_remaining -= stack_resource . max_stack_size
amount_remaining -= stack_resource . max_stack_size
inventory_slot_updated . emit ( inventory . size ( ) - 1 )
elif first_stack_index > - 1 :
elif first_stack_index > - 1 :
if inventory [ first_stack_index ] == null : # Empty slot
if inventory [ first_stack_index ] == null : # Empty slot
inventory [ first_stack_index ] = item_resource . duplicate ( )
inventory [ first_stack_index ] = item_resource . duplicate ( )
@ -114,6 +124,8 @@ func _on_add_to_inventory(item_id: String, amount: int = 1) -> void:
inventory [ first_stack_index ] . amount = stack_resource . max_stack_size
inventory [ first_stack_index ] . amount = stack_resource . max_stack_size
amount_remaining -= stack_resource . max_stack_size
amount_remaining -= stack_resource . max_stack_size
inventory_slot_updated . emit ( first_stack_index )
item_added . emit ( item_id , amount - amount_remaining )
item_added . emit ( item_id , amount - amount_remaining )
func _on_remove_from_inventory ( item_id : String , amount : int = 1 ) - > void :
func _on_remove_from_inventory ( item_id : String , amount : int = 1 ) - > void :
@ -135,8 +147,9 @@ func _on_remove_from_inventory(item_id: String, amount: int = 1) -> void:
_update_cache_total ( item_id , - amount_remaining )
_update_cache_total ( item_id , - amount_remaining )
inventory [ last_stack_index ] = null
inventory [ last_stack_index ] = null
amount_remaining -= to_remove
amount_remaining -= to_remove
inventory_slot_cleared . emit ( last_stack_index )
else : # Received more to remove than we had stacks of
inventory_slot_updated . emit ( last_stack_index )
else : # Received more to remove than we have stacks for
amount_remaining = 0
amount_remaining = 0
item_removed . emit ( item_id , amount - amount_remaining )
item_removed . emit ( item_id , amount - amount_remaining )
@ -145,11 +158,11 @@ func _on_clear_inventory() -> void:
inventory . clear ( )
inventory . clear ( )
_inventory_cache . clear ( )
_inventory_cache . clear ( )
func _on_item_dropped ( item_id : String ) - > void :
_on_remove_from_inventory ( item_ id , 1 )
func _on_item_dropped ( item : DBItemResource ) - > void :
_on_remove_from_inventory ( item . id , 1 )
func _on_item_picked_up ( item_id : String ) - > void :
_on_add_to_inventory ( item_ id , 1 )
func _on_item_picked_up ( item : DBItemResource ) - > void :
_on_add_to_inventory ( item . id , 1 )
func _on_quick_slot_item_changed ( item_id : String ) - > void :
quick_slot_item_id = item_id
func _on_quick_slot_selected ( slot_index : int ) - > void :
selected_quick_slot = slot_index