2 Commits

5 changed files with 42 additions and 17 deletions
Split View
  1. +32
    -13
      autoloads/inventory_manager.gd
  2. +4
    -0
      scenes/player/player.gd
  3. +1
    -0
      scenes/player/ray_cast_look.gd
  4. +3
    -3
      scenes/ui/quickslots/quick_slots.gd
  5. +2
    -1
      scenes/ui/quickslots/quickslots_slot.gd

+ 32
- 13
autoloads/inventory_manager.gd View File

@ -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)

+ 4
- 0
scenes/player/player.gd View File

@ -62,6 +62,7 @@ func _ready() -> void:
InventoryManager.add_to_inventory.connect(_on_add_to_inventory)
InventoryManager.remove_from_inventory.connect(_on_remove_from_inventory)
InventoryManager.item_picked_up.connect(_on_item_picked_up)
InventoryManager.inventory_slot_updated.connect(_on_inventory_slot_updated)
SignalManager.resume_game.connect(_on_resume_game)
SignalManager.open_pause_menu.connect(_on_open_pause_menu)
SignalManager.hide_ui.connect(_on_hide_ui)
@ -165,6 +166,9 @@ func _on_resume_game() -> void:
func _on_add_to_inventory(_item_id: String, _amount: int) -> void:
_update_held_block_mesh()
func _on_inventory_slot_updated(_slot_index: int) -> void:
_update_held_block_mesh()
func _on_item_picked_up(_item: DBItemResource) -> void:
_update_held_block_mesh()


+ 1
- 0
scenes/player/ray_cast_look.gd View File

@ -18,6 +18,7 @@ func _process(_delta: float) -> void:
return
EntityManager.create_block.emit(InventoryManager.get_quick_slot_item_id(), block_pos)
InventoryManager.remove_from_slot.emit(InventoryManager.selected_quick_slot, 1)
if Waila.ref.get_target() == collider:
return


+ 3
- 3
scenes/ui/quickslots/quick_slots.gd View File

@ -64,12 +64,12 @@ func generate_quick_slots() -> void:
slots_container.add_child(slot)
slot.init(slot_index)
func select_previous_item() -> void:
select_quick_slot(_selected_item - 1)
func select_next_item() -> void:
select_quick_slot(_selected_item + 1)
func select_previous_item() -> void:
select_quick_slot(_selected_item - 1)
func select_quick_slot(slot_index: int) -> void:
_selected_item = slot_index
InventoryManager.quick_slot_selected.emit(slot_index)


+ 2
- 1
scenes/ui/quickslots/quickslots_slot.gd View File

@ -7,8 +7,9 @@ extends Panel
var slot_index: int = 0
func _ready() -> void:
InventoryManager.inventory_slot_updated.connect(_on_inventory_slot_updated)
InventoryManager.inventory_slot_updated.connect(_on_inventory_slot_updated)
func init(_slot_index: int) -> void:


Loading…
Cancel
Save