From 1ecaea469e86ef3f5d18122c8b2cc187286e27f7 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 17 Aug 2025 22:38:29 +0200 Subject: Add World builder state --- src/States/WorldBuilderState.h | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/States/WorldBuilderState.h (limited to 'src/States/WorldBuilderState.h') diff --git a/src/States/WorldBuilderState.h b/src/States/WorldBuilderState.h new file mode 100644 index 0000000..c9b8d00 --- /dev/null +++ b/src/States/WorldBuilderState.h @@ -0,0 +1,65 @@ +#pragma once + +#include "Core/Camera.h" +#include "Core/State.h" +#include "Core/Event.h" +#include "Core/Log.h" + +#include "Engine/Scene.h" +#include "Engine/Object.h" + +#include "Rendering/Renderer.h" +#include "Rendering/Shader.h" +#include "Rendering/VertexArray.h" + +#include +#include + +#include +#include + +namespace Donut +{ + class WorldBuilderState + : public State + { + public: + ~WorldBuilderState() = default; + + void OnEnter() override; + void OnExit() override; + void OnUpdate(float deltaTime) override; + void OnRender() override; + void OnImUIRender() override; + void OnEvent(Event& event) override; + private: + void AddSphere(); + void RemoveSelectedObject(); + void ClearScene(); + void SaveScene(); + void LoadScene(); + void RenderScene(); + private: + Scene m_Scene; + Camera m_Camera; + bool m_Initialized = false; + + glm::vec3 m_NewObjectPosition = glm::vec3(0.0f, 0.0f, 0.0f); + float m_NewObjectRadius = 1.0f; + glm::vec3 m_NewObjectColor = glm::vec3(1.0f, 1.0f, 1.0f); + float m_NewObjectSpecular = 0.5f; + float m_NewObjectEmission = 0.0f; + + int m_SelectedObjectIndex = -1; + bool m_CameraDragging = false; + glm::vec2 m_LastMousePos = glm::vec2(0.0f, 0.0f); + + ImGuizmo::OPERATION m_GizmoOperation = ImGuizmo::TRANSLATE; + ImGuizmo::MODE m_GizmoMode = ImGuizmo::LOCAL; + + bool m_ShowObjectList = true; + bool m_ShowObjectCreator = true; + bool m_ShowSceneInfo = true; + bool m_ShowGizmoControls = true; + }; +}; -- cgit v1.3