languages menu moved to xml + minor refactor
This commit is contained in:
parent
f525d82ca8
commit
657b09da9e
3
res/layouts/pages/languages.xml
Normal file
3
res/layouts/pages/languages.xml
Normal file
@ -0,0 +1,3 @@
|
||||
<panel size='400' color='#00000080' padding='8'>
|
||||
<!-- content is generated in script -->
|
||||
</panel>
|
||||
19
res/layouts/pages/languages.xml.lua
Normal file
19
res/layouts/pages/languages.xml.lua
Normal file
@ -0,0 +1,19 @@
|
||||
function on_open()
|
||||
local locales = gui.get_locales_info()
|
||||
local invlocales = {}
|
||||
local names = {}
|
||||
for k, v in pairs(locales) do
|
||||
table.insert(names, v.name)
|
||||
invlocales[v.name] = k
|
||||
end
|
||||
table.sort(names)
|
||||
|
||||
local panel = document.root
|
||||
for _,k in ipairs(names) do
|
||||
panel:add(string.format(
|
||||
"<button onclick=%q padding='10'>%s</button>",
|
||||
string.format("gui.set_locale(%q) menu:back()", invlocales[k]), k
|
||||
))
|
||||
end
|
||||
panel:add("<button padding='10' onclick='menu:back()'>@Back</button>")
|
||||
end
|
||||
@ -91,7 +91,7 @@ assetload::postfunc assetload::atlas(
|
||||
) {
|
||||
AtlasBuilder builder;
|
||||
for (const auto& file : paths->listdir(directory)) {
|
||||
if (fs::is_directory(file))
|
||||
if (!imageio::is_read_supported(file.extension()))
|
||||
continue;
|
||||
if (!appendAtlas(builder, file))
|
||||
continue;
|
||||
@ -141,7 +141,7 @@ assetload::postfunc assetload::layout(
|
||||
) {
|
||||
return [=](auto assets) {
|
||||
try {
|
||||
auto cfg = dynamic_cast<LayoutCfg*>(config.get());
|
||||
auto cfg = std::dynamic_pointer_cast<LayoutCfg>(config);
|
||||
auto document = UiDocument::read(cfg->env, name, file);
|
||||
assets->store(document.release(), name);
|
||||
} catch (const parsing_error& err) {
|
||||
@ -158,7 +158,7 @@ assetload::postfunc assetload::sound(
|
||||
const std::string name,
|
||||
std::shared_ptr<AssetCfg> config
|
||||
) {
|
||||
auto cfg = dynamic_cast<SoundCfg*>(config.get());
|
||||
auto cfg = std::dynamic_pointer_cast<SoundCfg>(config);
|
||||
bool keepPCM = cfg ? cfg->keepPCM : false;
|
||||
|
||||
std::string extension = ".ogg";
|
||||
|
||||
@ -78,7 +78,7 @@ std::shared_ptr<UINode> create_debug_panel(
|
||||
L" "+stream.str();
|
||||
}));
|
||||
panel->add(create_label([=](){
|
||||
return L"seed: "+std::to_wstring(level->world->getSeed());
|
||||
return L"seed: "+std::to_wstring(level->getWorld()->getSeed());
|
||||
}));
|
||||
|
||||
for (int ax = 0; ax < 3; ax++) {
|
||||
@ -118,7 +118,7 @@ std::shared_ptr<UINode> create_debug_panel(
|
||||
}
|
||||
panel->add(create_label([=](){
|
||||
int hour, minute, second;
|
||||
timeutil::from_value(level->world->daytime, hour, minute, second);
|
||||
timeutil::from_value(level->getWorld()->daytime, hour, minute, second);
|
||||
|
||||
std::wstring timeString =
|
||||
util::lfill(std::to_wstring(hour), 2, L'0') + L":" +
|
||||
@ -127,8 +127,8 @@ std::shared_ptr<UINode> create_debug_panel(
|
||||
}));
|
||||
{
|
||||
auto bar = std::make_shared<TrackBar>(0.0f, 1.0f, 1.0f, 0.005f, 8);
|
||||
bar->setSupplier([=]() {return level->world->daytime;});
|
||||
bar->setConsumer([=](double val) {level->world->daytime = val;});
|
||||
bar->setSupplier([=]() {return level->getWorld()->daytime;});
|
||||
bar->setConsumer([=](double val) {level->getWorld()->daytime = val;});
|
||||
panel->add(bar);
|
||||
}
|
||||
{
|
||||
|
||||
@ -168,33 +168,6 @@ void show_convert_request(
|
||||
}, L"", langs::get(L"Cancel"));
|
||||
}
|
||||
|
||||
void create_languages_panel(Engine* engine) {
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
auto panel = menus::create_page(engine, "languages", 400, 0.5f, 1);
|
||||
panel->setScrollable(true);
|
||||
|
||||
std::vector<std::string> locales;
|
||||
for (auto& entry : langs::locales_info) {
|
||||
locales.push_back(entry.first);
|
||||
}
|
||||
std::sort(locales.begin(), locales.end());
|
||||
for (std::string& name : locales) {
|
||||
auto& locale = langs::locales_info.at(name);
|
||||
std::string& fullName = locale.name;
|
||||
|
||||
auto button = std::make_shared<Button>(
|
||||
util::str2wstr_utf8(fullName),
|
||||
glm::vec4(10.f),
|
||||
[=](GUI*) {
|
||||
engine->setLanguage(name);
|
||||
menu->back();
|
||||
}
|
||||
);
|
||||
panel->add(button);
|
||||
}
|
||||
panel->add(guiutil::backButton(menu));
|
||||
}
|
||||
|
||||
void menus::open_world(std::string name, Engine* engine, bool confirmConvert) {
|
||||
auto paths = engine->getPaths();
|
||||
auto folder = paths->getWorldsFolder()/fs::u8path(name);
|
||||
@ -239,7 +212,7 @@ void menus::open_world(std::string name, Engine* engine, bool confirmConvert) {
|
||||
} else {
|
||||
try {
|
||||
Level* level = World::load(folder, settings, content, packs);
|
||||
level->world->wfile->createDirectories();
|
||||
level->getWorld()->wfile->createDirectories();
|
||||
engine->setScreen(std::make_shared<LevelScreen>(engine, level));
|
||||
} catch (const world_load_error& error) {
|
||||
guiutil::alert(
|
||||
@ -277,7 +250,7 @@ void menus::create_menus(Engine* engine) {
|
||||
menus::generatorID = WorldGenerators::getDefaultGeneratorID();
|
||||
create_new_world_panel(engine);
|
||||
create_settings_panel(engine);
|
||||
create_languages_panel(engine);
|
||||
add_page_loader(engine, "languages");
|
||||
create_world_generators_panel(engine);
|
||||
add_page_loader(engine, "main");
|
||||
load_page(engine, "404");
|
||||
|
||||
@ -174,7 +174,7 @@ void LevelScreen::update(float delta) {
|
||||
}
|
||||
|
||||
if (!hud->isPause()) {
|
||||
controller->getLevel()->world->updateTimers(delta);
|
||||
controller->getLevel()->getWorld()->updateTimers(delta);
|
||||
animator->update(delta);
|
||||
}
|
||||
controller->update(delta, !inputLocked, hud->isPause());
|
||||
|
||||
@ -159,7 +159,7 @@ void WorldRenderer::renderLevel(
|
||||
shader->uniform1f("u_gamma", settings.graphics.gamma);
|
||||
shader->uniform1f("u_fogFactor", fogFactor);
|
||||
shader->uniform1f("u_fogCurve", settings.graphics.fogCurve);
|
||||
shader->uniform1f("u_dayTime", level->world->daytime);
|
||||
shader->uniform1f("u_dayTime", level->getWorld()->daytime);
|
||||
shader->uniform3f("u_cameraPos", camera->position);
|
||||
shader->uniform1i("u_cubemap", 1);
|
||||
|
||||
@ -267,7 +267,7 @@ void WorldRenderer::renderDebugLines(
|
||||
|
||||
void WorldRenderer::draw(const GfxContext& pctx, Camera* camera, bool hudVisible){
|
||||
EngineSettings& settings = engine->getSettings();
|
||||
skybox->refresh(pctx, level->world->daytime, 1.0f+fog*2.0f, 4);
|
||||
skybox->refresh(pctx, level->getWorld()->daytime, 1.0f+fog*2.0f, 4);
|
||||
|
||||
Assets* assets = engine->getAssets();
|
||||
Shader* linesShader = assets->getShader("lines");
|
||||
@ -303,7 +303,7 @@ void WorldRenderer::draw(const GfxContext& pctx, Camera* camera, bool hudVisible
|
||||
auto screenShader = assets->getShader("screen");
|
||||
screenShader->use();
|
||||
screenShader->uniform1f("u_timer", Window::time());
|
||||
screenShader->uniform1f("u_dayTime", level->world->daytime);
|
||||
screenShader->uniform1f("u_dayTime", level->getWorld()->daytime);
|
||||
postProcessing->render(pctx, screenShader);
|
||||
}
|
||||
|
||||
|
||||
@ -118,7 +118,7 @@ void ChunksController::createChunk(int x, int z) {
|
||||
if (!chunk->isLoaded()) {
|
||||
generator->generate(
|
||||
chunk->voxels, x, z,
|
||||
level->world->getSeed()
|
||||
level->getWorld()->getSeed()
|
||||
);
|
||||
chunk->setUnsaved(true);
|
||||
}
|
||||
|
||||
@ -362,6 +362,32 @@ static int l_gui_reindex(lua_State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief gui.get_locales_info() -> table of tables
|
||||
static int l_gui_get_locales_info(lua_State* L) {
|
||||
auto& locales = langs::locales_info;
|
||||
lua_createtable(L, 0, locales.size());
|
||||
for (auto& entry : locales) {
|
||||
lua_createtable(L, 0, 1);
|
||||
lua_pushstring(L, entry.second.name.c_str());
|
||||
lua_setfield(L, -2, "name");
|
||||
lua_setfield(L, -2, entry.first.c_str());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/// @brief gui.get_locale() -> string
|
||||
static int l_gui_get_locale(lua_State* L) {
|
||||
lua_pushstring(L, langs::current->getId().c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/// @brief gui.set_locale(locale: string) -> nil
|
||||
static int l_gui_set_locale(lua_State* L) {
|
||||
auto locale = lua_tostring(L, 1);
|
||||
scripting::engine->setLanguage(locale);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg guilib [] = {
|
||||
{"get_viewport", lua_wrap_errors<l_gui_getviewport>},
|
||||
{"getattr", lua_wrap_errors<l_gui_getattr>},
|
||||
@ -369,5 +395,8 @@ const luaL_Reg guilib [] = {
|
||||
{"get_env", lua_wrap_errors<l_gui_get_env>},
|
||||
{"str", lua_wrap_errors<l_gui_str>},
|
||||
{"reindex", lua_wrap_errors<l_gui_reindex>},
|
||||
{"get_locale", lua_wrap_errors<l_gui_get_locale>},
|
||||
{"set_locale", lua_wrap_errors<l_gui_set_locale>},
|
||||
{"get_locales_info", lua_wrap_errors<l_gui_get_locales_info>},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@ -7,23 +7,23 @@
|
||||
#include <cmath>
|
||||
|
||||
static int l_world_get_total_time(lua_State* L) {
|
||||
lua_pushnumber(L, scripting::level->world->totalTime);
|
||||
lua_pushnumber(L, scripting::level->getWorld()->totalTime);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_world_get_day_time(lua_State* L) {
|
||||
lua_pushnumber(L, scripting::level->world->daytime);
|
||||
lua_pushnumber(L, scripting::level->getWorld()->daytime);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_world_set_day_time(lua_State* L) {
|
||||
double value = lua_tonumber(L, 1);
|
||||
scripting::level->world->daytime = fmod(value, 1.0);
|
||||
scripting::level->getWorld()->daytime = fmod(value, 1.0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_world_get_seed(lua_State* L) {
|
||||
lua_pushinteger(L, scripting::level->world->getSeed());
|
||||
lua_pushinteger(L, scripting::level->getWorld()->getSeed());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
#ifndef MATHS_UVREGION_H_
|
||||
#define MATHS_UVREGION_H_
|
||||
|
||||
class UVRegion {
|
||||
public:
|
||||
struct UVRegion {
|
||||
float u1;
|
||||
float v1;
|
||||
float u2;
|
||||
|
||||
@ -24,8 +24,8 @@ class ChunksStorage;
|
||||
|
||||
/// @brief A level, contains chunks and objects
|
||||
class Level {
|
||||
public:
|
||||
std::unique_ptr<World> world;
|
||||
public:
|
||||
const Content* const content;
|
||||
std::vector<std::shared_ptr<Object>> objects;
|
||||
std::unique_ptr<Chunks> chunks;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user