lua: added hud.open_permanent(layoutid)

This commit is contained in:
MihailRis
2024-02-17 02:57:42 +03:00
parent 4e126e25cf
commit e58624d3e8
4 changed files with 52 additions and 4 deletions
+31 -4
View File
@@ -319,6 +319,16 @@ void Hud::drawDebug(int fps){
fpsMax = max(fps, fpsMax);
}
/**
* Remove all elements marked as removed
*/
void Hud::cleanup() {
auto it = std::remove_if(elements.begin(), elements.end(), [](const HudElement& e) {
return e.isRemoved();
});
elements.erase(it, elements.end());
}
void Hud::update(bool visible) {
auto level = frontend->getLevel();
auto player = level->player;
@@ -383,10 +393,7 @@ void Hud::update(bool visible) {
remove(element);
}
}
auto it = std::remove_if(elements.begin(), elements.end(), [](const HudElement& e) {
return e.isRemoved();
});
elements.erase(it, elements.end());
cleanup();
}
/**
@@ -429,6 +436,15 @@ void Hud::openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr<Inven
add(HudElement(hud_element_mode::inventory_bound, doc, blockUI, false));
}
/**
* Add element as permanent overlay
* @param doc element layout document
*/
void Hud::openPermanent(UiDocument* doc) {
remove(doc->getRoot());
add(HudElement(hud_element_mode::permanent, doc, doc->getRoot(), false));
}
/**
* Hide inventory and turn off inventory mode
*/
@@ -477,6 +493,17 @@ void Hud::remove(HudElement& element) {
gui->remove(element.getNode());
}
// todo: refactor this garbage
void Hud::remove(std::shared_ptr<UINode> node) {
for (auto& element : elements) {
if (element.getNode() == node) {
element.setRemoved();
remove(element);
}
}
cleanup();
}
void Hud::draw(const GfxContext& ctx){
auto level = frontend->getLevel();
auto player = level->player;