diff --git a/res/layouts/pages/languages.xml b/res/layouts/pages/languages.xml
new file mode 100644
index 00000000..38722bed
--- /dev/null
+++ b/res/layouts/pages/languages.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/res/layouts/pages/languages.xml.lua b/res/layouts/pages/languages.xml.lua
new file mode 100644
index 00000000..be6c5905
--- /dev/null
+++ b/res/layouts/pages/languages.xml.lua
@@ -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(
+ "",
+ string.format("gui.set_locale(%q) menu:back()", invlocales[k]), k
+ ))
+ end
+ panel:add("")
+end
diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp
index 0281e504..57679410 100644
--- a/src/assets/assetload_funcs.cpp
+++ b/src/assets/assetload_funcs.cpp
@@ -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(config.get());
+ auto cfg = std::dynamic_pointer_cast(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 config
) {
- auto cfg = dynamic_cast(config.get());
+ auto cfg = std::dynamic_pointer_cast(config);
bool keepPCM = cfg ? cfg->keepPCM : false;
std::string extension = ".ogg";
diff --git a/src/frontend/debug_panel.cpp b/src/frontend/debug_panel.cpp
index 05aa76e9..21ff03ad 100644
--- a/src/frontend/debug_panel.cpp
+++ b/src/frontend/debug_panel.cpp
@@ -78,7 +78,7 @@ std::shared_ptr 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 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 create_debug_panel(
}));
{
auto bar = std::make_shared(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);
}
{
diff --git a/src/frontend/menu/menu.cpp b/src/frontend/menu/menu.cpp
index 2fd0eec0..d06c677e 100644
--- a/src/frontend/menu/menu.cpp
+++ b/src/frontend/menu/menu.cpp
@@ -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 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