Skip to content

Commit a8fcd75

Browse files
added more component visualization
1 parent 684e06d commit a8fcd75

File tree

4 files changed

+406
-37
lines changed

4 files changed

+406
-37
lines changed

Tetragrama/src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ target_include_directories (${TARGET_NAME}
2525
${CMAKE_CURRENT_SOURCE_DIR}/Components
2626
${CMAKE_CURRENT_SOURCE_DIR}/Layers
2727
${CMAKE_CURRENT_SOURCE_DIR}/Messengers
28+
${CMAKE_CURRENT_SOURCE_DIR}/Helpers
2829
${ENLISTMENT_ROOT}/ZEngine/include
2930
)
3031

Tetragrama/src/Components/InspectorViewUIComponent.cpp

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <pch.h>
22
#include <InspectorViewUIComponent.h>
3+
#include <UIComponentDrawerHelper.h>
34

45
using 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

Comments
 (0)