diff options
| author | hachem <im@hachem.wtf> | 2025-08-17 22:38:29 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-17 22:38:29 +0200 |
| commit | 1ecaea469e86ef3f5d18122c8b2cc187286e27f7 (patch) | |
| tree | c56d2320bd69ea3a1c2cd9c78c288546214a8667 /src/States/WorldBuilderState.h | |
| parent | d9a8a37a61bff05a06068e203d6548ca931857de (diff) | |
Add World builder state
Diffstat (limited to 'src/States/WorldBuilderState.h')
| -rw-r--r-- | src/States/WorldBuilderState.h | 65 |
1 files changed, 65 insertions, 0 deletions
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 <imgui.h> +#include <ImGuizmo.h> + +#include <vector> +#include <memory> + +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; + }; +}; |
