From 0f9a8ff95e8192e2fbeb10ecc9a45b178e3ce93e Mon Sep 17 00:00:00 2001 From: Light Date: Sat, 7 Aug 2021 19:04:38 +0430 Subject: [PATCH] Update TransformComponent - TransformComponent now holds translation, rotation and scale instead of transform --- .../Scene/Components/TransformComponent.h | 29 +++++++++++++++---- Engine/src/Engine/Scene/Scene.cpp | 8 ++--- Engine/src/Engine/Scene/Scene.h | 4 ++- Mirror/src/MirrorLayer.h | 9 +++--- Mirror/src/Panels/PropertiesPanel.cpp | 4 +-- 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Engine/src/Engine/Scene/Components/TransformComponent.h b/Engine/src/Engine/Scene/Components/TransformComponent.h index 538a2d9..dd74066 100644 --- a/Engine/src/Engine/Scene/Components/TransformComponent.h +++ b/Engine/src/Engine/Scene/Components/TransformComponent.h @@ -3,23 +3,40 @@ #include "Base/Base.h" #include +#include namespace Light { struct TransformComponent { - glm::mat4 transform; + glm::vec3 translation; + glm::vec3 scale; + glm::vec3 rotation; - TransformComponent() = default; TransformComponent(const TransformComponent&) = default; - TransformComponent(const glm::mat4& _transform) - : transform(_transform) + TransformComponent(const glm::vec3& _translation = glm::vec3(0.0f, 0.0f, 0.0f), + const glm::vec3& _scale = glm::vec3(1.0f, 1.0f, 1.0f), + const glm::vec3& _rotation = glm::vec3(0.0f, 0.0f, 0.0f)) + + : translation(_translation), + scale(_scale), + rotation(_rotation) { } - operator glm::mat4&() { return transform; } - operator const glm::mat4& () const { return transform; } + const glm::mat4& GetTransform() const + { + return glm::translate(glm::mat4(1.0f), translation) * + + glm::rotate(glm::mat4(1.0f), rotation.x, glm::vec3(1.0f, 0.0f, 0.0f)) * + glm::rotate(glm::mat4(1.0f), rotation.y, glm::vec3(0.0f, 1.0f, 0.0f)) * + glm::rotate(glm::mat4(1.0f), rotation.z, glm::vec3(0.0f, 0.0f, 1.0f)) * + + glm::scale(glm::mat4(1.0f), scale); + } + + operator const glm::mat4& () const { return GetTransform(); } }; } \ No newline at end of file diff --git a/Engine/src/Engine/Scene/Scene.cpp b/Engine/src/Engine/Scene/Scene.cpp index eebf988..79428a3 100644 --- a/Engine/src/Engine/Scene/Scene.cpp +++ b/Engine/src/Engine/Scene/Scene.cpp @@ -50,7 +50,7 @@ namespace Light { void Scene::OnRender(const Ref& targetFrameBuffer /* = nullptr */) { Camera* sceneCamera = nullptr; - glm::mat4* sceneCameraTransform; + TransformComponent* sceneCameraTransform; /* scene camera */ { @@ -61,7 +61,7 @@ namespace Light { if (cameraComp.isPrimary) { sceneCamera = &cameraComp.camera; - sceneCameraTransform = &transformComp.transform; + sceneCameraTransform = &transformComp; } }); } @@ -75,7 +75,7 @@ namespace Light { m_Registry.group(entt::get). each([](TransformComponent& transformComp, SpriteRendererComponent& spriteRendererComp) { - Renderer::DrawQuad(transformComp.transform, spriteRendererComp.tint, spriteRendererComp.texture); + Renderer::DrawQuad(transformComp, spriteRendererComp.tint, spriteRendererComp.texture); }); Renderer::EndScene(); @@ -83,7 +83,7 @@ namespace Light { } } - Entity Scene::CreateEntity(const std::string& name, const glm::mat4& transform) + Entity Scene::CreateEntity(const std::string& name, const TransformComponent& transform) { Entity entity { m_Registry.create(), this } ; entity.AddComponent(transform); diff --git a/Engine/src/Engine/Scene/Scene.h b/Engine/src/Engine/Scene/Scene.h index 0843cea..20fd9bc 100644 --- a/Engine/src/Engine/Scene/Scene.h +++ b/Engine/src/Engine/Scene/Scene.h @@ -2,6 +2,8 @@ #include "Base/Base.h" +#include "Components/TransformComponent.h" + #include #include @@ -28,7 +30,7 @@ namespace Light { void OnUpdate(float deltaTime); void OnRender(const Ref& targetFrameBuffer = nullptr); - Entity CreateEntity(const std::string& name, const glm::mat4& transform); + Entity CreateEntity(const std::string& name, const TransformComponent& transform = TransformComponent()); }; } \ No newline at end of file diff --git a/Mirror/src/MirrorLayer.h b/Mirror/src/MirrorLayer.h index 0fad0f0..9f0e12c 100644 --- a/Mirror/src/MirrorLayer.h +++ b/Mirror/src/MirrorLayer.h @@ -41,18 +41,17 @@ namespace Light { glm::vec3 position = glm::vec3(rand() % 3000 - 1400.0f, rand() % 3000 - 1400.0f, 0.0f); glm::vec2 size = glm::vec2(250.0f, 250.0f); - Entity quad = m_Scene->CreateEntity("quad", glm::translate(glm::mat4(1.0f), { position.x, position.y, 0.0f }) * - glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f})); + Entity quad = m_Scene->CreateEntity("quad", TransformComponent(glm::vec3(position.x, position.y, 0.0f), glm::vec3(size.x, size.y, 1.0f))); quad.AddComponent(m_AwesomefaceTexture); quad.AddComponent("quad"); } - m_CameraEntity = m_Scene->CreateEntity("camera", glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, 1000.0f))); + m_CameraEntity = m_Scene->CreateEntity("camera", TransformComponent(glm::vec3(0.0f, 0.0f, 1000.0f))); m_CameraEntity.AddComponent(SceneCamera(), true); m_CameraEntity.AddComponent("Camera"); - m_NativeScriptEntity = m_Scene->CreateEntity("nsc", glm::translate(glm::mat4(1.0f), glm::vec3(0.0f)) * glm::scale(glm::mat4(1.0f), glm::vec3(250.0f, 250.0f, 1.0f))); + m_NativeScriptEntity = m_Scene->CreateEntity("nsc"); m_NativeScriptEntity.AddComponent(m_AwesomefaceTexture); m_NativeScriptEntity.AddComponent("NativeScript"); @@ -90,7 +89,7 @@ namespace Light { m_Direction.y = 0.0f; auto& transform = m_CameraEntity.GetComponent(); - transform = glm::translate(transform.transform, glm::vec3(m_Direction * m_Speed * deltaTime, 0.0)); + transform.translation += glm::vec3(m_Direction * m_Speed * deltaTime, 0.0); m_Scene->OnUpdate(deltaTime); } diff --git a/Mirror/src/Panels/PropertiesPanel.cpp b/Mirror/src/Panels/PropertiesPanel.cpp index 1c8bf0d..44365a1 100644 --- a/Mirror/src/Panels/PropertiesPanel.cpp +++ b/Mirror/src/Panels/PropertiesPanel.cpp @@ -35,8 +35,8 @@ namespace Light { if (ImGui::TreeNodeEx((void*)typeid(TransformComponent).hash_code(), ImGuiTreeNodeFlags_DefaultOpen, "Transform")) { - auto& transformComponent = m_EntityContext.GetComponent(); - ImGui::DragFloat3("Position", glm::value_ptr(transformComponent.transform[3]), 0.5f); + auto transform = m_EntityContext.GetComponent().GetTransform(); + ImGui::DragFloat3("Position", glm::value_ptr(transform[3]), 0.5f); ImGui::TreePop(); }