From c91e8b3cb7b5bc65f2ff4c5ec6e4b391302b235f Mon Sep 17 00:00:00 2001 From: Brett Date: Thu, 10 Jul 2025 12:08:09 -0400 Subject: [PATCH] work --- include/sql.h | 6 +++++- src/asset_loader.cpp | 27 +++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/sql.h b/include/sql.h index 9f416b28..875e14d4 100644 --- a/include/sql.h +++ b/include/sql.h @@ -136,7 +136,11 @@ public: return sqlite3_bind_null(statement, col); } else if constexpr (std::is_same_v || std::is_same_v) { - return sqlite3_bind_text(statement, col, type.data(), type.size(), nullptr); + auto str_copy = new char[type.size()]; + std::memcpy(str_copy, type.data(), type.size()); + return sqlite3_bind_text(statement, col, str_copy, type.size(), [](void* ptr) { + delete[] static_cast(ptr); + }); } else if constexpr (std::is_same_v || std::is_same_v) { return sqlite3_bind_text(statement, col, type, -1, nullptr); diff --git a/src/asset_loader.cpp b/src/asset_loader.cpp index 47dfb53e..754a1c74 100644 --- a/src/asset_loader.cpp +++ b/src/asset_loader.cpp @@ -21,13 +21,14 @@ #include #include -asset_loader_t::asset_loader_t(std::string folder, std::string name): db{name + ".assets"}, folder{std::move(folder)}, name{std::move(name)} +asset_loader_t::asset_loader_t(std::string folder, std::string name): db{name + ".assets"}, folder{std::move(folder)}, name{std::move(name)} { if (!std::filesystem::exists(folder)) throw std::runtime_error("Folder does not exist!"); - if (!std::filesystem::exists(folder + "minecraft/models/block/")) - throw std::runtime_error("Required Minecraft folder does not exist!"); + /* + * Tables + */ auto texture_table = db.builder().create_table("textures"); texture_table.with_column("name").primary_key(); texture_table.with_column("width").not_null(); @@ -35,9 +36,27 @@ asset_loader_t::asset_loader_t(std::string folder, std::string name): db{name texture_table.with_column("data").not_null(); texture_table.build().execute(); + std::optional model_folder; + std::optional texture_folder; + auto block_model_folder = folder + "minecraft/models/block/"; for (const auto& entry : std::filesystem::directory_iterator(block_model_folder)) { - if (entry.path().extension() != ".json") + if (!entry.is_directory()) continue; + if (entry.path().string().find("models") != std::string::npos) + { + model_folder = entry.path(); + } + if (entry.path().string().find("textures") != std::string::npos) + { + texture_folder = entry.path(); + } + } + + if (!model_folder) + throw std::runtime_error("Could not find model folder!"); + if (!texture_folder) + throw std::runtime_error("Could not find texture folder!"); + }