#ifndef FRONTEND_MENU_MENU_CREATE_WORLD_H_ #define FRONTEND_MENU_MENU_CREATE_WORLD_H_ #include "menu.h" #include "menu_commons.h" #include "../gui/controls.h" #include "../gui/containers.h" #include "../gui/gui_util.h" #include "../locale/langs.h" #include "../screens.h" #include "../../world/WorldGenerators.h" #include "../../files/WorldFiles.h" #include "../../world/World.h" #include "../../world/Level.h" #include "../../util/stringutil.h" #include "../../engine.h" #include using namespace gui; namespace menus { std::string generatorID; } 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(std::wstring seedstr) { if (util::is_integer(seedstr)) { try { return std::stoull(seedstr); } catch (const std::out_of_range& err) { std::hash hash; return hash(seedstr); } } else { std::hash hash; return hash(seedstr); } } static std::string translate_generator_id(std::string& id) { int delimiterPosition = id.find(":"); std::string pack = id.substr(0, delimiterPosition); std::string generator = id.substr(delimiterPosition + 1); if(pack == "core") { return util::wstr2str_utf8(langs::get(util::str2wstr_utf8(generator), L"world.generators")); } else { return id; } } void menus::create_world_generators_panel(Engine* engine) { auto menu = engine->getGUI()->getMenu(); auto panel = menus::create_page(engine, "world_generators", 400, 0.5f, 1); panel->setScrollable(true); std::vector generatorsIDs = WorldGenerators::getGeneratorsIDs(); std::sort(generatorsIDs.begin(), generatorsIDs.end()); for (std::string& id : generatorsIDs) { const std::string& fullName = translate_generator_id(id); auto button = std::make_shared(glm::vec2(80, 30)); auto idlabel = std::make_shared