11#include < pch.h>
22#include < InspectorViewUIComponent.h>
3+ #include < UIComponentDrawerHelper.h>
34
45using namespace ZEngine ::Rendering::Components;
56
@@ -27,45 +28,37 @@ namespace Tetragrama::Components {
2728
2829 if (m_scene_entity) {
2930 if (m_scene_entity->HasComponent <NameComponent>()) {
30-
3131 if (ImGui::TreeNodeEx (reinterpret_cast <void *>(typeid (NameComponent).hash_code ()), ImGuiTreeNodeFlags_DefaultOpen, " %s" , " Name" )) {
3232 auto & component = m_scene_entity->GetComponent <NameComponent>();
3333
34- char buffer[1024 ];
35- memset (buffer, 0 , sizeof (buffer));
36- auto raw_entity_name = component.Name .c_str ();
37- strncpy (buffer, raw_entity_name, strlen (raw_entity_name));
38-
39- if (ImGui::InputText (" Entity name" , buffer, sizeof (buffer))) {
40- component.Name = std::string (buffer);
41- }
42-
34+ ImGui::Dummy (ImVec2 (0 , 3 ));
35+ Helpers::DrawInputTextControl (" Entity name" , component.Name , [&component](std::string_view value) { component.Name = value; });
4336 ImGui::TreePop ();
4437 }
38+ ImGui::Dummy (ImVec2 (0 , 5 ));
39+ ImGui::Separator ();
4540 }
4641
4742 if (m_scene_entity->HasComponent <TransformComponent>()) {
4843
4944 if (ImGui::TreeNodeEx (reinterpret_cast <void *>(typeid (TransformComponent).hash_code ()), ImGuiTreeNodeFlags_DefaultOpen, " %s" , " Transform" )) {
5045 auto & component = m_scene_entity->GetComponent <TransformComponent>();
5146
47+ ImGui::Dummy (ImVec2 (0 , 3 ));
5248 auto position = component.GetPosition ();
53- if (ImGui::DragFloat3 (" Position" , glm::value_ptr (position), 0 .1f )) {
54- component.SetPosition (position);
55- }
49+ Helpers::DrawVec3Control (" Position" , position, [&component](ZEngine::Maths::Vector3& value) { component.SetPosition (value); });
5650
5751 auto rotation_axis = component.GetRotationAxis ();
58- if (ImGui::DragFloat3 (" Rotation" , glm::value_ptr (rotation_axis), 0 .1f )) {
59- component.SetRotationAxis (rotation_axis);
60- }
52+ Helpers::DrawVec3Control (" Rotation" , rotation_axis, [&component](ZEngine::Maths::Vector3& value) { component.SetRotationAxis (value); });
6153
6254 auto scale_size = component.GetScaleSize ();
63- if (ImGui::DragFloat3 (" Scale" , glm::value_ptr (scale_size), 0 .1f )) {
64- component.SetScaleSize (scale_size);
65- }
55+ Helpers::DrawVec3Control (
56+ " Scale" , scale_size, [&component](ZEngine::Maths::Vector3& value) { component.SetScaleSize (value); }, 1 .0f );
6657
6758 ImGui::TreePop ();
6859 }
60+ ImGui::Dummy (ImVec2 (0 , 5 ));
61+ ImGui::Separator ();
6962 }
7063
7164 // Mesh Renderer
@@ -76,22 +69,23 @@ namespace Tetragrama::Components {
7669 auto geometry_type = component.GetGeometry ()->GetGeometryType ();
7770
7871 const char * geometry_type_value[] = {" Custom" , " Cube" , " Quad" , " Square" };
72+ auto type_name = geometry_type_value[(int ) geometry_type];
7973
80- char buffer[16 ];
81- memset (buffer, 0 , sizeof (buffer));
82- auto type_name = geometry_type_value[(int ) geometry_type];
83- strncpy (buffer, type_name, strlen (type_name));
84-
85- ImGui::InputText (" Mesh" , buffer, sizeof (buffer), ImGuiInputTextFlags_ReadOnly);
74+ ImGui::Dummy (ImVec2 (0 , 3 ));
75+ Helpers::DrawInputTextControl (" Mesh" , type_name, nullptr , true );
8676 ImGui::TreePop ();
8777 }
78+ ImGui::Dummy (ImVec2 (0 , 5 ));
79+ ImGui::Separator ();
8880 }
8981
9082 if (m_scene_entity->HasComponent <MaterialComponent>()) {
9183
9284 if (ImGui::TreeNodeEx (reinterpret_cast <void *>(typeid (MaterialComponent).hash_code ()), ImGuiTreeNodeFlags_DefaultOpen, " %s" , " Material" )) {
9385 ImGui::TreePop ();
9486 }
87+ ImGui::Dummy (ImVec2 (0 , 5 ));
88+ ImGui::Separator ();
9589 }
9690
9791 // Camera
@@ -103,6 +97,8 @@ namespace Tetragrama::Components {
10397 auto const camera_controller = component.GetCameraController ();
10498 auto camera_type = camera_controller->GetCamera ()->GetCameraType ();
10599
100+ ImGui::Dummy (ImVec2 (0 , 3 ));
101+
106102 bool is_primary_camera = component.IsPrimaryCamera ;
107103 if (ImGui::Checkbox (" Main Camera" , &is_primary_camera)) {
108104 component.IsPrimaryCamera = is_primary_camera;
@@ -111,25 +107,30 @@ namespace Tetragrama::Components {
111107 if (camera_type == ZEngine::Rendering::Cameras::CameraType::PERSPECTIVE) {
112108 auto perspective_controller = reinterpret_cast <ZEngine::Controllers::PerspectiveCameraController*>(camera_controller);
113109 float camera_fov = ZEngine::Maths::degrees (perspective_controller->GetFieldOfView ());
114- if (ImGui::DragFloat (" Field of View" , &camera_fov, 0 .2f , -180 .0f , 180 .f , " %.2f" )) {
115- perspective_controller->SetFieldOfView (ZEngine::Maths::radians (camera_fov));
116- }
110+
111+ Helpers::DrawDragFloatControl (
112+ " Field Of View" , camera_fov, 0 .2f , -180 .0f , 180 .f , " %.2f" ,
113+ [&perspective_controller](float value) { perspective_controller->SetFieldOfView (ZEngine::Maths::radians (value)); }, 120 .f );
114+
115+ ImGui::Dummy (ImVec2 (0 , 3 ));
117116
118117 // Clipping space
119118 if (ImGui::TreeNodeEx (reinterpret_cast <void *>(typeid (CameraComponent).hash_code () + 0x000000FF ), ImGuiTreeNodeFlags_DefaultOpen, " %s" , " Clipping Space" )) {
120119 float camera_near = perspective_controller->GetNear ();
121120 float camera_far = perspective_controller->GetFar ();
122121
123- if (ImGui::DragFloat (" Near" , &camera_near, 1 .0f , 0 .0f , 0 .0f , " %.2f" )) {
124- perspective_controller->SetNear (camera_near);
125- }
122+ Helpers::DrawDragFloatControl (
123+ " Near" , camera_near, 0 .2f , 0 .0f , 0 .0f , " %.2f" , [&perspective_controller](float value) { perspective_controller->SetNear (value); });
124+ ImGui::Dummy (ImVec2 (0 , 0 .5f ));
125+
126+ Helpers::DrawDragFloatControl (
127+ " Far" , camera_far, 0 .2f , 0 .0f , 0 .0f , " %.2f" , [&perspective_controller](float value) { perspective_controller->SetFar (value); });
126128
127- if (ImGui::DragFloat (" Far" , &camera_far, 0 .2f , 0 .0f , 0 .0f , " %.2f" )) {
128- perspective_controller->SetFar (camera_far);
129- }
130129 ImGui::TreePop ();
131130 }
132131
132+ ImGui::Dummy (ImVec2 (0 , 3 ));
133+
133134 // Camera Controller Type
134135 if (auto orbit_controller = dynamic_cast <ZEngine::Controllers::OrbitCameraController*>(camera_controller)) {
135136 if (ImGui::TreeNodeEx (reinterpret_cast <void *>(typeid (orbit_controller).hash_code ()), ImGuiTreeNodeFlags_DefaultOpen, " %s" , " Controller (Orbit)" )) {
@@ -139,16 +140,26 @@ namespace Tetragrama::Components {
139140 float yaw_angle = orbit_camera->GetYawAngle ();
140141 float pitch_angle = orbit_camera->GetPitchAngle ();
141142
142- ImGui::DragFloat (" Radius" , &radius);
143- ImGui::DragFloat (" X-axis angle" , &pitch_angle);
144- ImGui::DragFloat (" Y-axis angle" , &yaw_angle);
143+ Helpers::DrawDragFloatControl (" Radius" , radius);
144+ ImGui::Dummy (ImVec2 (0 , 0 .5f ));
145+
146+ Helpers::DrawDragFloatControl (" X-axis angle" , pitch_angle);
147+ ImGui::Dummy (ImVec2 (0 , 0 .5f ));
148+
149+ Helpers::DrawDragFloatControl (" Y-axis angle" , yaw_angle);
145150 ImGui::TreePop ();
146151 }
147152 }
148153 }
149154 ImGui::TreePop ();
150155 }
156+ ImGui::Dummy (ImVec2 (0 , 5 ));
157+ ImGui::Separator ();
151158 }
159+
160+ // Add Components
161+ ImGui::Dummy (ImVec2 (0 , 5 ));
162+ Helpers::DrawCenteredButtonControl (" Add Components" );
152163 }
153164
154165 ImGui::End ();
0 commit comments