Load the previously loaded project and scene on startup
(read from an ini file)
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							@ -30,6 +30,7 @@ includedirs{
 | 
			
		||||
  incfolder["entt"],
 | 
			
		||||
  incfolder["yamlcpp"],
 | 
			
		||||
  incfolder["nativefiledialog"],
 | 
			
		||||
  incfolder["mINI"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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