hud.open_permanent semantics update

This commit is contained in:
MihailRis 2024-02-18 11:42:06 +03:00
parent d9dc974685
commit 33d14be71c
2 changed files with 16 additions and 7 deletions

View File

@ -441,7 +441,16 @@ void Hud::openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr<Inven
* @param doc element layout document
*/
void Hud::openPermanent(UiDocument* doc) {
remove(doc->getRoot());
auto root = doc->getRoot();
remove(root);
auto invview = std::dynamic_pointer_cast<InventoryView>(root);
if (invview) {
auto level = frontend->getLevel();
auto player = level->player;
auto inventory = player->getInventory();
invview->bind(inventory, frontend, interaction.get());
}
add(HudElement(hud_element_mode::permanent, doc, doc->getRoot(), false));
}

View File

@ -23,12 +23,16 @@ namespace scripting {
}
int l_hud_open_inventory(lua_State* L) {
scripting::hud->openInventory();
if (!scripting::hud->isInventoryOpen()) {
scripting::hud->openInventory();
}
return 0;
}
int l_hud_close_inventory(lua_State* L) {
scripting::hud->closeInventory();
if (scripting::hud->isInventoryOpen()) {
scripting::hud->closeInventory();
}
return 0;
}
@ -77,10 +81,6 @@ UiDocument* require_layout(lua_State* L, const char* name) {
int l_hud_open_permanent(lua_State* L) {
auto layout = require_layout(L, lua_tostring(L, 1));
auto invview = std::dynamic_pointer_cast<InventoryView>(layout->getRoot());
if (invview) {
luaL_error(L, "layout must not contain 'inventory' element");
}
scripting::hud->openPermanent(layout);
return 0;
}