Editor Layer + Updating Camera System
Started updating the camera system, Moving editor logic to an Editor layer
This commit is contained in:
		
							
								
								
									
										32
									
								
								Editor/src/EditorCamera.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								Editor/src/EditorCamera.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "../../YoggieEngine/src/YoggieEngine.h"
 | 
			
		||||
 | 
			
		||||
class EditorCamera : public YoggieEngine::Camera {
 | 
			
		||||
public:
 | 
			
		||||
	EditorCamera () : Camera(){
 | 
			
		||||
		Front = glm::vec3(0.0f, 0.0f, 1.0f);
 | 
			
		||||
		Right = glm::vec3(-1.0f, 0.0f, 0.0f);
 | 
			
		||||
		Up = glm::vec3(0.0f, 1.0f, 0.0f);
 | 
			
		||||
 | 
			
		||||
		projection = glm::perspective(glm::radians(65.0f), (800.0f / 600.0f), 0.001f, 100.0f);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		view = glm::translate(glm::mat4(1.0f), Position) * glm::toMat4(glm::quat(Rotation));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void Update() {
 | 
			
		||||
 | 
			
		||||
		view = glm::translate(glm::mat4(1.0f), Position) * glm::toMat4(glm::quat(Rotation));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	glm::vec3 Position;
 | 
			
		||||
	glm::vec3 Rotation;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	glm::vec3 Front;
 | 
			
		||||
	glm::vec3 Right;
 | 
			
		||||
	glm::vec3 Up;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										247
									
								
								Editor/src/EditorLayer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								Editor/src/EditorLayer.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,247 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <mini/ini.h>
 | 
			
		||||
#include <glm/glm.hpp>
 | 
			
		||||
#include <glm/gtc/type_ptr.hpp>
 | 
			
		||||
#include <glm/gtc/matrix_transform.hpp>
 | 
			
		||||
#include "AssetManagement/SceneSerializer.h"
 | 
			
		||||
#include "AssetManagement/AssetRegistry.h"
 | 
			
		||||
#include "Views/Viewport.h"
 | 
			
		||||
#include "PropertyPanels/SceneExplorer.h"
 | 
			
		||||
#include "AssetManagement/AssetFinder.h"
 | 
			
		||||
#include "MainMenuBar.h"
 | 
			
		||||
#include "PropertyPanels/Inspector.h"
 | 
			
		||||
#include "Project/ProjectInfo.h"
 | 
			
		||||
#include "Runtime/RuntimeControls.h"
 | 
			
		||||
#include "AssetManagement/uuid.h"
 | 
			
		||||
#include "Project/Settings.h"
 | 
			
		||||
#include "Console.h"
 | 
			
		||||
#include "AssetManagement/AssetLoaders/ModelLoader.h"
 | 
			
		||||
 | 
			
		||||
using namespace YoggieEngine;
 | 
			
		||||
class EditorLayer : public Layer {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	EditorLayer():
 | 
			
		||||
        Layer(),
 | 
			
		||||
        rc(),
 | 
			
		||||
        sceneview(scene, Selected),
 | 
			
		||||
        explorer(Selected, scene),
 | 
			
		||||
        inspector (Selected)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	void OnStartup() override {
 | 
			
		||||
        std::string path = (std::filesystem::current_path()).string();
 | 
			
		||||
        project.setProjectDirectory(path);
 | 
			
		||||
        assetsView = AssetFinder(project.GetProjectDirectory());
 | 
			
		||||
        LoadLastOrEmptyProject();
 | 
			
		||||
 | 
			
		||||
        AssetRegistry assetManager = AssetRegistry();
 | 
			
		||||
        ModelLoader modelLoader = ModelLoader();
 | 
			
		||||
 | 
			
		||||
        std::cout << project.GetProjectDirectory() << std::endl;
 | 
			
		||||
 | 
			
		||||
        auto latern = modelLoader.LoadAsset(std::filesystem::path("build/debug/Models/Latern.gltf"));
 | 
			
		||||
        std::cout << "Loaded mesh: " << latern.GetName() << std::endl;
 | 
			
		||||
 | 
			
		||||
        //ProjectInfo projectInfo(project);
 | 
			
		||||
        //Settings settings = Settings();
 | 
			
		||||
        //Console console = Console();
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Selected = YoggieEngine::Entity((entt::entity)-1, &scene);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void OnUpdate() override {
 | 
			
		||||
        scene.Update();
 | 
			
		||||
 | 
			
		||||
		if (sceneview.isFocused) {
 | 
			
		||||
			UpdateSceneCamera(sceneview);
 | 
			
		||||
 | 
			
		||||
			std::cout << "Scene view in Focus!\r";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void OnUI() override {
 | 
			
		||||
        {
 | 
			
		||||
            MainMenuBar menuBar = MainMenuBar();
 | 
			
		||||
            menuBar.ApplicationMenu(project);
 | 
			
		||||
            menuBar.SceneMenu(project, scene);
 | 
			
		||||
            menuBar.SelectMenu();
 | 
			
		||||
            menuBar.WindowMenu();
 | 
			
		||||
            menuBar.DebugMenu();
 | 
			
		||||
            menuBar.Help();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //projectInfo.Update();
 | 
			
		||||
        sceneview.Update();
 | 
			
		||||
        rc.Update();
 | 
			
		||||
        explorer.Update();
 | 
			
		||||
        //settings.Update();
 | 
			
		||||
        inspector.Update();
 | 
			
		||||
        //console.Update();
 | 
			
		||||
 | 
			
		||||
        assetsView.Update();
 | 
			
		||||
 | 
			
		||||
        ImGui::ShowDemoWindow();
 | 
			
		||||
        //ImGui::ShowMetricsWindow();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	void OnCreate() override {
 | 
			
		||||
		std::cout << " Layer Create!" << std::endl;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void OnDestroy() override {
 | 
			
		||||
		std::cout << " Layer Destroy!" << std::endl;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    RuntimeControls rc;
 | 
			
		||||
    Viewport sceneview ;
 | 
			
		||||
    SceneExplorer explorer;
 | 
			
		||||
    Inspector inspector;
 | 
			
		||||
    AssetFinder assetsView;
 | 
			
		||||
 | 
			
		||||
    bool SimulatePhysics = true;
 | 
			
		||||
    YoggieEngine::Entity  Selected;
 | 
			
		||||
    Project project;
 | 
			
		||||
    Scene scene;
 | 
			
		||||
 | 
			
		||||
    void LoadLastOrEmptyProject() {
 | 
			
		||||
        // Check if there is a last known loaded project and 
 | 
			
		||||
       // load that one .
 | 
			
		||||
 | 
			
		||||
       // Otherwise load no project..
 | 
			
		||||
       // OR 
 | 
			
		||||
       // Load an empty project.
 | 
			
		||||
        mINI::INIStructure ini;
 | 
			
		||||
 | 
			
		||||
        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.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (ini["editor"]["openlastproject"] == "TRUE")
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            Project::LoadProject(ini["cache"]["project"], project);
 | 
			
		||||
            LoadScene(ini["cache"]["scene"], scene);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            spdlog::debug("Starting without a project. Please create one.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void UpdateSceneCamera(Viewport& sceneview) {
 | 
			
		||||
        const float movement_speed = 0.01f;
 | 
			
		||||
        static float lastX = 400, lastY = 300;
 | 
			
		||||
        const float sensitivity = 0.1;
 | 
			
		||||
        static bool firstMouse = true;
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
 | 
			
		||||
        if (MouseButtonPressed(YOGGIE_MOUSE_BUTTON_RIGHT)) {
 | 
			
		||||
 | 
			
		||||
            glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 | 
			
		||||
            auto newX = getCursorPosX(appWindow);
 | 
			
		||||
            auto newY = getCursorPosY(appWindow);
 | 
			
		||||
 | 
			
		||||
            if (firstMouse)
 | 
			
		||||
            {
 | 
			
		||||
                lastX = newX;
 | 
			
		||||
                lastY = newY;
 | 
			
		||||
                firstMouse = false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            float xoffset = newX - lastX;
 | 
			
		||||
            float yoffset = newY - lastY;
 | 
			
		||||
 | 
			
		||||
            lastX = newX;
 | 
			
		||||
            lastY = newY;
 | 
			
		||||
 | 
			
		||||
            xoffset *= sensitivity;
 | 
			
		||||
            yoffset *= sensitivity;
 | 
			
		||||
 | 
			
		||||
            sceneview.cam.Rotation.x += (xoffset / 2);
 | 
			
		||||
            sceneview.cam.Rotation.y += (xoffset /2);
 | 
			
		||||
            sceneview.cam.Rotation.z += yoffset;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (sceneview.cam.pitch > 89.0f)
 | 
			
		||||
                sceneview.cam.pitch = 89.0f;
 | 
			
		||||
            if (sceneview.cam.pitch < -89.0f)
 | 
			
		||||
                sceneview.cam.pitch = -89.0f;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else if (firstMouse == false)
 | 
			
		||||
        {
 | 
			
		||||
            glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
 | 
			
		||||
            firstMouse = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        */
 | 
			
		||||
        
 | 
			
		||||
        EditorCamera& cam = sceneview.GetCamera();
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_UP))
 | 
			
		||||
            cam.Rotation.x += movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_DOWN))
 | 
			
		||||
            cam.Rotation.x -= movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_LEFT))
 | 
			
		||||
            cam.Rotation.y += movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_RIGHT))
 | 
			
		||||
            cam.Rotation.y -= movement_speed;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        cam.Update();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
 | 
			
		||||
        // Check for Camara movement input here!
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_W))
 | 
			
		||||
            sceneview.cam.Position -= sceneview.cam.Front * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_A))
 | 
			
		||||
            sceneview.cam.Position += sceneview.cam.Right * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_S))
 | 
			
		||||
            sceneview.cam.Position += sceneview.cam.Front * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_D))
 | 
			
		||||
            sceneview.cam.Position -= sceneview.cam.Right * movement_speed;
 | 
			
		||||
            */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
@ -1,32 +1,23 @@
 | 
			
		||||
#include "Viewport.h"
 | 
			
		||||
 | 
			
		||||
Viewport::Viewport(YoggieEngine::Scene& scene ):
 | 
			
		||||
Viewport::Viewport(YoggieEngine::Scene& scene, YoggieEngine::Entity& selected) :
 | 
			
		||||
    EditorWindow("SceneView"),
 | 
			
		||||
    renderer(YoggieEngine::RendererConfig{ 1200, 700, glm::vec3(0), true }),
 | 
			
		||||
    cam(glm::vec3(14.0f, 1.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), 90),
 | 
			
		||||
    scene(scene)
 | 
			
		||||
    renderer(YoggieEngine::RendererConfig{ 1200, 700, glm::vec3(0), true })
 | 
			
		||||
{
 | 
			
		||||
    renderer.SetMainCamera(cam);
 | 
			
		||||
 | 
			
		||||
    CurrentScene = &scene;
 | 
			
		||||
    this->selected = &selected;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Viewport::Draw() {
 | 
			
		||||
 | 
			
		||||
    auto group = scene.getReg().view<YoggieEngine::TransformComponent, YoggieEngine::Render3DComponent>();
 | 
			
		||||
    auto group = CurrentScene->getReg().view<YoggieEngine::TransformComponent, YoggieEngine::Render3DComponent>();
 | 
			
		||||
    group.each([&](auto enity, YoggieEngine::TransformComponent& t, YoggieEngine::Render3DComponent& renderComponent) {
 | 
			
		||||
        renderer.Submit(renderComponent, t);
 | 
			
		||||
        });
 | 
			
		||||
    
 | 
			
		||||
    isFocused = ImGui::IsWindowFocused();
 | 
			
		||||
 | 
			
		||||
    cam.Update();
 | 
			
		||||
    renderer.SetMainCamera(cam);
 | 
			
		||||
    renderer.Render(scene);
 | 
			
		||||
 | 
			
		||||
    ImVec2 WinPos = ImGui::GetWindowPos();
 | 
			
		||||
    ImVec2 ContentRegionMin = ImGui::GetWindowContentRegionMin();
 | 
			
		||||
    ImVec2 ContentRegionMax = ImGui::GetWindowContentRegionMax();
 | 
			
		||||
    ImVec2 ScreenSpaceMin = { ContentRegionMin.x + WinPos.x, ContentRegionMin.y + WinPos.y };
 | 
			
		||||
    ImVec2 ScreenSpaceMax = { ContentRegionMax.x + WinPos.x,ContentRegionMax.y + WinPos.y };
 | 
			
		||||
 | 
			
		||||
    renderer.Render(*CurrentScene);
 | 
			
		||||
 | 
			
		||||
    ImGui::Image(
 | 
			
		||||
        (void*)(intptr_t)renderer.getCurrentFrameBuffer().GetColourAttachment(),
 | 
			
		||||
 | 
			
		||||
@ -6,19 +6,23 @@
 | 
			
		||||
 | 
			
		||||
#include <imgui.h>
 | 
			
		||||
#include "../../libs/guizmo/ImGuizmo.h"
 | 
			
		||||
#include "../EditorCamera.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Viewport : public EditorWindow {
 | 
			
		||||
public:
 | 
			
		||||
    bool isFocused = false;
 | 
			
		||||
    YoggieEngine::Camera cam;
 | 
			
		||||
 | 
			
		||||
    Viewport(YoggieEngine::Scene& scene);
 | 
			
		||||
 | 
			
		||||
    Viewport(YoggieEngine::Scene& scene, YoggieEngine::Entity& selected);
 | 
			
		||||
    Viewport() = default;
 | 
			
		||||
    void Draw() override;
 | 
			
		||||
 | 
			
		||||
    EditorCamera& GetCamera(){ return camera; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    YoggieEngine::Renderer renderer;
 | 
			
		||||
    YoggieEngine::Scene& scene;
 | 
			
		||||
    YoggieEngine::Scene* CurrentScene;
 | 
			
		||||
    YoggieEngine::Entity* selected;
 | 
			
		||||
    glm::mat4 cameraDelta = glm::mat4(1.0);
 | 
			
		||||
    EditorCamera camera;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
@ -1,20 +1,7 @@
 | 
			
		||||
#include "../../YoggieEngine/src/EntryPoint.h"
 | 
			
		||||
#include <mini/ini.h>
 | 
			
		||||
#include <glm/glm.hpp>
 | 
			
		||||
#include <glm/gtc/type_ptr.hpp>
 | 
			
		||||
#include <glm/gtc/matrix_transform.hpp>
 | 
			
		||||
#include "AssetManagement/SceneSerializer.h"
 | 
			
		||||
#include "AssetManagement/AssetManager.h"
 | 
			
		||||
#include "Views/Viewport.h"
 | 
			
		||||
#include "PropertyPanels/SceneExplorer.h"
 | 
			
		||||
#include "AssetManagement/AssetFinder.h"
 | 
			
		||||
#include "MainMenuBar.h"
 | 
			
		||||
#include "PropertyPanels/Inspector.h"
 | 
			
		||||
#include "Project/ProjectInfo.h"
 | 
			
		||||
#include "Runtime/RuntimeControls.h"
 | 
			
		||||
#include "AssetManagement/uuid.h"
 | 
			
		||||
#include "Project/Settings.h"
 | 
			
		||||
#include "Console.h"
 | 
			
		||||
#include <stack>
 | 
			
		||||
#include "EditorLayer.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using namespace YoggieEngine;
 | 
			
		||||
 | 
			
		||||
@ -24,175 +11,42 @@ public:
 | 
			
		||||
 | 
			
		||||
    void Run() override
 | 
			
		||||
    {
 | 
			
		||||
        std::string path = (std::filesystem::current_path()).string();
 | 
			
		||||
        project.setProjectDirectory(path);
 | 
			
		||||
 | 
			
		||||
        LoadLastOrEmptyProject();
 | 
			
		||||
 | 
			
		||||
        //ProjectInfo projectInfo(project);
 | 
			
		||||
        RuntimeControls rc = RuntimeControls();
 | 
			
		||||
 | 
			
		||||
        Viewport sceneview = Viewport(scene);
 | 
			
		||||
        SceneExplorer explorer(Selected, scene);
 | 
			
		||||
        Inspector inspector = Inspector(Selected);
 | 
			
		||||
        //Settings settings = Settings();
 | 
			
		||||
        AssetFinder assetsView = AssetFinder();
 | 
			
		||||
        //Console console = Console();
 | 
			
		||||
 | 
			
		||||
        // Create EditorLayer
 | 
			
		||||
        EditorLayer* firstLayer = new EditorLayer();
 | 
			
		||||
   
 | 
			
		||||
        firstLayer->OnStartup();
 | 
			
		||||
        
 | 
			
		||||
        Selected = YoggieEngine::Entity((entt::entity) -1, &scene);
 | 
			
		||||
 | 
			
		||||
        double previous = glfwGetTime();
 | 
			
		||||
        double lag = 0.0;
 | 
			
		||||
        while (!appWindow->WindowShouldClose())
 | 
			
		||||
        {
 | 
			
		||||
        while (!appWindow->WindowShouldClose()) {
 | 
			
		||||
            PollEvents();
 | 
			
		||||
            double now = glfwGetTime();
 | 
			
		||||
            double elapsed = now - previous ;
 | 
			
		||||
            double elapsed = now - previous;
 | 
			
		||||
            previous = now;
 | 
			
		||||
            lag += elapsed;
 | 
			
		||||
 | 
			
		||||
            scene.Update();
 | 
			
		||||
 | 
			
		||||
            if (sceneview.isFocused) {
 | 
			
		||||
                UpdateSceneCamera(sceneview);
 | 
			
		||||
 | 
			
		||||
                std::cout << "Scene view in Focus!\r" ;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            GuiBegin();
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            {
 | 
			
		||||
                MainMenuBar menuBar = MainMenuBar();
 | 
			
		||||
 | 
			
		||||
                // Show a menu bar
 | 
			
		||||
                menuBar.ApplicationMenu(project);
 | 
			
		||||
                menuBar.SceneMenu(project, scene);
 | 
			
		||||
                menuBar.SelectMenu();
 | 
			
		||||
                menuBar.WindowMenu();
 | 
			
		||||
                menuBar.DebugMenu();
 | 
			
		||||
                menuBar.Help();
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
          
 | 
			
		||||
            //projectInfo.Update();
 | 
			
		||||
            sceneview.Update();
 | 
			
		||||
            rc.Update();
 | 
			
		||||
            explorer.Update();
 | 
			
		||||
            //settings.Update();
 | 
			
		||||
            inspector.Update();
 | 
			
		||||
            //console.Update();
 | 
			
		||||
            
 | 
			
		||||
            assetsView.Update();
 | 
			
		||||
 | 
			
		||||
            ImGui::ShowDemoWindow();
 | 
			
		||||
            //ImGui::ShowMetricsWindow();
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            firstLayer->OnUpdate();
 | 
			
		||||
            firstLayer->OnUI();
 | 
			
		||||
            GuiEnd();
 | 
			
		||||
 | 
			
		||||
            SwapBuffers();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        firstLayer->OnDestroy();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void LoadLastOrEmptyProject() {
 | 
			
		||||
        // Check if there is a last known loaded project and 
 | 
			
		||||
       // load that one .
 | 
			
		||||
 | 
			
		||||
       // Otherwise load no project..
 | 
			
		||||
       // OR 
 | 
			
		||||
       // Load an empty project.
 | 
			
		||||
        mINI::INIStructure ini;
 | 
			
		||||
 | 
			
		||||
        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.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (ini["editor"]["openlastproject"] == "TRUE") 
 | 
			
		||||
        {
 | 
			
		||||
            Project::LoadProject(ini["cache"]["project"], project);
 | 
			
		||||
            LoadScene(ini["cache"]["scene"], scene);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            spdlog::debug("Starting without a project. Please create one.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    bool SimulatePhysics = true;
 | 
			
		||||
    YoggieEngine::Entity  Selected;
 | 
			
		||||
    Project project;
 | 
			
		||||
    Scene scene;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void UpdateSceneCamera(Viewport& sceneview) {
 | 
			
		||||
        const float movement_speed = 0.1f;
 | 
			
		||||
        static float lastX = 400, lastY = 300;
 | 
			
		||||
        const float sensitivity = 0.1;
 | 
			
		||||
        static bool firstMouse = true;
 | 
			
		||||
 | 
			
		||||
        if (MouseButtonPressed(YOGGIE_MOUSE_BUTTON_RIGHT)) {
 | 
			
		||||
 | 
			
		||||
            glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 | 
			
		||||
            auto newX = getCursorPosX(appWindow);
 | 
			
		||||
            auto newY = getCursorPosY(appWindow);
 | 
			
		||||
 | 
			
		||||
            if (firstMouse)
 | 
			
		||||
            {
 | 
			
		||||
                lastX = newX;
 | 
			
		||||
                lastY = newY;
 | 
			
		||||
                firstMouse = false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            float xoffset = newX - lastX;
 | 
			
		||||
            float yoffset = newY - lastY;
 | 
			
		||||
 | 
			
		||||
            lastX = newX;
 | 
			
		||||
            lastY = newY;
 | 
			
		||||
 | 
			
		||||
            xoffset *= sensitivity;
 | 
			
		||||
            yoffset *= sensitivity;
 | 
			
		||||
 | 
			
		||||
            sceneview.cam.yaw += xoffset;
 | 
			
		||||
            sceneview.cam.pitch += yoffset;
 | 
			
		||||
 | 
			
		||||
            if (sceneview.cam.pitch > 89.0f)
 | 
			
		||||
                sceneview.cam.pitch = 89.0f;
 | 
			
		||||
            if (sceneview.cam.pitch < -89.0f)
 | 
			
		||||
                sceneview.cam.pitch = -89.0f;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else if (firstMouse == false)
 | 
			
		||||
        {
 | 
			
		||||
            glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
 | 
			
		||||
            firstMouse = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Check for Camara movement input here!
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_W)) {
 | 
			
		||||
            sceneview.cam.Position += sceneview.cam.Front * movement_speed;
 | 
			
		||||
            std::cout << "Pressed W !" << std::endl;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_A))
 | 
			
		||||
            sceneview.cam.Position -= sceneview.cam.Right * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_S))
 | 
			
		||||
            sceneview.cam.Position -= sceneview.cam.Front * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_D))
 | 
			
		||||
            sceneview.cam.Position += sceneview.cam.Right * movement_speed;
 | 
			
		||||
    }
 | 
			
		||||
    std::vector<Layer*> layers = std::vector<Layer*>();
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user