From 739282dce97f8b34b9816a444c17d728fc49ffbb Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 11 Mar 2024 13:59:21 +0300 Subject: [PATCH] lua: pack.data_file(packid, name) --- res/scripts/stdlib.lua | 5 +++++ src/engine.cpp | 1 + src/files/WorldFiles.cpp | 16 +++++++++++----- src/files/WorldFiles.h | 2 ++ src/frontend/menu/menu.cpp | 9 +++++---- src/frontend/menu/menu_pause.cpp | 1 - src/logic/scripting/lua/LuaState.h | 2 -- 7 files changed, 24 insertions(+), 12 deletions(-) diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 50218698..c547f7d3 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -100,6 +100,11 @@ function pack.is_installed(packid) return file.isfile(packid..":package.json") end +function pack.data_file(packid, name) + file.mkdirs("world:data/"..packid) + return "world:data/"..packid.."/"..name +end + vec2_mt = {} function vec2_mt.__tostring(self) return "vec2("..self[1]..", "..self[2]..")" diff --git a/src/engine.cpp b/src/engine.cpp index 785ff71f..280cea66 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -230,6 +230,7 @@ void Engine::loadWorldContent(const fs::path& folder) { contentPacks.clear(); auto packNames = ContentPack::worldPacksList(folder); ContentPack::readPacks(paths, contentPacks, packNames, folder); + paths->setWorldFolder(folder); loadContent(); } diff --git a/src/files/WorldFiles.cpp b/src/files/WorldFiles.cpp index 46d2bb38..86654f93 100644 --- a/src/files/WorldFiles.cpp +++ b/src/files/WorldFiles.cpp @@ -95,13 +95,19 @@ uint WorldRegion::getChunkDataSize(uint x, uint z) { } WorldFiles::WorldFiles(fs::path directory, const DebugSettings& settings) - : directory(directory), - generatorTestMode(settings.generatorTestMode), - doWriteLights(settings.doWriteLights) { - compressionBuffer.reset(new ubyte[CHUNK_DATA_LEN * 2]); + : directory(directory), + generatorTestMode(settings.generatorTestMode), + doWriteLights(settings.doWriteLights) +{ + compressionBuffer = std::make_unique(CHUNK_DATA_LEN * 2); } -WorldFiles::~WorldFiles(){ +WorldFiles::~WorldFiles() { +} + +void WorldFiles::createDirectories() { + fs::create_directories(directory / fs::path("data")); + fs::create_directories(directory / fs::path("content")); } WorldRegion* WorldFiles::getRegion(regionsmap& regions, int x, int z) { diff --git a/src/files/WorldFiles.h b/src/files/WorldFiles.h index 5337b73f..1f66852d 100644 --- a/src/files/WorldFiles.h +++ b/src/files/WorldFiles.h @@ -125,6 +125,8 @@ public: WorldFiles(fs::path directory, const DebugSettings& settings); ~WorldFiles(); + void createDirectories(); + void put(Chunk* chunk); void put(int x, int z, const ubyte* voxelData); diff --git a/src/frontend/menu/menu.cpp b/src/frontend/menu/menu.cpp index ccfc1a0c..757abbaa 100644 --- a/src/frontend/menu/menu.cpp +++ b/src/frontend/menu/menu.cpp @@ -181,7 +181,7 @@ void create_languages_panel(Engine* engine) { panel->add(guiutil::backButton(menu)); } -std::string translate_generator_id(std::string& id) { +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); @@ -241,12 +241,11 @@ void menus::open_world(std::string name, Engine* engine, bool confirmConvert) { ); return; } - paths->setWorldFolder(folder); auto& packs = engine->getContentPacks(); auto* content = engine->getContent(); auto& settings = engine->getSettings(); - fs::create_directories(folder); + std::shared_ptr lut (World::checkIndices(folder, content)); if (lut) { if (lut->hasMissingContent()) { @@ -265,6 +264,7 @@ void menus::open_world(std::string name, Engine* engine, bool confirmConvert) { } else { try { Level* level = World::load(folder, settings, content, packs); + level->world->wfile->createDirectories(); engine->setScreen(std::make_shared(engine, level)); } catch (const world_load_error& error) { guiutil::alert( @@ -365,7 +365,7 @@ void create_new_world_panel(Engine* engine) { panel->add(guiutil::gotoButton(langs::get(L"World generator", L"world"), "world_generators", engine->getGUI()->getMenu())); - panel->add(menus::create_button( L"Create World", glm::vec4(10), glm::vec4(1, 20, 1, 1), + panel->add(menus::create_button(L"Create World", glm::vec4(10), glm::vec4(1, 20, 1, 1), [=](GUI*) { if (!nameInput->validate()) return; @@ -406,6 +406,7 @@ void create_new_world_panel(Engine* engine) { engine->getContent(), engine->getContentPacks() ); + level->world->wfile->createDirectories(); menus::generatorID = WorldGenerators::getDefaultGeneratorID(); engine->setScreen(std::make_shared(engine, level)); })); diff --git a/src/frontend/menu/menu_pause.cpp b/src/frontend/menu/menu_pause.cpp index 9c649718..c44d899a 100644 --- a/src/frontend/menu/menu_pause.cpp +++ b/src/frontend/menu/menu_pause.cpp @@ -104,7 +104,6 @@ static void reopen_world(Engine* engine, World* world) { menus::open_world(wname, engine, true); } -// TODO: refactor void create_content_panel(Engine* engine, LevelController* controller) { auto level = controller->getLevel(); auto menu = engine->getGUI()->getMenu(); diff --git a/src/logic/scripting/lua/LuaState.h b/src/logic/scripting/lua/LuaState.h index d9a7e49d..a49d1660 100644 --- a/src/logic/scripting/lua/LuaState.h +++ b/src/logic/scripting/lua/LuaState.h @@ -20,8 +20,6 @@ namespace lua { int nextEnvironment = 1; void logError(const std::string& text); - void initEnvironment(); - void removeLibFuncs(const char* libname, const char* funcs[]); void createLibs(); public: