From dba10805f8d98aedf6d7ab3f5f8d7ca5c2280e8e Mon Sep 17 00:00:00 2001 From: clasher113 Date: Sun, 28 Dec 2025 18:01:02 +0200 Subject: [PATCH] fix: inventory interaction on "disablePlayerInventory = true" --- src/frontend/hud.cpp | 44 +++++++++++++++++++------------------------- src/frontend/hud.hpp | 2 +- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index d40ab3b8e..b5eba05c1 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -383,17 +383,18 @@ void Hud::update(bool visible) { } /// @brief Show inventory on the screen and turn on inventory mode blocking movement -void Hud::openInventory() { - auto& content = frontend.getLevel().content; +void Hud::openInventory(bool playerInventory) { showExchangeSlot(); - inventoryOpen = true; - auto inventory = player.getInventory(); - auto inventoryDocument = assets.get("core:inventory"); - inventoryView = std::dynamic_pointer_cast(inventoryDocument->getRoot()); - inventoryView->bind(inventory, &content); - add(HudElement(HudElementMode::INVENTORY, inventoryDocument, inventoryView, false)); - add(HudElement(HudElementMode::INVENTORY, nullptr, exchangeSlot, false)); + + if (playerInventory) { + auto& content = frontend.getLevel().content; + auto inventory = player.getInventory(); + auto inventoryDocument = assets.get("core:inventory"); + inventoryView = std::dynamic_pointer_cast(inventoryDocument->getRoot()); + inventoryView->bind(inventory, &content); + add(HudElement(HudElementMode::INVENTORY, inventoryDocument, inventoryView, false)); + } } std::shared_ptr Hud::openInventory( @@ -412,11 +413,8 @@ std::shared_ptr Hud::openInventory( } secondUI = secondInvView; - if (playerInventory) { - openInventory(); - } else { - inventoryOpen = true; - } + openInventory(playerInventory); + if (inv == nullptr) { inv = level.inventories->createVirtual(secondInvView->getSlotsCount()); } @@ -444,11 +442,9 @@ void Hud::openInventory( throw std::runtime_error("block UI root element must be 'inventory'"); } secondUI = blockUI; - if (playerInventory) { - openInventory(); - } else { - inventoryOpen = true; - } + + openInventory(playerInventory); + if (blockinv == nullptr) { blockinv = level.inventories->createVirtual(blockUI->getSlotsCount()); } @@ -477,6 +473,7 @@ void Hud::showExchangeSlot() { exchangeSlot->setInteractive(false); exchangeSlot->setZIndex(1); gui.store(SlotView::EXCHANGE_SLOT_NAME, exchangeSlot); + add(HudElement(HudElementMode::INVENTORY, nullptr, exchangeSlot, false)); } void Hud::showOverlay( @@ -486,12 +483,9 @@ void Hud::showOverlay( closeInventory(); } secondUI = doc->getRoot(); - if (playerInventory) { - openInventory(); - } else { - showExchangeSlot(); - inventoryOpen = true; - } + + openInventory(playerInventory); + add(HudElement(HudElementMode::INVENTORY, doc, secondUI, false), args); } diff --git a/src/frontend/hud.hpp b/src/frontend/hud.hpp index 560382d31..ad37d24ab 100644 --- a/src/frontend/hud.hpp +++ b/src/frontend/hud.hpp @@ -156,7 +156,7 @@ public: void setPause(bool pause); /// @brief Show player inventory in inventory-mode - void openInventory(); + void openInventory(bool playerInventory = true); /// @brief Show inventory in inventory-mode /// @param doc ui layout