move menu pages loader to Lua & add gui.load_document, file.ext(), file.prefix() & add core:gui_util module
This commit is contained in:
@@ -787,6 +787,23 @@ static int l_gui_alert(lua::State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_gui_load_document(lua::State* L) {
|
||||
auto filename = lua::require_string(L, 1);
|
||||
auto alias = lua::require_string(L, 2);
|
||||
auto args = lua::tovalue(L, 3);
|
||||
|
||||
auto documentPtr = UiDocument::read(
|
||||
scripting::get_root_environment(),
|
||||
alias,
|
||||
engine->getPaths().resolve(fs::u8path(filename)),
|
||||
filename
|
||||
);
|
||||
auto document = documentPtr.get();
|
||||
engine->getAssets()->store(std::move(documentPtr), alias);
|
||||
scripting::on_ui_open(document, {args});
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg guilib[] = {
|
||||
{"get_viewport", lua::wrap<l_gui_getviewport>},
|
||||
{"getattr", lua::wrap<l_gui_getattr>},
|
||||
@@ -798,6 +815,7 @@ const luaL_Reg guilib[] = {
|
||||
{"escape_markup", lua::wrap<l_gui_escape_markup>},
|
||||
{"confirm", lua::wrap<l_gui_confirm>},
|
||||
{"alert", lua::wrap<l_gui_alert>},
|
||||
{"load_document", lua::wrap<l_gui_load_document>},
|
||||
{"__reindex", lua::wrap<l_gui_reindex>},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "engine/Engine.hpp"
|
||||
#include "files/files.hpp"
|
||||
#include "frontend/hud.hpp"
|
||||
#include "frontend/UiDocument.hpp"
|
||||
#include "graphics/render/WorldRenderer.hpp"
|
||||
#include "objects/Player.hpp"
|
||||
#include "lua/libs/api_lua.hpp"
|
||||
@@ -93,3 +94,15 @@ void scripting::load_hud_script(
|
||||
register_event(env, "on_hud_render", packid + ":.hudrender");
|
||||
register_event(env, "on_hud_close", packid + ":.hudclose");
|
||||
}
|
||||
|
||||
gui::PageLoaderFunc scripting::create_page_loader() {
|
||||
auto L = lua::get_main_state();
|
||||
if (lua::getglobal(L, "__vc_page_loader")) {
|
||||
auto func = lua::create_lambda(L);
|
||||
return [func](const std::string& name) -> std::shared_ptr<gui::UINode> {
|
||||
auto docname = func({name}).asString();
|
||||
return engine->getAssets()->require<UiDocument>(docname).getRoot();
|
||||
};
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <filesystem>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "typedefs.hpp"
|
||||
@@ -10,6 +12,11 @@ namespace fs = std::filesystem;
|
||||
class Hud;
|
||||
class WorldRenderer;
|
||||
|
||||
namespace gui {
|
||||
class UINode;
|
||||
using PageLoaderFunc = std::function<std::shared_ptr<UINode>(const std::string&)>;
|
||||
}
|
||||
|
||||
namespace scripting {
|
||||
extern Hud *hud;
|
||||
extern WorldRenderer* renderer;
|
||||
@@ -29,4 +36,6 @@ namespace scripting {
|
||||
const fs::path& file,
|
||||
const std::string& fileName
|
||||
);
|
||||
|
||||
gui::PageLoaderFunc create_page_loader();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user