Clean up layer stack code, input now goes through each layer
This commit is contained in:
		@ -22,8 +22,14 @@
 | 
			
		||||
 | 
			
		||||
using namespace YoggieEngine;
 | 
			
		||||
 | 
			
		||||
const float movement_speed = 0.1f;
 | 
			
		||||
static float lastX = 400, lastY = 300;
 | 
			
		||||
const float sensitivity = 0.1;
 | 
			
		||||
static bool firstMouse = true;
 | 
			
		||||
 | 
			
		||||
class EditorLayer : public Layer {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    EditorLayer() :
 | 
			
		||||
        Layer(),
 | 
			
		||||
@ -64,11 +70,6 @@ public:
 | 
			
		||||
 | 
			
		||||
	void OnUpdate() override {
 | 
			
		||||
        scene.Update();
 | 
			
		||||
        /*
 | 
			
		||||
        * if (Sceneview.isFocused) {
 | 
			
		||||
			UpdateSceneCamera(sceneview);
 | 
			
		||||
		}
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        auto components = scene.getReg().view<Render3DComponent>();
 | 
			
		||||
        for(auto component : components){
 | 
			
		||||
@ -119,6 +120,41 @@ public:
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    bool OnKey(int key, int mode) override {
 | 
			
		||||
       
 | 
			
		||||
        if (SceneisFocused) {
 | 
			
		||||
            spdlog::info("update camera!");
 | 
			
		||||
            if (key == YOGGIE_KEY_UP)
 | 
			
		||||
                camera->Rotation.x += movement_speed;
 | 
			
		||||
 | 
			
		||||
            if (key == YOGGIE_KEY_DOWN)
 | 
			
		||||
                camera->Rotation.x -= movement_speed;
 | 
			
		||||
 | 
			
		||||
            if (key == YOGGIE_KEY_LEFT)
 | 
			
		||||
                camera->Rotation.y += movement_speed;
 | 
			
		||||
 | 
			
		||||
            if (key == YOGGIE_KEY_RIGHT)
 | 
			
		||||
                camera->Rotation.y -= movement_speed;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (key == YOGGIE_KEY_A)
 | 
			
		||||
                camera->Position += glm::vec3(1.0f, 0.0f, 0.0f) * movement_speed;
 | 
			
		||||
 | 
			
		||||
            if (key == YOGGIE_KEY_S)
 | 
			
		||||
                camera->Position += glm::vec3(0.0f, 0.0f, -1.0f) * movement_speed;
 | 
			
		||||
 | 
			
		||||
            if (key == YOGGIE_KEY_D)
 | 
			
		||||
                camera->Position -= glm::vec3(1.0f, 0.0f, 0.0f) * movement_speed;
 | 
			
		||||
 | 
			
		||||
            if (key == GLFW_KEY_W)
 | 
			
		||||
                camera->Position -= glm::vec3(0.0f, 0.0f, -1.0f) * movement_speed;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ImGuizmo::OPERATION activeOperation = ImGuizmo::OPERATION::TRANSLATE;
 | 
			
		||||
 | 
			
		||||
@ -375,7 +411,7 @@ public:
 | 
			
		||||
        ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0,0 });
 | 
			
		||||
        ImGui::Begin("SceneView",nullptr,viewportWindowFlags);
 | 
			
		||||
       // spdlog::info("{0}x{1}", ImGui::GetWindowWidth(), ImGui::GetWindowHeight());
 | 
			
		||||
 | 
			
		||||
        SceneisFocused = ImGui::IsWindowFocused() || ImGui::IsWindowHovered();
 | 
			
		||||
        ImGui::Image((ImTextureID)(intptr_t)renderer.getCurrentFrameBuffer().GetColourAttachment(),
 | 
			
		||||
            ImVec2{(float)ImGui::GetWindowWidth(),(float)ImGui::GetWindowHeight()});
 | 
			
		||||
 | 
			
		||||
@ -474,6 +510,9 @@ private:
 | 
			
		||||
    Renderer renderer;
 | 
			
		||||
    EditorCamera* camera = new EditorCamera();
 | 
			
		||||
    Mesh cube ;
 | 
			
		||||
    bool SceneisFocused = false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void LoadLastOrEmptyProject() {
 | 
			
		||||
        // Check if there is a last known loaded project and 
 | 
			
		||||
@ -507,101 +546,4 @@ private:
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void UpdateSceneCamera() {
 | 
			
		||||
        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;
 | 
			
		||||
            */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
@ -11,43 +11,12 @@ public:
 | 
			
		||||
 | 
			
		||||
    void Run() override
 | 
			
		||||
    {
 | 
			
		||||
        PushLayer(new EditorLayer());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Create EditorLayer
 | 
			
		||||
        EditorLayer* firstLayer = new EditorLayer();
 | 
			
		||||
   
 | 
			
		||||
        firstLayer->OnStartup();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        double previous = glfwGetTime();
 | 
			
		||||
        double lag = 0.0;
 | 
			
		||||
        while (!appWindow->WindowShouldClose()) {
 | 
			
		||||
            PollEvents();
 | 
			
		||||
            double now = glfwGetTime();
 | 
			
		||||
            double elapsed = now - previous;
 | 
			
		||||
            previous = now;
 | 
			
		||||
            lag += elapsed;
 | 
			
		||||
            GuiBegin();
 | 
			
		||||
            firstLayer->OnUpdate();
 | 
			
		||||
            firstLayer->OnUI();
 | 
			
		||||
            GuiEnd();
 | 
			
		||||
 | 
			
		||||
            SwapBuffers();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        firstLayer->OnDestroy();
 | 
			
		||||
        
 | 
			
		||||
        Application::Run();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    std::vector<Layer*> layers = std::vector<Layer*>();
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
YoggieEngine::Application* CreateApplication() {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user