lua: added hud.open_permanent(layoutid)
This commit is contained in:
parent
4e126e25cf
commit
e58624d3e8
@ -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;
|
||||
|
||||
@ -55,6 +55,10 @@ public:
|
||||
UiDocument* getDocument() const;
|
||||
std::shared_ptr<gui::UINode> getNode() const;
|
||||
|
||||
void setRemoved() {
|
||||
removed = true;
|
||||
}
|
||||
|
||||
bool isRemoved() const {
|
||||
return removed;
|
||||
}
|
||||
@ -90,6 +94,8 @@ class Hud {
|
||||
std::shared_ptr<gui::UINode> createDebugPanel(Engine* engine);
|
||||
std::shared_ptr<InventoryView> createContentAccess();
|
||||
std::shared_ptr<InventoryView> createHotbar();
|
||||
|
||||
void cleanup();
|
||||
public:
|
||||
Hud(Engine* engine, LevelFrontend* frontend);
|
||||
~Hud();
|
||||
@ -105,9 +111,11 @@ public:
|
||||
void openInventory();
|
||||
void openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr<Inventory> blockInv);
|
||||
void closeInventory();
|
||||
void openPermanent(UiDocument* doc);
|
||||
|
||||
void add(HudElement element);
|
||||
void remove(HudElement& element);
|
||||
void remove(std::shared_ptr<gui::UINode> node);
|
||||
};
|
||||
|
||||
#endif /* SRC_HUD_H_ */
|
||||
|
||||
@ -63,3 +63,14 @@ int l_hud_open_block(lua_State* L) {
|
||||
lua_pushstring(L, def->uiLayout.c_str());
|
||||
return 2;
|
||||
}
|
||||
|
||||
int l_hud_open_permanent(lua_State* L) {
|
||||
auto assets = scripting::engine->getAssets();
|
||||
auto name = lua_tostring(L, 1);
|
||||
auto layout = assets->getLayout(name);
|
||||
if (layout == nullptr) {
|
||||
luaL_error(L, "layout '%s' is not found", name);
|
||||
}
|
||||
scripting::hud->openPermanent(layout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -6,11 +6,13 @@
|
||||
extern int l_hud_open_inventory(lua_State* L);
|
||||
extern int l_hud_close_inventory(lua_State* L);
|
||||
extern int l_hud_open_block(lua_State* L);
|
||||
extern int l_hud_open_permanent(lua_State* L);
|
||||
|
||||
static const luaL_Reg hudlib [] = {
|
||||
{"open_inventory", l_hud_open_inventory},
|
||||
{"close_inventory", l_hud_close_inventory},
|
||||
{"open_block", l_hud_open_block},
|
||||
{"open_permanent", l_hud_open_permanent},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user