hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/states/world_builder_state.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/states/world_builder_state.h')
-rw-r--r--src/states/world_builder_state.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/states/world_builder_state.h b/src/states/world_builder_state.h
new file mode 100644
index 0000000..c587fbe
--- /dev/null
+++ b/src/states/world_builder_state.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/vertex_array.h"
+
+#include <imgui.h>
+#include <ImGuizmo.h>
+
+#include <vector>
+#include <memory>
+
+namespace Donut
+{
+ class WorldBuilderState
+ : public State
+ {
+ public:
+ ~WorldBuilderState() = default;
+
+ void on_enter() override;
+ void on_exit() override;
+ void on_update(float delta_time) override;
+ void on_render() override;
+ void on_im_ui_render() override;
+ void on_event(Event& event) override;
+ private:
+ void add_sphere();
+ void remove_selected_object();
+ void clear_scene();
+ void save_scene();
+ void load_scene();
+ void render_scene();
+ private:
+ Scene m_scene;
+ Camera m_camera;
+ bool m_initialized = false;
+
+ glm::vec3 m_new_object_position = glm::vec3(0.0f, 0.0f, 0.0f);
+ float m_new_object_radius = 1.0f;
+ glm::vec3 m_new_object_color = glm::vec3(1.0f, 1.0f, 1.0f);
+ float m_new_object_specular = 0.5f;
+ float m_new_object_emission = 0.0f;
+
+ int m_selected_object_index = -1;
+ bool m_camera_dragging = false;
+ glm::vec2 m_last_mouse_pos = glm::vec2(0.0f, 0.0f);
+
+ ImGuizmo::OPERATION m_gizmo_operation = ImGuizmo::TRANSLATE;
+ ImGuizmo::MODE m_gizmo_mode = ImGuizmo::LOCAL;
+
+ bool m_show_object_list = true;
+ bool m_show_object_creator = true;
+ bool m_show_scene_info = true;
+ bool m_show_gizmo_controls = true;
+ };
+};