Load the previously loaded project and scene on startup
(read from an ini file)
This commit is contained in:
		| @ -47,6 +47,9 @@ void MainMenuBar::ApplicationMenu(Project& project) { | ||||
|         } | ||||
|  | ||||
|  | ||||
|    | ||||
|  | ||||
|  | ||||
|  | ||||
|         if (ImGui::MenuItem("Preferences")) | ||||
|         { | ||||
| @ -72,6 +75,9 @@ void MainMenuBar::SceneMenu(Project& project, YoggieEngine::Scene& scene) { | ||||
|             switch (result) { | ||||
|             case(NFD_OKAY): | ||||
|                 SaveScene(path, scene); | ||||
|                  | ||||
|                 project.AddScene(scene); | ||||
|  | ||||
|                 break; | ||||
|             case(NFD_CANCEL): | ||||
|                 break; | ||||
|  | ||||
| @ -13,6 +13,15 @@ void Project::SaveProject(std::filesystem::path path, Project& project) | ||||
| 	projectYAML << YAML::Key << "Project" << YAML::Value << project.Name;	 | ||||
| 	projectYAML << YAML::Key << "Directory" << YAML::Value << path.parent_path().u8string(); | ||||
| 	projectYAML << YAML::EndMap; | ||||
| 	projectYAML << YAML::BeginMap; | ||||
|  | ||||
|  | ||||
| 	projectYAML << YAML::Key << "Scenes" << YAML::Value << YAML::BeginSeq; | ||||
| 	for (auto scene : project.Scenes) { | ||||
| 		projectYAML << scene->name; | ||||
| 	} | ||||
| 	projectYAML << YAML::EndSeq; | ||||
|  | ||||
| 	std::ofstream projectFile; | ||||
|  | ||||
| 	projectFile.open(path.u8string()); | ||||
| @ -56,10 +65,12 @@ namespace YAML { | ||||
| 				return false; | ||||
| 			rhs.setName(node["Project"].as<std::string>()); | ||||
| 			rhs.setProjectDirectory(node["Directory"].as<std::string>()); | ||||
| 			 | ||||
| 		 | ||||
|  | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 	}; | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,10 @@ | ||||
| #pragma once | ||||
| #include <filesystem> | ||||
| #include <iostream> | ||||
| #include "../../YoggieEngine/src/YoggieEngine.h" | ||||
| #include <yaml-cpp/yaml.h> | ||||
|  | ||||
|  | ||||
| class Project { | ||||
| public: | ||||
| 	Project() = default; | ||||
| @ -13,10 +17,21 @@ public: | ||||
| 	void setProjectDirectory(std::string& path) { ProjectDirectory = std::filesystem::path(path); } | ||||
| 	const std::filesystem::path GetProjectDirectory() { return ProjectDirectory; } | ||||
|  | ||||
|  | ||||
| 	void AddScene(YoggieEngine::Scene& scene) | ||||
| 	{ | ||||
| 		Scenes.push_back(&scene); | ||||
| 	} | ||||
|  | ||||
| 	static void SaveProject(std::filesystem::path path, Project& project); | ||||
| 	static void LoadProject(std::filesystem::path path, Project& project); | ||||
| private: | ||||
| 	std::string Name; | ||||
| 	std::filesystem::path ProjectDirectory; | ||||
|  | ||||
| 	std::vector<YoggieEngine::Scene*> Scenes; | ||||
|  | ||||
| 	friend class YAML::convert<Project>; | ||||
|  | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -1,14 +1,10 @@ | ||||
| #include "../../YoggieEngine/src/EntryPoint.h" | ||||
| #include "../../YoggieEngine/src/AssetManager/ModelImporter.h" | ||||
| #include "../../YoggieEngine/src/Physics/Physics.h" | ||||
|  | ||||
| #include <nfd.h> | ||||
| #include <mini/ini.h> | ||||
|  | ||||
| #include <glm/glm.hpp> | ||||
| #include <glm/gtc/type_ptr.hpp> | ||||
| #include <glm/gtc/matrix_transform.hpp> | ||||
|  | ||||
| #include "Project/Project.h" | ||||
| #include "AssetManagement/SceneSerializer.h" | ||||
| #include "AssetManagement/AssetManager.h" | ||||
|  | ||||
| @ -31,9 +27,15 @@ public: | ||||
|  | ||||
|     void Run() override | ||||
|     { | ||||
|         std::string path = (std::filesystem::current_path()).string(); | ||||
|         project.setProjectDirectory(path); | ||||
|  | ||||
|         AssetManager::Init(); | ||||
|         AssetManager::setAssetPath(project.GetProjectDirectory()); | ||||
|         AssetManager::BuildAssetView(); | ||||
|  | ||||
|         LoadLastOrEmptyProject(); | ||||
|  | ||||
|         MainMenuBar menuBar = MainMenuBar(); | ||||
|         ProjectInfo projectInfo(project); | ||||
|         Viewport sceneview = Viewport(scene); | ||||
|         RuntimeControls rc = RuntimeControls(); | ||||
| @ -114,14 +116,18 @@ public: | ||||
|             } | ||||
|  | ||||
|             GuiBegin(); | ||||
|             { | ||||
|                 MainMenuBar menuBar = MainMenuBar(); | ||||
|  | ||||
|             // Show a menu bar | ||||
|             menuBar.ApplicationMenu(project); | ||||
|             menuBar.SceneMenu(project, scene); | ||||
|             menuBar.SelectMenu(); | ||||
|             menuBar.WindowMenu(); | ||||
|             menuBar.DebugMenu(); | ||||
|             menuBar.Help(); | ||||
|                 // Show a menu bar | ||||
|                 menuBar.ApplicationMenu(project); | ||||
|                 menuBar.SceneMenu(project, scene); | ||||
|                 menuBar.SelectMenu(); | ||||
|                 menuBar.WindowMenu(); | ||||
|                 menuBar.DebugMenu(); | ||||
|                 menuBar.Help(); | ||||
|  | ||||
|             } | ||||
|            | ||||
|       | ||||
|             if (scene.getReg().valid(Selected)) { | ||||
| @ -156,43 +162,29 @@ public: | ||||
|        // Otherwise load no project.. | ||||
|        // OR  | ||||
|        // Load an empty project. | ||||
|         mINI::INIStructure ini; | ||||
|        | ||||
|  | ||||
|         std::string path = (std::filesystem::current_path()).string(); | ||||
|         project.setProjectDirectory(path); | ||||
|         if (std::filesystem::exists("build\\Debug\\Editor.ini"))  | ||||
|         { | ||||
|             mINI::INIFile file("build\\Debug\\Editor.ini");    | ||||
|             file.read(ini); | ||||
|         } | ||||
|         else  | ||||
|         { | ||||
|             spdlog::debug("Could not find an `Editor.ini` file."); | ||||
|         } | ||||
|  | ||||
|         AssetManager::Init(); | ||||
|         AssetManager::setAssetPath(project.GetProjectDirectory()); | ||||
|         AssetManager::BuildAssetView(); | ||||
|         if (ini["editor"]["openlastproject"] == "TRUE")  | ||||
|         { | ||||
|             Project::LoadProject(ini["cache"]["project"], project); | ||||
|             LoadScene(ini["cache"]["scene"], scene); | ||||
|  | ||||
|         // Create a level and load it as the current level | ||||
|         auto importer = ModelImporter(); | ||||
|  | ||||
|  | ||||
|         // create an ambient light source | ||||
|         auto light = scene.AddEntity("Light"); | ||||
|         auto& lightComponent = light.AddComponent<LightComponent>(); | ||||
|         lightComponent.Color = glm::vec3(1.0f); | ||||
|  | ||||
|  | ||||
|         // Create a cube  | ||||
|         auto model = importer.Import("build/Debug/Models/Cube.obj"); | ||||
|  | ||||
|         auto cube = scene.AddEntity("Cube"); | ||||
|         auto& render3DComponent = cube.AddComponent<Render3DComponent>(); | ||||
|         render3DComponent.mesh = *(model->renderable->mesh); | ||||
|  | ||||
|         cube.GetComponent<TransformComponent>().Position = glm::vec3(1.0f, 0.0f, 5.0f); | ||||
|  | ||||
|         auto cube2 = scene.AddEntity("Cube2"); | ||||
|         auto& rendercube2 = cube2.AddComponent<Render3DComponent>(); | ||||
|         rendercube2.mesh = *(model->renderable->mesh); | ||||
|         auto& relationcube = cube.AddComponent<RelationComponent>(cube2); | ||||
|         auto& rigidbodycomp = cube.AddComponent<RigidBody>(); | ||||
|         auto& rigidbodycomp2 = cube2.AddComponent<RigidBody>(); | ||||
|  | ||||
|  | ||||
|         auto Grass = scene.AddEntity("Grass/Window-Pane"); | ||||
|         //auto& renderGrass = Grass.AddComponent<Render3DComponent>(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             spdlog::debug("Starting without a project. Please create one."); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| private: | ||||
|  | ||||
		Reference in New Issue
	
	Block a user