blob: 866ae59bac4f3485abfa075fc42d6b82df55ee9c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#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();
void initialize_sphere_geometry();
private:
Scene m_scene;
Camera m_camera;
bool m_initialized = false;
Ref<Shader> m_sphere_shader;
Ref<VertexArray> m_sphere_vao;
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;
bool m_show_outline_controls = true;
glm::vec3 m_outline_color = glm::vec3(1.0f, 1.0f, 1.0f);
float m_outline_width = 0.25f;
Object m_black_hole;
bool m_black_hole_initialized = false;
};
};
|