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);
|
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) {
|
void Hud::update(bool visible) {
|
||||||
auto level = frontend->getLevel();
|
auto level = frontend->getLevel();
|
||||||
auto player = level->player;
|
auto player = level->player;
|
||||||
@ -383,10 +393,7 @@ void Hud::update(bool visible) {
|
|||||||
remove(element);
|
remove(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto it = std::remove_if(elements.begin(), elements.end(), [](const HudElement& e) {
|
cleanup();
|
||||||
return e.isRemoved();
|
|
||||||
});
|
|
||||||
elements.erase(it, elements.end());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -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(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
|
* Hide inventory and turn off inventory mode
|
||||||
*/
|
*/
|
||||||
@ -477,6 +493,17 @@ void Hud::remove(HudElement& element) {
|
|||||||
gui->remove(element.getNode());
|
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){
|
void Hud::draw(const GfxContext& ctx){
|
||||||
auto level = frontend->getLevel();
|
auto level = frontend->getLevel();
|
||||||
auto player = level->player;
|
auto player = level->player;
|
||||||
|
|||||||
@ -55,6 +55,10 @@ public:
|
|||||||
UiDocument* getDocument() const;
|
UiDocument* getDocument() const;
|
||||||
std::shared_ptr<gui::UINode> getNode() const;
|
std::shared_ptr<gui::UINode> getNode() const;
|
||||||
|
|
||||||
|
void setRemoved() {
|
||||||
|
removed = true;
|
||||||
|
}
|
||||||
|
|
||||||
bool isRemoved() const {
|
bool isRemoved() const {
|
||||||
return removed;
|
return removed;
|
||||||
}
|
}
|
||||||
@ -90,6 +94,8 @@ class Hud {
|
|||||||
std::shared_ptr<gui::UINode> createDebugPanel(Engine* engine);
|
std::shared_ptr<gui::UINode> createDebugPanel(Engine* engine);
|
||||||
std::shared_ptr<InventoryView> createContentAccess();
|
std::shared_ptr<InventoryView> createContentAccess();
|
||||||
std::shared_ptr<InventoryView> createHotbar();
|
std::shared_ptr<InventoryView> createHotbar();
|
||||||
|
|
||||||
|
void cleanup();
|
||||||
public:
|
public:
|
||||||
Hud(Engine* engine, LevelFrontend* frontend);
|
Hud(Engine* engine, LevelFrontend* frontend);
|
||||||
~Hud();
|
~Hud();
|
||||||
@ -105,9 +111,11 @@ public:
|
|||||||
void openInventory();
|
void openInventory();
|
||||||
void openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr<Inventory> blockInv);
|
void openInventory(glm::ivec3 block, UiDocument* doc, std::shared_ptr<Inventory> blockInv);
|
||||||
void closeInventory();
|
void closeInventory();
|
||||||
|
void openPermanent(UiDocument* doc);
|
||||||
|
|
||||||
void add(HudElement element);
|
void add(HudElement element);
|
||||||
void remove(HudElement& element);
|
void remove(HudElement& element);
|
||||||
|
void remove(std::shared_ptr<gui::UINode> node);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SRC_HUD_H_ */
|
#endif /* SRC_HUD_H_ */
|
||||||
|
|||||||
@ -63,3 +63,14 @@ int l_hud_open_block(lua_State* L) {
|
|||||||
lua_pushstring(L, def->uiLayout.c_str());
|
lua_pushstring(L, def->uiLayout.c_str());
|
||||||
return 2;
|
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_open_inventory(lua_State* L);
|
||||||
extern int l_hud_close_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_block(lua_State* L);
|
||||||
|
extern int l_hud_open_permanent(lua_State* L);
|
||||||
|
|
||||||
static const luaL_Reg hudlib [] = {
|
static const luaL_Reg hudlib [] = {
|
||||||
{"open_inventory", l_hud_open_inventory},
|
{"open_inventory", l_hud_open_inventory},
|
||||||
{"close_inventory", l_hud_close_inventory},
|
{"close_inventory", l_hud_close_inventory},
|
||||||
{"open_block", l_hud_open_block},
|
{"open_block", l_hud_open_block},
|
||||||
|
{"open_permanent", l_hud_open_permanent},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user