2
3
4
5
10#include "Render/Vulkan/VulkanBuffer.h"
11#include "Render/Vulkan/VulkanRenderBackend.h"
13#define GLM_ENABLE_EXPERIMENTAL
14#include <glm/gtx/quaternion.hpp>
15#include <glm/gtc/type_ptr.hpp>
17#include <imgui_internal.h>
19#include "Render/FrameInfo.h"
20#include "World/World/World.h"
29 m_ModelBuffer = std::make_shared<VulkanBuffer>(
30 VulkanRenderBackend::GetState(),
33 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT ,
34 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
35 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
38 SetPosition({ 0.0f, 0.0f, 0.0f });
39 SetRotation({ 0.0f, 0.0f, 0.0f });
40 SetScale({ 1.0f, 1.0f, 1.0f });
59 ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2{ 0, 3.0f });
62
63
64 const float columeWidth = ImGuiH::GetLineItemSize().x * 5.0f;
67
68
69 const float itemWidth = (ImGui::GetContentRegionAvail().x - 11.0f * ImGuiH::GetLineItemSize().x) / 3.0f;
74 ImGui::PushID(
"TransformComponent Translate");
76 ImGui::Columns(2, 0,
false);
77 ImGui::SetColumnWidth(0, columeWidth);
82 static bool selected =
false;
83 if (ImGui::Selectable(
"Translate", selected)) selected = !selected;
84 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(4.0f, 4.0f));
85 ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 6.0f));
86 if (ImGui::BeginPopupContextItem())
88 ImGui::MenuItem(
"Copy");
89 ImGui::MenuItem(
"Paste");
90 ImGui::MenuItem(
"Copy Property Path");
92 ImGui::MenuItem(
"Disable");
93 ImGui::MenuItem(
"Delete");
95 ImGui::MenuItem(
"Set Key");
96 ImGui::MenuItem(
"Remove Key");
97 ImGui::MenuItem(
"Copy Key");
98 ImGui::MenuItem(
"Paste Key");
100 ImGui::MenuItem(
"Copy Animation");
101 ImGui::MenuItem(
"Paste Animation");
102 ImGui::MenuItem(
"Remove Animation");
104 if (ImGui::BeginMenu(
"Locks"))
106 ImGui::MenuItem(
"Lock");
107 ImGui::MenuItem(
"UnLock");
114 ImGui::SetItemTooltip(
"xformOp:translate(float3)\nRight click it to disable or delete it.");
115 ImGui::PopStyleVar(2);
122 ImGui::PushID(
"TransformComponent Translate X");
124 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });
125 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.9f, 0.2f, 0.2f, 1.0f });
126 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });
127 ImGui::Button(
"X", ImGuiH::GetLineItemSize());
128 ImGui::PopStyleColor(3);
130 ImGui::PushItemWidth(itemWidth);
131 if(ImGui::DragFloat(
"##X", &m_Transform.position.x, 0.1f, 0.0f, 0.0f,
"%.2f"))
136 ImGui::PopItemWidth();
138 if (ImGuiH::DrawResetIcon(m_Transform.position.x != 0.0f))
140 m_Transform.position.x = 0.0f;
150 ImGui::PushID(
"TransformComponent Translate Y");
152 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });
153 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.3f, 0.8f, 0.3f, 1.0f });
154 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });
155 ImGui::Button(
"Y", ImGuiH::GetLineItemSize());
156 ImGui::PopStyleColor(3);
158 ImGui::PushItemWidth(itemWidth);
159 if(ImGui::DragFloat(
"##Y", &m_Transform.position.y, 0.1f, 0.0f, 0.0f,
"%.2f"))
164 ImGui::PopItemWidth();
166 if (ImGuiH::DrawResetIcon(m_Transform.position.y != 0.0f))
168 m_Transform.position.y = 0.0f;
178 ImGui::PushID(
"TransformComponent Translate Z");
180 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });
181 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.2f, 0.35f, 0.9f, 1.0f });
182 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });
183 ImGui::Button(
"Z", ImGuiH::GetLineItemSize());
184 ImGui::PopStyleColor(3);
186 ImGui::PushItemWidth(itemWidth);
187 if(ImGui::DragFloat(
"##Z", &m_Transform.position.z, 0.1f, 0.0f, 0.0f,
"%.2f"))
192 ImGui::PopItemWidth();
194 if (ImGuiH::DrawResetIcon(m_Transform.position.z != 0.0f))
196 m_Transform.position.z = 0.0f;
210 ImGui::PushID(
"TransformComponent Rotate");
212 ImGui::Columns(2, 0,
false);
213 ImGui::SetColumnWidth(0, columeWidth);
215
216
217
218
219
220
221
222
223
224
229 static bool selected =
false;
230 if (ImGui::Selectable(
"Rotate", selected)) selected = !selected;
231 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(4.0f, 4.0f));
232 ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 6.0f));
233 if (ImGui::BeginPopupContextItem())
235 ImGui::MenuItem(
"Copy");
236 ImGui::MenuItem(
"Paste");
237 ImGui::MenuItem(
"Copy Property Path");
239 ImGui::MenuItem(
"Disable");
240 ImGui::MenuItem(
"Delete");
242 ImGui::MenuItem(
"Set Key");
243 ImGui::MenuItem(
"Remove Key");
244 ImGui::MenuItem(
"Copy Key");
245 ImGui::MenuItem(
"Paste Key");
247 ImGui::MenuItem(
"Copy Animation");
248 ImGui::MenuItem(
"Paste Animation");
249 ImGui::MenuItem(
"Remove Animation");
251 if (ImGui::BeginMenu(
"Locks"))
253 ImGui::MenuItem(
"Lock");
254 ImGui::MenuItem(
"UnLock");
261 ImGui::SetItemTooltip(
"xformOp:rotateXYZ(float3)\nRight click it to disable or delete it.\nLeft click it to change the rotate order, default is XYZ.");
262 ImGui::PopStyleVar(2);
269 ImGui::PushID(
"TransformComponent Rotate X");
271 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });
272 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.9f, 0.2f, 0.2f, 1.0f });
273 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });
274 ImGui::Button(
"X", ImGuiH::GetLineItemSize());
275 ImGui::PopStyleColor(3);
277 ImGui::PushItemWidth(itemWidth);
278 if(ImGui::DragFloat(
"##X", &m_Transform.rotation.x, 0.1f, 0.0f, 0.0f,
"%.2f"))
283 ImGui::PopItemWidth();
285 if (ImGuiH::DrawResetIcon(m_Transform.rotation.x != 0.0f))
287 m_Transform.rotation.x = 0.0f;
297 ImGui::PushID(
"TransformComponent Rotate Y");
299 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });
300 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.3f, 0.8f, 0.3f, 1.0f });
301 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });
302 ImGui::Button(
"Y", ImGuiH::GetLineItemSize());
303 ImGui::PopStyleColor(3);
305 ImGui::PushItemWidth(itemWidth);
306 if(ImGui::DragFloat(
"##Y", &m_Transform.rotation.y, 0.1f, 0.0f, 0.0f,
"%.2f"))
311 ImGui::PopItemWidth();
313 if (ImGuiH::DrawResetIcon(m_Transform.rotation.y != 0.0f))
315 m_Transform.rotation.y = 0.0f;
325 ImGui::PushID(
"TransformComponent Rotate Z");
327 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });
328 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.2f, 0.35f, 0.9f, 1.0f });
329 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });
330 ImGui::Button(
"Z", ImGuiH::GetLineItemSize());
331 ImGui::PopStyleColor(3);
333 ImGui::PushItemWidth(itemWidth);
334 if(ImGui::DragFloat(
"##Z", &m_Transform.rotation.z, 0.1f, 0.0f, 0.0f,
"%.2f"))
339 ImGui::PopItemWidth();
341 if (ImGuiH::DrawResetIcon(m_Transform.rotation.z != 0.0f))
343 m_Transform.rotation.z = 0.0f;
357 ImGui::PushID(
"TransformComponent Scale");
359 ImGui::Columns(2, 0,
false);
360 ImGui::SetColumnWidth(0, columeWidth);
365 static bool selected =
false;
366 if (ImGui::Selectable(
"Scale", selected)) selected = !selected;
367 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(4.0f, 4.0f));
368 ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 6.0f));
369 if (ImGui::BeginPopupContextItem())
371 ImGui::MenuItem(
"Copy");
372 ImGui::MenuItem(
"Paste");
373 ImGui::MenuItem(
"Copy Property Path");
375 ImGui::MenuItem(
"Disable");
376 ImGui::MenuItem(
"Delete");
378 ImGui::MenuItem(
"Set Key");
379 ImGui::MenuItem(
"Remove Key");
380 ImGui::MenuItem(
"Copy Key");
381 ImGui::MenuItem(
"Paste Key");
383 ImGui::MenuItem(
"Copy Animation");
384 ImGui::MenuItem(
"Paste Animation");
385 ImGui::MenuItem(
"Remove Animation");
387 if (ImGui::BeginMenu(
"Locks"))
389 ImGui::MenuItem(
"Lock");
390 ImGui::MenuItem(
"UnLock");
397 ImGui::SetItemTooltip(
"xformOp:scale(float3)\nRight click it for more options.");
398 ImGui::PopStyleVar(2);
401 ImGui::Button(ICON_MD_LINK, ImGuiH::GetLineItemSize());
408 ImGui::PushID(
"TransformComponent Scale X");
410 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });
411 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.9f, 0.2f, 0.2f, 1.0f });
412 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });
413 ImGui::Button(
"X", ImGuiH::GetLineItemSize());
414 ImGui::PopStyleColor(3);
416 ImGui::PushItemWidth(itemWidth);
417 if(ImGui::DragFloat(
"##X", &m_Transform.scale.x, 0.1f, 0.0f, 0.0f,
"%.2f"))
422 ImGui::PopItemWidth();
424 if (ImGuiH::DrawResetIcon(m_Transform.scale.x != 1.0f))
426 m_Transform.scale.x = 1.0f;
436 ImGui::PushID(
"TransformComponent Scale Y");
438 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });
439 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.3f, 0.8f, 0.3f, 1.0f });
440 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });
441 ImGui::Button(
"Y", ImGuiH::GetLineItemSize());
442 ImGui::PopStyleColor(3);
444 ImGui::PushItemWidth(itemWidth);
445 if(ImGui::DragFloat(
"##Y", &m_Transform.scale.y, 0.1f, 0.0f, 0.0f,
"%.2f"))
450 ImGui::PopItemWidth();
452 if (ImGuiH::DrawResetIcon(m_Transform.scale.y != 1.0f))
454 m_Transform.scale.y = 1.0f;
464 ImGui::PushID(
"TransformComponent Scale Z");
466 ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });
467 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.2f, 0.35f, 0.9f, 1.0f });
468 ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });
469 ImGui::Button(
"Z", ImGuiH::GetLineItemSize());
470 ImGui::PopStyleColor(3);
472 ImGui::PushItemWidth(itemWidth);
473 if(ImGui::DragFloat(
"##Z", &m_Transform.scale.z, 0.1f, 0.0f, 0.0f,
"%.2f"))
478 ImGui::PopItemWidth();
480 if (ImGuiH::DrawResetIcon(m_Transform.scale.z != 1.0f))
482 m_Transform.scale.z = 1.0f;
493 ImGui::PopStyleVar();
501 return Transform::GetRoatationMatrix(m_Transform.rotation);
518 return m_ModelBuffer->GetAddress();
525 m_ModelMatrix = m_Transform.ToMatrix();
526 m_ModelBuffer->WriteToBuffer(glm::value_ptr(m_ModelMatrix));
#define SPICES_PROFILE_ZONEN(...)
#define SPICES_PROFILE_ZONE
Component()=default
Constructor Function.
Component Class. This class defines the basic behaves of component. When we add an new Component,...
static FrameInfo & Get()
Get FrameInfo.
FrameInfo Class. This class defines the FrameInfo data.
World Class. This class defines the basic behaves of World. When we create an new world,...