fix: grabbed item is deleted on inventory close
This commit is contained in:
parent
9ef18498ff
commit
2787f2fc54
@ -47,6 +47,7 @@
|
|||||||
#include "window/Window.hpp"
|
#include "window/Window.hpp"
|
||||||
#include "world/Level.hpp"
|
#include "world/Level.hpp"
|
||||||
#include "world/World.hpp"
|
#include "world/World.hpp"
|
||||||
|
#include "debug/Logger.hpp"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -56,6 +57,8 @@
|
|||||||
|
|
||||||
using namespace gui;
|
using namespace gui;
|
||||||
|
|
||||||
|
static debug::Logger logger("hud");
|
||||||
|
|
||||||
bool Hud::showGeneratorMinimap = false;
|
bool Hud::showGeneratorMinimap = false;
|
||||||
|
|
||||||
// implemented in debug_panel.cpp
|
// implemented in debug_panel.cpp
|
||||||
@ -485,7 +488,32 @@ void Hud::openPermanent(UiDocument* doc) {
|
|||||||
add(HudElement(hud_element_mode::permanent, doc, doc->getRoot(), false));
|
add(HudElement(hud_element_mode::permanent, doc, doc->getRoot(), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Hud::dropExchangeSlot() {
|
||||||
|
auto slotView = std::dynamic_pointer_cast<SlotView>(
|
||||||
|
gui->get(SlotView::EXCHANGE_SLOT_NAME)
|
||||||
|
);
|
||||||
|
if (slotView == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ItemStack& stack = slotView->getStack();
|
||||||
|
|
||||||
|
auto indices = frontend.getLevel().content->getIndices();
|
||||||
|
if (auto invView = std::dynamic_pointer_cast<InventoryView>(blockUI)) {
|
||||||
|
invView->getInventory()->move(stack, indices);
|
||||||
|
}
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player->getInventory()->move(stack, indices);
|
||||||
|
if (!stack.isEmpty()) {
|
||||||
|
logger.warning() << "discard item [" << stack.getItemId() << ":"
|
||||||
|
<< stack.getCount();
|
||||||
|
stack.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Hud::closeInventory() {
|
void Hud::closeInventory() {
|
||||||
|
dropExchangeSlot();
|
||||||
gui->remove(SlotView::EXCHANGE_SLOT_NAME);
|
gui->remove(SlotView::EXCHANGE_SLOT_NAME);
|
||||||
exchangeSlot = nullptr;
|
exchangeSlot = nullptr;
|
||||||
exchangeSlotInv = nullptr;
|
exchangeSlotInv = nullptr;
|
||||||
|
|||||||
@ -128,6 +128,9 @@ class Hud : public util::ObjectsKeeper {
|
|||||||
void updateHotbarControl();
|
void updateHotbarControl();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
|
/// @brief Perform exchange slot removal when it's not empty.
|
||||||
|
void dropExchangeSlot();
|
||||||
|
|
||||||
void showExchangeSlot();
|
void showExchangeSlot();
|
||||||
void updateWorldGenDebugVisualization();
|
void updateWorldGenDebugVisualization();
|
||||||
public:
|
public:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user