#ifndef OPENMW_LUAUI_ELEMENT #define OPENMW_LUAUI_ELEMENT #include "widget.hpp" namespace LuaUi { struct Element { static std::shared_ptr makeGameElement(sol::table layout); static std::shared_ptr makeMenuElement(sol::table layout); template static void forEachGameElement(Callback callback) { for (auto& [e, _] : sGameElements) callback(e); } template static void forEachMenuElement(Callback callback) { for (auto& [e, _] : sMenuElements) callback(e); } WidgetExtension* mRoot; sol::object mLayout; std::string mLayer; bool mUpdate; bool mDestroy; void create(); void update(); void destroy(); friend void clearGameInterface(); friend void clearMenuInterface(); private: Element(sol::table layout); sol::table layout() { return LuaUtil::cast(mLayout); } static std::map> sGameElements; static std::map> sMenuElements; }; } #endif // !OPENMW_LUAUI_ELEMENT