aboutsummaryrefslogtreecommitdiff
path: root/src/States/WorldBuilderState.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/States/WorldBuilderState.h')
-rw-r--r--src/States/WorldBuilderState.h65
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;
+ };
+};