refactor EngineController.cpp
This commit is contained in:
parent
18d473b673
commit
0de4061253
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "locale.hpp"
|
#include "locale.hpp"
|
||||||
#include "UiDocument.hpp"
|
#include "UiDocument.hpp"
|
||||||
|
#include "screens/MenuScreen.hpp"
|
||||||
|
|
||||||
#include "../delegates.hpp"
|
#include "../delegates.hpp"
|
||||||
#include "../engine.hpp"
|
#include "../engine.hpp"
|
||||||
@ -72,6 +73,39 @@ gui::page_loader_func menus::create_page_loader(Engine* engine) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool menus::call(Engine* engine, runnable func) {
|
||||||
|
try {
|
||||||
|
func();
|
||||||
|
return true;
|
||||||
|
} catch (const contentpack_error& error) {
|
||||||
|
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||||
|
// could not to find or read pack
|
||||||
|
guiutil::alert(
|
||||||
|
engine->getGUI(), langs::get(L"error.pack-not-found")+L": "+
|
||||||
|
util::str2wstr_utf8(error.getPackId())
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} catch (const assetload::error& error) {
|
||||||
|
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||||
|
guiutil::alert(
|
||||||
|
engine->getGUI(), langs::get(L"Assets Load Error", L"menu")+L":\n"+
|
||||||
|
util::str2wstr_utf8(error.what())
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} catch (const parsing_error& error) {
|
||||||
|
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||||
|
guiutil::alert(engine->getGUI(), util::str2wstr_utf8(error.errorLog()));
|
||||||
|
return false;
|
||||||
|
} catch (const std::runtime_error& error) {
|
||||||
|
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||||
|
guiutil::alert(
|
||||||
|
engine->getGUI(), langs::get(L"Content Error", L"menu")+L":\n"+
|
||||||
|
util::str2wstr_utf8(error.what())
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UiDocument* menus::show(Engine* engine, const std::string& name, std::vector<dynamic::Value> args) {
|
UiDocument* menus::show(Engine* engine, const std::string& name, std::vector<dynamic::Value> args) {
|
||||||
auto menu = engine->getGUI()->getMenu();
|
auto menu = engine->getGUI()->getMenu();
|
||||||
auto file = engine->getResPaths()->find("layouts/"+name+".xml");
|
auto file = engine->getResPaths()->find("layouts/"+name+".xml");
|
||||||
|
|||||||
@ -26,6 +26,8 @@ namespace menus {
|
|||||||
);
|
);
|
||||||
|
|
||||||
void show_process_panel(Engine* engine, const std::shared_ptr<Task>& task, const std::wstring& text=L"");
|
void show_process_panel(Engine* engine, const std::shared_ptr<Task>& task, const std::wstring& text=L"");
|
||||||
|
|
||||||
|
bool call(Engine* engine, runnable func);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // FRONTEND_MENU_MENU_HPP_
|
#endif // FRONTEND_MENU_MENU_HPP_
|
||||||
|
|||||||
@ -85,37 +85,9 @@ static void show_content_missing(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool loadWorldContent(Engine* engine, const fs::path& folder) {
|
static bool loadWorldContent(Engine* engine, const fs::path& folder) {
|
||||||
// TODO: combine errors handling with newWorld
|
return menus::call(engine, [engine, folder]() {
|
||||||
try {
|
|
||||||
engine->loadWorldContent(folder);
|
engine->loadWorldContent(folder);
|
||||||
return true;
|
});
|
||||||
} catch (const contentpack_error& error) {
|
|
||||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
|
||||||
// could not to find or read pack
|
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(), langs::get(L"error.pack-not-found")+L": "+
|
|
||||||
util::str2wstr_utf8(error.getPackId())
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
} catch (const assetload::error& error) {
|
|
||||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(), langs::get(L"Assets Load Error", L"menu")+L":\n"+
|
|
||||||
util::str2wstr_utf8(error.what())
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
} catch (const parsing_error& error) {
|
|
||||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
|
||||||
guiutil::alert(engine->getGUI(), util::str2wstr_utf8(error.errorLog()));
|
|
||||||
return false;
|
|
||||||
} catch (const std::runtime_error& error) {
|
|
||||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(), langs::get(L"Content Error", L"menu")+L":\n"+
|
|
||||||
util::str2wstr_utf8(error.what())
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loadWorld(Engine* engine, const fs::path& folder) {
|
static void loadWorld(Engine* engine, const fs::path& folder) {
|
||||||
@ -188,40 +160,13 @@ void EngineController::createWorld(
|
|||||||
|
|
||||||
EnginePaths* paths = engine->getPaths();
|
EnginePaths* paths = engine->getPaths();
|
||||||
auto folder = paths->getWorldsFolder()/fs::u8path(name);
|
auto folder = paths->getWorldsFolder()/fs::u8path(name);
|
||||||
try {
|
|
||||||
|
if (!menus::call(engine, [this, paths, folder]() {
|
||||||
engine->loadContent();
|
engine->loadContent();
|
||||||
paths->setWorldFolder(folder);
|
paths->setWorldFolder(folder);
|
||||||
} catch (const contentpack_error& error) {
|
})) {
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(),
|
|
||||||
langs::get(L"Content Error", L"menu")+L":\n"+
|
|
||||||
util::str2wstr_utf8(
|
|
||||||
std::string(error.what())+
|
|
||||||
"\npack '"+error.getPackId()+"' from "+
|
|
||||||
error.getFolder().u8string()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
} catch (const assetload::error& error) {
|
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(),
|
|
||||||
langs::get(L"Assets Loading Error", L"menu")+
|
|
||||||
L":\n"+util::str2wstr_utf8(error.what())
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
} catch (const parsing_error& error) {
|
|
||||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
|
||||||
guiutil::alert(engine->getGUI(), util::str2wstr_utf8(error.errorLog()));
|
|
||||||
return;
|
|
||||||
} catch (const std::runtime_error& error) {
|
|
||||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(), langs::get(L"Content Error", L"menu")+L":\n"+
|
|
||||||
util::str2wstr_utf8(error.what())
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto level = World::create(
|
auto level = World::create(
|
||||||
name, generatorID, folder, seed,
|
name, generatorID, folder, seed,
|
||||||
engine->getSettings(),
|
engine->getSettings(),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user