lua: added hud.open_permanent(layoutid)
This commit is contained in:
+31
-4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user