minor refactor
This commit is contained in:
parent
4f299be681
commit
01f41715d7
@ -1,90 +0,0 @@
|
|||||||
#ifndef FRONTEND_MENU_MENU_CREATE_WORLD_H_
|
|
||||||
#define FRONTEND_MENU_MENU_CREATE_WORLD_H_
|
|
||||||
|
|
||||||
#include "../../engine.h"
|
|
||||||
#include "../../files/WorldFiles.h"
|
|
||||||
#include "../../content/PacksManager.h"
|
|
||||||
#include "../../graphics/ui/elements/containers.h"
|
|
||||||
#include "../../graphics/ui/elements/controls.h"
|
|
||||||
#include "../../graphics/ui/gui_util.h"
|
|
||||||
#include "../../util/stringutil.h"
|
|
||||||
#include "../../world/Level.h"
|
|
||||||
#include "../../world/World.h"
|
|
||||||
#include "../../world/WorldGenerators.h"
|
|
||||||
#include "../locale/langs.h"
|
|
||||||
#include "../screens.h"
|
|
||||||
#include "menu_commons.h"
|
|
||||||
#include "menu.h"
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace gui;
|
|
||||||
|
|
||||||
inline uint64_t randU64() {
|
|
||||||
srand(time(NULL));
|
|
||||||
return rand() ^ (rand() << 8) ^
|
|
||||||
(rand() << 16) ^ (rand() << 24) ^
|
|
||||||
((uint64_t)rand() << 32) ^
|
|
||||||
((uint64_t)rand() << 40) ^
|
|
||||||
((uint64_t)rand() << 56);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline uint64_t str2seed(const std::string& seedstr) {
|
|
||||||
if (util::is_integer(seedstr)) {
|
|
||||||
try {
|
|
||||||
return std::stoull(seedstr);
|
|
||||||
} catch (const std::out_of_range& err) {
|
|
||||||
std::hash<std::string> hash;
|
|
||||||
return hash(seedstr);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
std::hash<std::string> hash;
|
|
||||||
return hash(seedstr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void menus::create_world(
|
|
||||||
Engine* engine,
|
|
||||||
const std::string& name,
|
|
||||||
const std::string& seedstr,
|
|
||||||
const std::string& generatorID
|
|
||||||
) {
|
|
||||||
uint64_t seed = str2seed(seedstr);
|
|
||||||
|
|
||||||
EnginePaths* paths = engine->getPaths();
|
|
||||||
auto folder = paths->getWorldsFolder()/fs::u8path(name);
|
|
||||||
try {
|
|
||||||
engine->loadAllPacks();
|
|
||||||
engine->loadContent();
|
|
||||||
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 std::runtime_error& error) {
|
|
||||||
guiutil::alert(
|
|
||||||
engine->getGUI(),
|
|
||||||
langs::get(L"Content Error", L"menu")+
|
|
||||||
L": "+util::str2wstr_utf8(error.what())
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Level* level = World::create(
|
|
||||||
name, generatorID, folder, seed,
|
|
||||||
engine->getSettings(),
|
|
||||||
engine->getContent(),
|
|
||||||
engine->getContentPacks()
|
|
||||||
);
|
|
||||||
level->getWorld()->wfile->createDirectories();
|
|
||||||
engine->setScreen(std::make_shared<LevelScreen>(engine, level));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // FRONTEND_MENU_MENU_CREATE_WORLD_H_
|
|
||||||
@ -1,12 +1,12 @@
|
|||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "menu_commons.h"
|
#include "menu_commons.h"
|
||||||
|
|
||||||
#include "../../coders/imageio.h"
|
// TODO: move functions to EngineController
|
||||||
|
|
||||||
#include "../../content/PacksManager.h"
|
#include "../../content/PacksManager.h"
|
||||||
#include "../../content/ContentLUT.h"
|
#include "../../content/ContentLUT.h"
|
||||||
#include "../../engine.h"
|
#include "../../engine.h"
|
||||||
#include "../../files/WorldFiles.h"
|
#include "../../files/WorldFiles.h"
|
||||||
#include "../../graphics/core/Texture.h"
|
|
||||||
#include "../../graphics/ui/gui_util.h"
|
#include "../../graphics/ui/gui_util.h"
|
||||||
#include "../../logic/LevelController.h"
|
#include "../../logic/LevelController.h"
|
||||||
#include "../../util/stringutil.h"
|
#include "../../util/stringutil.h"
|
||||||
@ -19,6 +19,73 @@
|
|||||||
|
|
||||||
using namespace gui;
|
using namespace gui;
|
||||||
|
|
||||||
|
inline uint64_t randU64() {
|
||||||
|
srand(time(NULL));
|
||||||
|
return rand() ^ (rand() << 8) ^
|
||||||
|
(rand() << 16) ^ (rand() << 24) ^
|
||||||
|
((uint64_t)rand() << 32) ^
|
||||||
|
((uint64_t)rand() << 40) ^
|
||||||
|
((uint64_t)rand() << 56);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint64_t str2seed(const std::string& seedstr) {
|
||||||
|
if (util::is_integer(seedstr)) {
|
||||||
|
try {
|
||||||
|
return std::stoull(seedstr);
|
||||||
|
} catch (const std::out_of_range& err) {
|
||||||
|
std::hash<std::string> hash;
|
||||||
|
return hash(seedstr);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
std::hash<std::string> hash;
|
||||||
|
return hash(seedstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menus::create_world(
|
||||||
|
Engine* engine,
|
||||||
|
const std::string& name,
|
||||||
|
const std::string& seedstr,
|
||||||
|
const std::string& generatorID
|
||||||
|
) {
|
||||||
|
uint64_t seed = str2seed(seedstr);
|
||||||
|
|
||||||
|
EnginePaths* paths = engine->getPaths();
|
||||||
|
auto folder = paths->getWorldsFolder()/fs::u8path(name);
|
||||||
|
try {
|
||||||
|
engine->loadAllPacks();
|
||||||
|
engine->loadContent();
|
||||||
|
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 std::runtime_error& error) {
|
||||||
|
guiutil::alert(
|
||||||
|
engine->getGUI(),
|
||||||
|
langs::get(L"Content Error", L"menu")+
|
||||||
|
L": "+util::str2wstr_utf8(error.what())
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Level* level = World::create(
|
||||||
|
name, generatorID, folder, seed,
|
||||||
|
engine->getSettings(),
|
||||||
|
engine->getContent(),
|
||||||
|
engine->getContentPacks()
|
||||||
|
);
|
||||||
|
level->getWorld()->wfile->createDirectories();
|
||||||
|
engine->setScreen(std::make_shared<LevelScreen>(engine, level));
|
||||||
|
}
|
||||||
|
|
||||||
static void reopen_world(Engine* engine, World* world) {
|
static void reopen_world(Engine* engine, World* world) {
|
||||||
std::string wname = world->wfile->getFolder().filename().u8string();
|
std::string wname = world->wfile->getFolder().filename().u8string();
|
||||||
engine->setScreen(nullptr);
|
engine->setScreen(nullptr);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user