From 536b42f9b41aa542fb3e8e10aea8ec64b58ae150 Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Sat, 10 May 2025 13:15:13 -0500 Subject: [PATCH] updated Project Manager --- remake/build.log | 6 +- src/src/Engine.cpp | 2 +- src/src/core/functions/ProjectManager.cpp | 109 +++++++++++----------- src/src/core/functions/ProjectManager.h | 16 ++-- 4 files changed, 68 insertions(+), 65 deletions(-) diff --git a/remake/build.log b/remake/build.log index 588738d..f29921b 100644 --- a/remake/build.log +++ b/remake/build.log @@ -1,4 +1,2 @@ -[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\editor\windows\SceneTree.cpp -o src\build\editor\windows\SceneTree.o -[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\core\functions\Prefab.cpp -o src\build\core\functions\Prefab.o -[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PathFollowerComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ProjectManager.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\scripts\ScriptCore.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\utils\Themes.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\editor\windows\SceneTree.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz -lfreetype -[RUN] Executed app.exe successfully. +[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\core\functions\Prefab.cpp -o src\build\core\functions\Prefab.o +[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\core\functions\ProjectManager.cpp -o src\build\core\functions\ProjectManager.o diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp index 20b5bf2..473ddd9 100644 --- a/src/src/Engine.cpp +++ b/src/src/Engine.cpp @@ -548,7 +548,7 @@ void Engine::Init() Logger::LogOk("Engine Core"); - ProjectManager::CreateProject("C:/Users/spenc/OneDrive/Desktop", "TestProject"); + ProjectManager::LoadProject("C:/Users/spenc/OneDrive/Desktop", "TestProject"); } core::types::Vec2 ScreenToWorld(const core::types::Vec2 &screenPos, const core::types::Vec2 &viewportSize, const core::types::Vec2 &cameraPos, float zoom) diff --git a/src/src/core/functions/ProjectManager.cpp b/src/src/core/functions/ProjectManager.cpp index b609145..3851f7a 100644 --- a/src/src/core/functions/ProjectManager.cpp +++ b/src/src/core/functions/ProjectManager.cpp @@ -3,8 +3,8 @@ #include "ProjectManager.h" #include "../../core/utils/EngineConfig.h" #include "../../core/utils/Logging.h" -#include "../../core/utils/AssetManager.h" #include +#include #include #include @@ -21,51 +21,56 @@ bool ProjectManager::Init() return true; } -bool ProjectManager::SaveResource() +bool ProjectManager::LoadProject(const std::string& projectPath, + const std::string& projectName) { - return false; -} - -bool ProjectManager::CreateProject(const std::string &projectPath, - const std::string &projectName) -{ - fs::path baseDir = fs::path(projectPath) / projectName; + fs::path baseDir = fs::path(projectPath) / projectName; fs::path projFile = baseDir / (projectName + ".cproj"); - std::error_code ec; - if (fs::exists(projFile)) + if (!fs::exists(projFile)) { - YAML::Node config; - try - { - config = YAML::LoadFile(projFile.string()); - } - catch (const YAML::Exception &e) - { - Logger::LogError("Failed to parse existing project file '%s': %s", - projFile.string().c_str(), e.what()); - return false; - } - - std::string savedName = config["Name"].as(projectName); - std::string createdDate = config["CreatedDate"].as("unknown"); - - Logger::LogInfo("Loaded project '%s' at '%s' (created %s)", - savedName.c_str(), - projectPath.c_str(), - createdDate.c_str()); - - s_currentProjectPath = projectPath; - s_currentProjectName = savedName; - - fs::create_directories(baseDir / "asset" / "Prefabs", ec); - if (ec) - Logger::LogError("Could not ensure Prefabs dir: %s", - ec.message().c_str()); - - return true; + Logger::LogInfo("Project '%s' not found at '%s' creating new one.", + projectName.c_str(), projectPath.c_str()); + return SaveProject(projectPath, projectName); } + YAML::Node config; + try { + config = YAML::LoadFile(projFile.string()); + } + catch (const YAML::Exception& e) { + Logger::LogError("Failed to parse project file '%s': %s", + projFile.string().c_str(), e.what()); + return false; + } + + std::string savedName = config["Name"].as(projectName); + std::string createdDate = config["CreatedDate"].as("unknown"); + + Logger::LogInfo("Loaded project '%s' at '%s' (created %s)", + savedName.c_str(), + projectPath.c_str(), + createdDate.c_str()); + + s_currentProjectPath = projectPath; + s_currentProjectName = savedName; + + std::error_code ec; + fs::create_directories(baseDir / "asset" / "Prefabs", ec); + if (ec) + Logger::LogError("Could not ensure Prefabs dir: %s", + ec.message().c_str()); + + return true; +} + +bool ProjectManager::SaveProject(const std::string& projectPath, + const std::string& projectName) +{ + fs::path baseDir = fs::path(projectPath) / projectName; + fs::path projFile = baseDir / (projectName + ".cproj"); + + std::error_code ec; if (!fs::create_directories(baseDir, ec) && ec) { Logger::LogError("Failed to create project directory '%s': %s", @@ -75,17 +80,17 @@ bool ProjectManager::CreateProject(const std::string &projectPath, YAML::Emitter out; out << YAML::BeginMap; - out << YAML::Key << "Name" << YAML::Value << projectName; + out << YAML::Key << "Name" << YAML::Value << projectName; out << YAML::Key << "EngineVersion" << YAML::Value << g_engineConfig.version; auto now = std::chrono::system_clock::now(); - auto t = std::chrono::system_clock::to_time_t(now); + auto t = std::chrono::system_clock::to_time_t(now); std::tm tm{}; -#if defined(_WIN32) + #if defined(_WIN32) gmtime_s(&tm, &t); -#else + #else gmtime_r(&t, &tm); -#endif + #endif char buf[32]; std::strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", &tm); out << YAML::Key << "CreatedDate" << YAML::Value << buf; @@ -101,11 +106,10 @@ bool ProjectManager::CreateProject(const std::string &projectPath, fout << out.c_str(); fout.close(); - Logger::LogOk("Created new project '%s' at '%s'", + Logger::LogOk("Saved project '%s' at '%s'", projectName.c_str(), projectPath.c_str()); fs::create_directories(baseDir / "asset" / "Prefabs", ec); - if (ec) Logger::LogError("Could not create Prefabs dir: %s", ec.message().c_str()); @@ -115,21 +119,22 @@ bool ProjectManager::CreateProject(const std::string &projectPath, return true; } -const std::string &ProjectManager::GetCurrentProjectPath() +const std::string& ProjectManager::GetCurrentProjectPath() { return s_currentProjectPath; } -const std::string &ProjectManager::GetCurrentProjectName() +const std::string& ProjectManager::GetCurrentProjectName() { return s_currentProjectName; } -const std::string &ProjectManager::GetCurrentAssetsPath() +const std::string& ProjectManager::GetCurrentAssetsPath() { static std::string assetsPath; - // //Assets - fs::path p = fs::path(s_currentProjectPath) / s_currentProjectName / "Assets"; + fs::path p = fs::path(s_currentProjectPath) + / s_currentProjectName + / "Assets"; assetsPath = p.string(); return assetsPath; } diff --git a/src/src/core/functions/ProjectManager.h b/src/src/core/functions/ProjectManager.h index a7d87e2..504670a 100644 --- a/src/src/core/functions/ProjectManager.h +++ b/src/src/core/functions/ProjectManager.h @@ -2,27 +2,27 @@ #pragma once #include -#include #include -#include "../../core/types/all.h" class ProjectManager { public: static bool Init(); - static bool SaveResource(); + /// Load an existing project at projectPath/projectName. + /// Reads the .cproj, sets current path/name, and ensures folders. + static bool LoadProject(const std::string& projectPath, + const std::string& projectName); - static bool CreateProject(const std::string& projectPath, - const std::string& projectName); + /// Save (or create) a project at projectPath/projectName. + /// Writes the .cproj YAML, sets current path/name, and ensures folders. + static bool SaveProject(const std::string& projectPath, + const std::string& projectName); static const std::string& GetCurrentProjectPath(); - static const std::string& GetCurrentProjectName(); - static const std::string& GetCurrentAssetsPath(); - private: static std::string s_currentProjectPath; static std::string s_currentProjectName;