Merge master branch

This commit is contained in:
A-lex-Ra
2024-02-23 18:53:53 +06:00
19 changed files with 512 additions and 254 deletions
+64 -3
View File
@@ -19,6 +19,7 @@
#include "../files/WorldConverter.h"
#include "../files/WorldFiles.h"
#include "../world/World.h"
#include "../world/WorldGenerators.h"
#include "../world/Level.h"
#include "../window/Events.h"
#include "../window/Window.h"
@@ -38,6 +39,10 @@ using glm::vec4;
namespace fs = std::filesystem;
using namespace gui;
namespace menus {
std::string generatorID;
}
inline uint64_t randU64() {
srand(time(NULL));
return rand() ^ (rand() << 8) ^
@@ -82,7 +87,6 @@ static std::shared_ptr<Button> create_button(
return btn;
}
void menus::create_version_label(Engine* engine) {
auto gui = engine->getGUI();
auto vlabel = std::make_shared<gui::Label>(
@@ -182,6 +186,57 @@ void create_languages_panel(Engine* engine) {
panel->add(guiutil::backButton(menu));
}
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 create_world_generators_panel(Engine* engine) {
auto menu = engine->getGUI()->getMenu();
auto panel = create_page(engine, "world_generators", 400, 0.5f, 1);
panel->setScrollable(true);
std::vector<std::string> 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<Button>(
util::str2wstr_utf8(fullName),
vec4(10.f),
[=](GUI*) {
menus::generatorID = id;
menu->back();
}
);*/
auto button = std::make_shared<RichButton>(vec2(80, 30));
auto idlabel = std::make_shared<Label>("["+id+"]");
idlabel->setColor(vec4(1, 1, 1, 0.5f));
idlabel->setSize(vec2(300, 25));
idlabel->setAlign(Align::right);
button->add(idlabel, vec2(80, 4));
button->add(std::make_shared<Label>(fullName), vec2(0, 8));
button->listenAction(
[=](GUI*) {
menus::generatorID = id;
menu->back();
}
);
panel->add(button);
}
panel->add(guiutil::backButton(menu));
}
void open_world(std::string name, Engine* engine) {
auto paths = engine->getPaths();
auto folder = paths->getWorldsFolder()/fs::u8path(name);
@@ -428,6 +483,8 @@ void create_new_world_panel(Engine* engine) {
auto seedInput = std::make_shared<TextBox>(seedstr, vec4(6.0f));
panel->add(seedInput);
panel->add(guiutil::gotoButton(langs::get(L"World generator", L"world"), "world_generators", engine->getGUI()->getMenu()));
panel->add(create_button( L"Create World", vec4(10), vec4(1, 20, 1, 1),
[=](GUI*) {
if (!nameInput->validate())
@@ -464,11 +521,12 @@ void create_new_world_panel(Engine* engine) {
}
Level* level = World::create(
name, folder, seed,
name, menus::generatorID, folder, seed,
engine->getSettings(),
engine->getContent(),
engine->getContentPacks()
);
menus::generatorID = WorldGenerators::getDefaultGeneratorID();
engine->setScreen(std::make_shared<LevelScreen>(engine, level));
}));
panel->add(guiutil::backButton(engine->getGUI()->getMenu()));
@@ -655,15 +713,18 @@ void create_pause_panel(Engine* engine) {
}
void menus::create_menus(Engine* engine) {
menus::generatorID = WorldGenerators::getDefaultGeneratorID();
create_new_world_panel(engine);
create_settings_panel(engine);
create_controls_panel(engine);
create_pause_panel(engine);
create_languages_panel(engine);
create_world_generators_panel(engine);
create_main_menu_panel(engine);
}
void menus::refresh_menus(Engine* engine) {
create_main_menu_panel(engine);
create_new_world_panel(engine);
}
create_world_generators_panel(engine);
}