From cae0ceb8a375d77a602759761f8b478fb9ba3b53 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 22 Feb 2024 11:01:14 +0300 Subject: [PATCH] hud.open_block 4th overlay mode argument --- src/frontend/hud.cpp | 39 ++++++++++++++++++------------ src/frontend/hud.h | 2 +- src/logic/scripting/lua/libhud.cpp | 3 ++- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index c2fec154..e46b62ee 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -380,7 +380,7 @@ void Hud::update(bool visible) { } glm::vec2 invSize = contentAccessPanel->getSize(); - contentAccessPanel->setVisible(inventoryOpen); + contentAccessPanel->setVisible(inventoryView != nullptr); contentAccessPanel->setSize(glm::vec2(invSize.x, Window::height)); contentAccess->setMinSize(glm::vec2(1, Window::height)); hotbarView->setVisible(visible); @@ -436,7 +436,7 @@ void Hud::openInventory() { * @param blockinv block inventory. * In case of nullptr a new virtual inventory will be created */ -void Hud::openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr blockinv) { +void Hud::openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr blockinv, bool playerInventory) { if (isInventoryOpen()) { closeInventory(); } @@ -445,7 +445,11 @@ void Hud::openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptrinventories->createVirtual(blockUI->getSlotsCount()); } @@ -594,25 +598,30 @@ void Hud::draw(const GfxContext& ctx){ } if (inventoryOpen) { - float caWidth = contentAccess->getSize().x; + float caWidth = inventoryView ? contentAccess->getSize().x : 0.0f; contentAccessPanel->setCoord(glm::vec2(width-caWidth, 0)); - glm::vec2 invSize = inventoryView->getSize(); + glm::vec2 invSize = inventoryView ? inventoryView->getSize() : glm::vec2(); if (blockUI == nullptr) { - inventoryView->setCoord(glm::vec2( - glm::min(width/2-invSize.x/2, width-caWidth-10-invSize.x), - height/2-invSize.y/2 - )); + if (inventoryView) { + inventoryView->setCoord(glm::vec2( + glm::min(width/2-invSize.x/2, width-caWidth-10-invSize.x), + height/2-invSize.y/2 + )); + } } else { glm::vec2 blockInvSize = blockUI->getSize(); - int interval = 5; + float invwidth = glm::max(invSize.x, blockInvSize.x); + int interval = invSize.y > 0.0 ? 5 : 0; float totalHeight = invSize.y + blockInvSize.y + interval; - inventoryView->setCoord(glm::vec2( - glm::min(width/2-invSize.x/2, width-caWidth-10-invSize.x), - height/2+totalHeight/2-invSize.y - )); + if (inventoryView) { + inventoryView->setCoord(glm::vec2( + glm::min(width/2-invwidth/2, width-caWidth-10-invwidth), + height/2+totalHeight/2-invSize.y + )); + } blockUI->setCoord(glm::vec2( - glm::min(width/2-invSize.x/2, width-caWidth-10-invSize.x), + glm::min(width/2-invwidth/2, width-caWidth-10-invwidth), height/2-totalHeight/2 )); } diff --git a/src/frontend/hud.h b/src/frontend/hud.h index 5a5b8914..02e3e2bb 100644 --- a/src/frontend/hud.h +++ b/src/frontend/hud.h @@ -110,7 +110,7 @@ public: void setPause(bool pause); void openInventory(); - void openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr blockInv); + void openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr blockInv, bool playerInventory); void closeInventory(); void openPermanent(UiDocument* doc); diff --git a/src/logic/scripting/lua/libhud.cpp b/src/logic/scripting/lua/libhud.cpp index 84c1d236..a3289968 100644 --- a/src/logic/scripting/lua/libhud.cpp +++ b/src/logic/scripting/lua/libhud.cpp @@ -40,6 +40,7 @@ int l_hud_open_block(lua_State* L) { lua::luaint x = lua_tointeger(L, 1); lua::luaint y = lua_tointeger(L, 2); lua::luaint z = lua_tointeger(L, 3); + bool playerInventory = !lua_toboolean(L, 4); voxel* vox = scripting::level->chunks->get(x, y, z); if (vox == nullptr) { @@ -55,7 +56,7 @@ int l_hud_open_block(lua_State* L) { auto id = scripting::blocks->createBlockInventory(x, y, z); scripting::hud->openInventory( - glm::ivec3(x, y, z), layout, scripting::level->inventories->get(id) + glm::ivec3(x, y, z), layout, scripting::level->inventories->get(id), playerInventory ); lua_pushinteger(L, id);