diff --git a/autoloads/inventory_manager.gd b/autoloads/inventory_manager.gd index da18998..e2ca1f8 100644 --- a/autoloads/inventory_manager.gd +++ b/autoloads/inventory_manager.gd @@ -9,9 +9,10 @@ signal item_dropped(item: DBItemResource) signal inventory_opened signal inventory_closed -signal clear_inventory +signal clear_inventory ## Remove all items in inventory signal add_to_inventory(item_id: String, amount: int) signal remove_from_inventory(item_id: String, amount: int) +signal remove_from_slot(slot_index: int, amount: int) signal item_added(item_id: String, amount: int) signal item_removed(item_id: String, amount: int) signal inventory_slot_updated(slot_index: int) @@ -30,11 +31,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 +166,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) diff --git a/scenes/player/player.gd b/scenes/player/player.gd index 223eed5..d5a13a4 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -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() diff --git a/scenes/player/ray_cast_look.gd b/scenes/player/ray_cast_look.gd index c035de3..f2a433c 100644 --- a/scenes/player/ray_cast_look.gd +++ b/scenes/player/ray_cast_look.gd @@ -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 diff --git a/scenes/ui/quickslots/quick_slots.gd b/scenes/ui/quickslots/quick_slots.gd index be1e08a..03d586f 100644 --- a/scenes/ui/quickslots/quick_slots.gd +++ b/scenes/ui/quickslots/quick_slots.gd @@ -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)