diff --git a/CMakeLists.txt b/CMakeLists.txt index eb3d66c..f06a722 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,12 @@ set(SANDBOX_SOURCES add_executable(sandbox ${SANDBOX_SOURCES}) target_link_libraries(sandbox PRIVATE voxel-engine) +add_custom_command(TARGET sandbox POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_SOURCE_DIR}/sandbox/assets/scripts + ${CMAKE_BINARY_DIR}/assets/scripts +) + # Enable precompiled headers - specify C++ explicitly target_precompile_headers(voxel-engine PRIVATE diff --git a/sandbox/assets/scripts/init.lua b/sandbox/assets/scripts/init.lua new file mode 100644 index 0000000..e4c5063 --- /dev/null +++ b/sandbox/assets/scripts/init.lua @@ -0,0 +1,8 @@ +-- Initialize Lua environment +if not engine then + error("Engine API not available") +end + +-- Set default terrain parameters +engine.setTerrainHeight(10.0) +engine.log("Lua environment initialized") \ No newline at end of file diff --git a/sandbox/src/SandboxApp.cpp b/sandbox/src/SandboxApp.cpp index 07fb0ee..016b7b1 100644 --- a/sandbox/src/SandboxApp.cpp +++ b/sandbox/src/SandboxApp.cpp @@ -1,5 +1,7 @@ #include "SandboxApp.h" #include +#include +#include SandboxApp::SandboxApp() : Application() { // Check script system first @@ -27,24 +29,23 @@ SandboxApp::SandboxApp() : Application() { }); } - // Initialize with default script + // Initialize with init.lua script try { - const std::string initScript = R"( - -- Initialize Lua environment - if not engine then - error("Engine API not available") - end - - -- Set default terrain parameters - engine.setTerrainHeight(10.0) - engine.log("Lua environment initialized") - )"; + std::string scriptPath = "build/assets/scripts/init.lua"; + std::ifstream scriptFile(scriptPath); + if (!scriptFile.is_open()) { + LOG_ERROR_CONCAT("Failed to open init.lua at path: ", scriptPath); + return; + } + + std::stringstream scriptBuffer; + scriptBuffer << scriptFile.rdbuf(); - if (!scriptSystem->ExecuteScript(initScript)) { + if (!scriptSystem->ExecuteScript(scriptBuffer.str())) { LOG_ERROR("Failed to execute initialization script"); } } catch (const std::exception& e) { - LOG_ERROR("Script initialization error: {}", e.what()); + LOG_ERROR("Script initialization error: {", e.what(), "}"); } } diff --git a/src/Application.h b/src/Application.h index 6c9b49f..5fb6545 100644 --- a/src/Application.h +++ b/src/Application.h @@ -72,6 +72,8 @@ namespace Engine { virtual void OnImGuiRender() {} + const std::string& GetAssetPath() const { return m_AssetPath; } + protected: /** * @brief Initialize the application window @@ -187,6 +189,8 @@ namespace Engine { std::unique_ptr m_ScriptSystem; static Application* s_Instance; + + std::string m_AssetPath = "../sandbox/assets/"; // Base path for all assets }; // To be defined by client application