From 099f43237debb61e3ac047f27451760599445eac Mon Sep 17 00:00:00 2001 From: greerdv Date: Fri, 23 Apr 2021 10:13:24 +0100 Subject: [PATCH 01/20] removing long deprecated transform scale functions --- .../AzCore/AzCore/Component/TransformBus.h | 40 -------- .../Components/TransformComponent.cpp | 93 ------------------- .../Components/TransformComponent.h | 10 -- .../ToolsComponents/TransformComponent.cpp | 70 -------------- .../ToolsComponents/TransformComponent.h | 10 -- .../Tests/ShapeColliderComponentTests.cpp | 2 +- 6 files changed, 1 insertion(+), 224 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/TransformBus.h b/Code/Framework/AzCore/AzCore/Component/TransformBus.h index 2003b949e2..e34fa6a97b 100644 --- a/Code/Framework/AzCore/AzCore/Component/TransformBus.h +++ b/Code/Framework/AzCore/AzCore/Component/TransformBus.h @@ -287,46 +287,6 @@ namespace AZ //! Scale modifiers //! @{ - //! @deprecated Use SetLocalScale() - //! Scales the entity along the world's axes. The origin of the axes is the entity's position in the world. - //! @param scale A three-dimensional vector that represents the multipliers with which to scale the entity in world space. - virtual void SetScale([[maybe_unused]] const AZ::Vector3& scale) {} - - //! @deprecated Use SetLocalScaleX() - //! Scales the entity along the world's X axis. The origin of the axis is the entity's position in the world. - //! @param scaleX The multiplier by which to scale the entity along the X axis in world space. - virtual void SetScaleX([[maybe_unused]] float scaleX) {} - - //! @deprecated Use SetLocalScaleY() - //! Scales the entity along the world's Y axis. The origin of the axis is the entity's position in the world. - //! @param scaleY The multiplier by which to scale the entity along the Y axis in world space. - virtual void SetScaleY([[maybe_unused]] float scaleY) {} - - //! @deprecated Use SetLocalScaleZ() - //! Scales the entity along the world's Z axis. The origin of the axis is the entity's position in the world. - //! @param scaleZ The multiplier by which to scale the entity along the Z axis in world space. - virtual void SetScaleZ([[maybe_unused]] float scaleZ) {} - - //! @deprecated Use GetLocalScale() - //! Gets the scale of the entity in world space. - //! @return A three-dimensional vector that represents the scale of the entity in world space. - virtual AZ::Vector3 GetScale() { return AZ::Vector3(FLT_MAX); } - - //! @deprecated Use GetLocalScale() - //! Gets the amount by which an entity is scaled along the world's X axis. - //! @return The amount by which an entity is scaled along the X axis in world space. - virtual float GetScaleX() { return FLT_MAX; } - - //! @deprecated Use GetLocalScale() - //! Gets the amount by which an entity is scaled along the world's Y axis. - //! @return The amount by which an entity is scaled along the Y axis in world space. - virtual float GetScaleY() { return FLT_MAX; } - - //! @deprecated Use GetLocalScale() - //! Gets the amount by which an entity is scaled along the world's Z axis. - //! @return The amount by which an entity is scaled along the Z axis in world space. - virtual float GetScaleZ() { return FLT_MAX; } - //! Set local scale of the transform. //! @param scale The new scale to set along three local axes. virtual void SetLocalScale([[maybe_unused]] const AZ::Vector3& scale) {} diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp index 910d6749af..4914279e7e 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp @@ -510,75 +510,6 @@ namespace AzFramework return m_localTM.GetRotation(); } - void TransformComponent::SetScale(const AZ::Vector3& scale) - { - AZ_Warning("TransformComponent", false, "SetScale is deprecated, please use SetLocalScale"); - - if (!m_worldTM.GetScale().IsClose(scale)) - { - AZ::Transform newWorldTransform = m_worldTM; - newWorldTransform.SetScale(scale); - SetWorldTM(newWorldTransform); - } - } - - void TransformComponent::SetScaleX(float scaleX) - { - AZ_Warning("TransformComponent", false, "SetScaleX is deprecated, please use SetLocalScaleX"); - - AZ::Vector3 newScale = m_worldTM.GetScale(); - newScale.SetX(scaleX); - AZ::Transform newWorldTransform = m_worldTM; - newWorldTransform.SetScale(newScale); - SetWorldTM(newWorldTransform); - } - - void TransformComponent::SetScaleY(float scaleY) - { - AZ_Warning("TransformComponent", false, "SetScaleY is deprecated, please use SetLocalScaleY"); - - AZ::Vector3 newScale = m_worldTM.GetScale(); - newScale.SetY(scaleY); - AZ::Transform newWorldTransform = m_worldTM; - newWorldTransform.SetScale(newScale); - SetWorldTM(newWorldTransform); - } - - void TransformComponent::SetScaleZ(float scaleZ) - { - AZ_Warning("TransformComponent", false, "SetScaleZ is deprecated, please use SetLocalScaleZ"); - - AZ::Vector3 newScale = m_worldTM.GetScale(); - newScale.SetZ(scaleZ); - AZ::Transform newWorldTransform = m_worldTM; - newWorldTransform.SetScale(newScale); - SetWorldTM(newWorldTransform); - } - - AZ::Vector3 TransformComponent::GetScale() - { - AZ_Warning("TransformComponent", false, "GetScale is deprecated, please use GetLocalScale"); - return m_worldTM.GetScale(); - } - - float TransformComponent::GetScaleX() - { - AZ_Warning("TransformComponent", false, "GetScaleX is deprecated, please use GetLocalScale"); - return m_worldTM.GetScale().GetX(); - } - - float TransformComponent::GetScaleY() - { - AZ_Warning("TransformComponent", false, "GetScaleY is deprecated, please use GetLocalScale"); - return m_worldTM.GetScale().GetY(); - } - - float TransformComponent::GetScaleZ() - { - AZ_Warning("TransformComponent", false, "GetScaleZ is deprecated, please use GetLocalScale"); - return m_worldTM.GetScale().GetZ(); - } - void TransformComponent::SetLocalScale(const AZ::Vector3& scale) { AZ::Transform newLocalTM = m_localTM; @@ -972,30 +903,6 @@ namespace AzFramework ->Event("GetLocalRotationQuaternion", &AZ::TransformBus::Events::GetLocalRotationQuaternion) ->Attribute("Rotation", AZ::Edit::Attributes::PropertyRotation) ->VirtualProperty("Rotation", "GetLocalRotationQuaternion", "SetLocalRotationQuaternion") - ->Event("SetScale", &AZ::TransformBus::Events::SetScale) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("SetScaleX", &AZ::TransformBus::Events::SetScaleX) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("SetScaleY", &AZ::TransformBus::Events::SetScaleY) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("SetScaleZ", &AZ::TransformBus::Events::SetScaleZ) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("GetScale", &AZ::TransformBus::Events::GetScale) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("GetScaleX", &AZ::TransformBus::Events::GetScaleX) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("GetScaleY", &AZ::TransformBus::Events::GetScaleY) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("GetScaleZ", &AZ::TransformBus::Events::GetScaleZ) - ->Attribute(AZ::Script::Attributes::Deprecated, true) - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) ->Event("SetLocalScale", &AZ::TransformBus::Events::SetLocalScale) ->Event("SetLocalScaleX", &AZ::TransformBus::Events::SetLocalScaleX) ->Event("SetLocalScaleY", &AZ::TransformBus::Events::SetLocalScaleY) diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h index abea0bd4dd..f78a621096 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h @@ -145,16 +145,6 @@ namespace AzFramework AZ::Quaternion GetLocalRotationQuaternion() override; // Scale Modifiers - void SetScale(const AZ::Vector3& scale) override; - void SetScaleX(float scaleX) override; - void SetScaleY(float scaleY) override; - void SetScaleZ(float scaleZ) override; - - AZ::Vector3 GetScale() override; - float GetScaleX() override; - float GetScaleY() override; - float GetScaleZ() override; - void SetLocalScale(const AZ::Vector3& scale) override; void SetLocalScaleX(float scaleX) override; void SetLocalScaleY(float scaleY) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp index 7ce11e5957..147667ae75 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp @@ -643,76 +643,6 @@ namespace AzToolsFramework return result; } - void TransformComponent::SetScale(const AZ::Vector3& newScale) - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "SetScale is deprecated, please use SetLocalScale"); - - AZ::Transform newWorldTransform = GetWorldTM(); - AZ::Vector3 prevScale = newWorldTransform.ExtractScale(); - if (!prevScale.IsClose(newScale)) - { - newWorldTransform.MultiplyByScale(newScale); - SetWorldTM(newWorldTransform); - } - } - - void TransformComponent::SetScaleX(float newScale) - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "SetScaleX is deprecated, please use SetLocalScaleX"); - - AZ::Transform newWorldTransform = GetWorldTM(); - AZ::Vector3 scale = newWorldTransform.ExtractScale(); - scale.SetX(newScale); - newWorldTransform.MultiplyByScale(scale); - SetWorldTM(newWorldTransform); - } - - void TransformComponent::SetScaleY(float newScale) - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "SetScaleY is deprecated, please use SetLocalScaleY"); - - AZ::Transform newWorldTransform = GetWorldTM(); - AZ::Vector3 scale = newWorldTransform.ExtractScale(); - scale.SetY(newScale); - newWorldTransform.MultiplyByScale(scale); - SetWorldTM(newWorldTransform); - } - - void TransformComponent::SetScaleZ(float newScale) - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "SetScaleZ is deprecated, please use SetLocalScaleZ"); - - AZ::Transform newWorldTransform = GetWorldTM(); - AZ::Vector3 scale = newWorldTransform.ExtractScale(); - scale.SetZ(newScale); - newWorldTransform.MultiplyByScale(scale); - SetWorldTM(newWorldTransform); - } - - AZ::Vector3 TransformComponent::GetScale() - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "GetScale is deprecated, please use GetLocalScale"); - return GetWorldTM().GetScale(); - } - - float TransformComponent::GetScaleX() - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "GetScaleX is deprecated, please use GetLocalScale"); - return GetWorldTM().GetScale().GetX(); - } - - float TransformComponent::GetScaleY() - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "GetScaleY is deprecated, please use GetLocalScale"); - return GetWorldTM().GetScale().GetY(); - } - - float TransformComponent::GetScaleZ() - { - AZ_Warning("AzToolsFramework::TransformComponent", false, "GetScaleZ is deprecated, please use GetLocalScale"); - return GetWorldTM().GetScale().GetZ(); - } - void TransformComponent::SetLocalScale(const AZ::Vector3& scale) { m_editorTransform.m_scale = scale; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h index 8327c5f128..0898e14d6b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h @@ -129,16 +129,6 @@ namespace AzToolsFramework AZ::Quaternion GetLocalRotationQuaternion() override; // Scale Modifiers - void SetScale(const AZ::Vector3& newScale) override; - void SetScaleX(float newScale) override; - void SetScaleY(float newScale) override; - void SetScaleZ(float newScale) override; - - AZ::Vector3 GetScale() override; - float GetScaleX() override; - float GetScaleY() override; - float GetScaleZ() override; - void SetLocalScale(const AZ::Vector3& scale) override; void SetLocalScaleX(float scaleX) override; void SetLocalScaleY(float scaleY) override; diff --git a/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp b/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp index 422385a777..8af9defff8 100644 --- a/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp +++ b/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp @@ -241,7 +241,7 @@ namespace PhysXEditorTests SetPolygonPrismHeight(entityId, 2.0f); // update the transform scale and non-uniform scale - AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetScale, AZ::Vector3(2.0f)); + AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalScale, AZ::Vector3(2.0f)); AZ::NonUniformScaleRequestBus::Event(entityId, &AZ::NonUniformScaleRequests::SetScale, AZ::Vector3(0.5f, 1.5f, 2.0f)); EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get()); From 40655eba030b0ed6c02cd795993beda647abef53 Mon Sep 17 00:00:00 2001 From: greerdv Date: Fri, 23 Apr 2021 11:30:17 +0100 Subject: [PATCH 02/20] removing element-wise scale setters from transform bus --- .../AzCore/AzCore/Component/TransformBus.h | 12 ----- .../Components/TransformComponent.cpp | 30 ------------- .../Components/TransformComponent.h | 3 -- .../ToolsComponents/TransformComponent.cpp | 18 -------- .../ToolsComponents/TransformComponent.h | 3 -- Code/Framework/Tests/TransformComponent.cpp | 45 ------------------- Gems/Blast/Code/Tests/Mocks/BlastMocks.h | 11 ----- 7 files changed, 122 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/TransformBus.h b/Code/Framework/AzCore/AzCore/Component/TransformBus.h index e34fa6a97b..64af853e99 100644 --- a/Code/Framework/AzCore/AzCore/Component/TransformBus.h +++ b/Code/Framework/AzCore/AzCore/Component/TransformBus.h @@ -291,18 +291,6 @@ namespace AZ //! @param scale The new scale to set along three local axes. virtual void SetLocalScale([[maybe_unused]] const AZ::Vector3& scale) {} - //! Set local scale of the transform on x-axis. - //! @param scaleX The new x-axis scale to set. - virtual void SetLocalScaleX([[maybe_unused]] float scaleX) {} - - //! Set local scale of the transform on y-axis. - //! @param scaleY The new y-axis scale to set. - virtual void SetLocalScaleY([[maybe_unused]] float scaleY) {} - - //! Set local scale of the transform on z-axis. - //! @param scaleZ The new z-axis scale to set. - virtual void SetLocalScaleZ([[maybe_unused]] float scaleZ) {} - //! Get the scale value on each axis in local space //! @return The scale value of type Vector3 along each axis in local space. virtual AZ::Vector3 GetLocalScale() { return AZ::Vector3(FLT_MAX); } diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp index 4914279e7e..4b805fd3e1 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp @@ -517,33 +517,6 @@ namespace AzFramework SetLocalTM(newLocalTM); } - void TransformComponent::SetLocalScaleX(float scaleX) - { - AZ::Transform newLocalTM = m_localTM; - AZ::Vector3 newScale = newLocalTM.GetScale(); - newScale.SetX(scaleX); - newLocalTM.SetScale(newScale); - SetLocalTM(newLocalTM); - } - - void TransformComponent::SetLocalScaleY(float scaleY) - { - AZ::Transform newLocalTM = m_localTM; - AZ::Vector3 newScale = newLocalTM.GetScale(); - newScale.SetY(scaleY); - newLocalTM.SetScale(newScale); - SetLocalTM(newLocalTM); - } - - void TransformComponent::SetLocalScaleZ(float scaleZ) - { - AZ::Transform newLocalTM = m_localTM; - AZ::Vector3 newScale = newLocalTM.GetScale(); - newScale.SetZ(scaleZ); - newLocalTM.SetScale(newScale); - SetLocalTM(newLocalTM); - } - AZ::Vector3 TransformComponent::GetLocalScale() { return m_localTM.GetScale(); @@ -904,9 +877,6 @@ namespace AzFramework ->Attribute("Rotation", AZ::Edit::Attributes::PropertyRotation) ->VirtualProperty("Rotation", "GetLocalRotationQuaternion", "SetLocalRotationQuaternion") ->Event("SetLocalScale", &AZ::TransformBus::Events::SetLocalScale) - ->Event("SetLocalScaleX", &AZ::TransformBus::Events::SetLocalScaleX) - ->Event("SetLocalScaleY", &AZ::TransformBus::Events::SetLocalScaleY) - ->Event("SetLocalScaleZ", &AZ::TransformBus::Events::SetLocalScaleZ) ->Event("GetLocalScale", &AZ::TransformBus::Events::GetLocalScale) ->Attribute("Scale", AZ::Edit::Attributes::PropertyScale) ->VirtualProperty("Scale", "GetLocalScale", "SetLocalScale") diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h index f78a621096..f393e22064 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h @@ -146,9 +146,6 @@ namespace AzFramework // Scale Modifiers void SetLocalScale(const AZ::Vector3& scale) override; - void SetLocalScaleX(float scaleX) override; - void SetLocalScaleY(float scaleY) override; - void SetLocalScaleZ(float scaleZ) override; AZ::Vector3 GetLocalScale() override; AZ::Vector3 GetWorldScale() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp index 147667ae75..671a56b4d4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp @@ -649,24 +649,6 @@ namespace AzToolsFramework TransformChanged(); } - void TransformComponent::SetLocalScaleX(float scaleX) - { - m_editorTransform.m_scale.SetX(scaleX); - TransformChanged(); - } - - void TransformComponent::SetLocalScaleY(float scaleY) - { - m_editorTransform.m_scale.SetY(scaleY); - TransformChanged(); - } - - void TransformComponent::SetLocalScaleZ(float scaleZ) - { - m_editorTransform.m_scale.SetZ(scaleZ); - TransformChanged(); - } - AZ::Vector3 TransformComponent::GetLocalScale() { return m_editorTransform.m_scale; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h index 0898e14d6b..bbdf770dab 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h @@ -130,9 +130,6 @@ namespace AzToolsFramework // Scale Modifiers void SetLocalScale(const AZ::Vector3& scale) override; - void SetLocalScaleX(float scaleX) override; - void SetLocalScaleY(float scaleY) override; - void SetLocalScaleZ(float scaleZ) override; AZ::Vector3 GetLocalScale() override; AZ::Vector3 GetWorldScale() override; diff --git a/Code/Framework/Tests/TransformComponent.cpp b/Code/Framework/Tests/TransformComponent.cpp index de172dc051..44008686cd 100644 --- a/Code/Framework/Tests/TransformComponent.cpp +++ b/Code/Framework/Tests/TransformComponent.cpp @@ -584,51 +584,6 @@ namespace UnitTest EXPECT_TRUE(scales.IsClose(expectedScales)); } - TEST_F(TransformComponentTransformMatrixSetGet, SetLocalScaleX_SimpleValues_Set) - { - float sx = 64.336f; - Transform tm; - TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 expectedScales = tm.GetScale(); - expectedScales.SetX(sx); - - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScaleX, sx); - - TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 scales = tm.GetScale(); - EXPECT_TRUE(scales.IsClose(expectedScales)); - } - - TEST_F(TransformComponentTransformMatrixSetGet, SetLocalScaleY_SimpleValues_Set) - { - float sy = 23.754f; - Transform tm; - TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 expectedScales = tm.GetScale(); - expectedScales.SetY(sy); - - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScaleY, sy); - - TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 scales = tm.GetScale(); - EXPECT_TRUE(scales.IsClose(expectedScales)); - } - - TEST_F(TransformComponentTransformMatrixSetGet, SetLocalScaleZ_SimpleValues_Set) - { - float sz = 65.140f; - Transform tm; - TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 expectedScales = tm.GetScale(); - expectedScales.SetZ(sz); - - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScaleZ, sz); - - TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 scales = tm.GetScale(); - EXPECT_TRUE(scales.IsClose(expectedScales)); - } - TEST_F(TransformComponentTransformMatrixSetGet, GetLocalScale_SimpleValues_Return) { float sx = 43.463f; diff --git a/Gems/Blast/Code/Tests/Mocks/BlastMocks.h b/Gems/Blast/Code/Tests/Mocks/BlastMocks.h index 95a16c311f..88c22cf67f 100644 --- a/Gems/Blast/Code/Tests/Mocks/BlastMocks.h +++ b/Gems/Blast/Code/Tests/Mocks/BlastMocks.h @@ -666,18 +666,7 @@ namespace Blast MOCK_METHOD1(RotateAroundLocalZ, void(float)); MOCK_METHOD0(GetLocalRotation, AZ::Vector3()); MOCK_METHOD0(GetLocalRotationQuaternion, AZ::Quaternion()); - MOCK_METHOD1(SetScale, void(const AZ::Vector3&)); - MOCK_METHOD1(SetScaleX, void(float)); - MOCK_METHOD1(SetScaleY, void(float)); - MOCK_METHOD1(SetScaleZ, void(float)); - MOCK_METHOD0(GetScale, AZ::Vector3()); - MOCK_METHOD0(GetScaleX, float()); - MOCK_METHOD0(GetScaleY, float()); - MOCK_METHOD0(GetScaleZ, float()); MOCK_METHOD1(SetLocalScale, void(const AZ::Vector3&)); - MOCK_METHOD1(SetLocalScaleX, void(float)); - MOCK_METHOD1(SetLocalScaleY, void(float)); - MOCK_METHOD1(SetLocalScaleZ, void(float)); MOCK_METHOD0(GetLocalScale, AZ::Vector3()); MOCK_METHOD0(GetWorldScale, AZ::Vector3()); MOCK_METHOD0(GetParentId, AZ::EntityId()); From b113f09a713833b1e98a4e7179568fce27a6fe06 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 27 Apr 2021 18:12:46 +0100 Subject: [PATCH 03/20] first pass of changing transform to use float for scale internally rather than Vector3 --- Code/CryEngine/CryCommon/IMovieSystem.h | 4 +- .../AzCore/AzCore/Component/TransformBus.h | 22 ++-- Code/Framework/AzCore/AzCore/Math/Spline.h | 4 +- .../AzCore/AzCore/Math/Transform.cpp | 14 +-- Code/Framework/AzCore/AzCore/Math/Transform.h | 23 ++-- .../AzCore/AzCore/Math/Transform.inl | 78 +++++++++---- .../AzCore/Math/TransformSerializer.cpp | 10 +- .../AzCore/Tests/Math/MathTestData.h | 4 +- Code/Framework/AzCore/Tests/Math/ObbTests.cpp | 8 +- .../Tests/Math/TransformPerformanceTests.cpp | 6 +- .../AzCore/Tests/Math/TransformTests.cpp | 36 ++---- Code/Framework/AzCore/Tests/ScriptMath.cpp | 24 ++-- .../Json/TransformSerializerTests.cpp | 6 +- .../Components/TransformComponent.cpp | 38 +++--- .../Components/TransformComponent.h | 5 +- .../Manipulators/ScaleManipulators.cpp | 4 +- .../AzToolsFramework/Slice/SliceUtilities.cpp | 2 - .../ToolsComponents/TransformComponent.cpp | 37 +++--- .../ToolsComponents/TransformComponent.h | 6 +- .../ToolsComponents/TransformComponentBus.h | 5 +- .../EditorTransformComponentSelection.cpp | 37 +++--- .../EditorTransformComponentSelection.h | 8 +- ...torTransformComponentSelectionRequestBus.h | 4 +- .../GridMate/Serialize/CompressionMarshal.cpp | 15 ++- Code/Framework/Tests/TransformComponent.cpp | 110 +++++++----------- .../Sandbox/Editor/Objects/SelectionGroup.cpp | 22 ---- Code/Sandbox/Editor/Objects/SelectionGroup.h | 1 - .../Editor/TrackView/TrackViewAnimNode.cpp | 18 +-- .../Editor/TrackView/TrackViewAnimNode.h | 4 +- .../Editor/TrackView/TrackViewSequence.cpp | 6 +- .../Containers/Utilities/SceneUtilities.cpp | 2 +- .../RowWidgets/TransformRowHandler.cpp | 12 +- .../SceneUI/RowWidgets/TransformRowHandler.h | 2 +- .../SceneUI/RowWidgets/TransformRowWidget.cpp | 28 ++--- .../SceneUI/RowWidgets/TransformRowWidget.h | 16 ++- .../RowWidgets/TransformRowWidgetTests.cpp | 20 ++-- .../Viewport/MaterialViewportRenderer.cpp | 4 +- .../CoreLights/PolygonLightDelegate.cpp | 1 - Gems/Blast/Code/Tests/BlastFamilyTest.cpp | 2 +- Gems/Blast/Code/Tests/Mocks/BlastMocks.h | 3 + .../EMotionFX/Rendering/Common/RenderUtil.cpp | 2 +- .../Code/Include/GradientSignal/Util.h | 9 +- .../Components/GradientTransformComponent.cpp | 13 ++- .../Components/GradientTransformComponent.h | 5 +- .../Source/Animation/AttachmentComponent.cpp | 4 +- .../Animation/EditorAttachmentComponent.cpp | 2 +- .../Scripting/EditorLookAtComponent.cpp | 14 ++- .../Code/Source/Shape/BoxShape.cpp | 2 +- .../Code/Source/Shape/PolygonPrismShape.cpp | 22 ++-- .../Code/Source/Shape/ShapeDisplay.h | 9 +- .../Code/Source/Shape/TubeShape.cpp | 32 ++--- Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp | 28 ++--- .../Code/Tests/CapsuleShapeTest.cpp | 18 +-- .../Code/Tests/CylinderShapeTest.cpp | 14 +-- Gems/LmbrCentral/Code/Tests/DiskShapeTest.cpp | 2 +- .../Code/Tests/PolygonPrismShapeTest.cpp | 12 +- Gems/LmbrCentral/Code/Tests/QuadShapeTest.cpp | 12 +- .../Code/Tests/SphereShapeTest.cpp | 14 +-- Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp | 2 +- .../Source/Cinematics/AnimAZEntityNode.cpp | 6 +- .../Code/Source/Cinematics/AnimAZEntityNode.h | 4 +- .../Source/Cinematics/AnimComponentNode.cpp | 17 ++- .../Source/Cinematics/AnimComponentNode.h | 6 +- .../Maestro/Code/Source/Cinematics/AnimNode.h | 4 +- Gems/PhysX/Code/Source/RigidBodyComponent.cpp | 17 +-- Gems/PhysX/Code/Source/RigidBodyComponent.h | 1 - Gems/PhysX/Code/Source/Utils.cpp | 6 +- .../PhysX/Code/Tests/ColliderScalingTests.cpp | 12 +- Gems/PhysX/Code/Tests/DebugDrawTests.cpp | 14 +-- .../Code/Tests/RigidBodyComponentTests.cpp | 8 +- .../Tests/ShapeColliderComponentTests.cpp | 12 +- .../Code/Include/ScriptCanvas/Core/Datum.cpp | 6 +- .../ScriptCanvas/Libraries/Entity/Rotate.cpp | 15 +-- .../Libraries/Entity/RotateMethod.cpp | 18 +-- .../Libraries/Math/TransformNodes.h | 4 +- .../RotateCameraLookAt.cpp | 16 +-- 76 files changed, 487 insertions(+), 546 deletions(-) diff --git a/Code/CryEngine/CryCommon/IMovieSystem.h b/Code/CryEngine/CryCommon/IMovieSystem.h index c22394e1b3..ca723eb6bd 100644 --- a/Code/CryEngine/CryCommon/IMovieSystem.h +++ b/Code/CryEngine/CryCommon/IMovieSystem.h @@ -696,7 +696,7 @@ public: //! Rotate entity node. virtual void SetRotate(float time, const Quat& quat) = 0; //! Scale entity node. - virtual void SetScale(float time, const Vec3& scale) = 0; + virtual void SetScale(float time, const float scale) = 0; //! Compute and return the offset which brings the current position to the given position virtual Vec3 GetOffsetPosition(const Vec3& position) { return position - GetPos(); } @@ -708,7 +708,7 @@ public: //! Get entity rotation at specified time. virtual Quat GetRotate(float time) = 0; //! Get current entity scale. - virtual Vec3 GetScale() = 0; + virtual float GetScale() = 0; // General Set param. // Set float/vec3/vec4 parameter at given time. diff --git a/Code/Framework/AzCore/AzCore/Component/TransformBus.h b/Code/Framework/AzCore/AzCore/Component/TransformBus.h index 64af853e99..95c8f6e719 100644 --- a/Code/Framework/AzCore/AzCore/Component/TransformBus.h +++ b/Code/Framework/AzCore/AzCore/Component/TransformBus.h @@ -288,18 +288,26 @@ namespace AZ //! Scale modifiers //! @{ //! Set local scale of the transform. - //! @param scale The new scale to set along three local axes. + //! @param scale The new scale to set. virtual void SetLocalScale([[maybe_unused]] const AZ::Vector3& scale) {} - //! Get the scale value on each axis in local space - //! @return The scale value of type Vector3 along each axis in local space. + //! Get the scale value in local space. + //! @return The scale value in local space. virtual AZ::Vector3 GetLocalScale() { return AZ::Vector3(FLT_MAX); } - //! Get the scale value on each axis in world space. - //! Note the transform will be skewed when it is rotated and has a parent transform scaled, in which - //! case the returned world-scale from this function will be inaccurate. - //! @return The scale value of type Vector3 along each axis in world space. + //! Get the scale value in world space. + //! @return The scale value in world space. virtual AZ::Vector3 GetWorldScale() { return AZ::Vector3(FLT_MAX); } + + + virtual void SetLocalUniformScale([[maybe_unused]] float scale) {} + + virtual float GetLocalUniformScale() { return FLT_MAX; } + + virtual float GetWorldUniformScale() { return FLT_MAX; } + + + //! @} //! Transform hierarchy diff --git a/Code/Framework/AzCore/AzCore/Math/Spline.h b/Code/Framework/AzCore/AzCore/Math/Spline.h index 912c10f46f..1adfc9b2fa 100644 --- a/Code/Framework/AzCore/AzCore/Math/Spline.h +++ b/Code/Framework/AzCore/AzCore/Math/Spline.h @@ -441,10 +441,10 @@ namespace AZ const Transform& worldFromLocal, const Vector3& src, const Vector3& dir, const Spline& spline) { Transform worldFromLocalNormalized = worldFromLocal; - const Vector3 scale = worldFromLocalNormalized.ExtractScale(); + const float scale = worldFromLocalNormalized.ExtractUniformScale(); const Transform localFromWorldNormalized = worldFromLocalNormalized.GetInverse(); - const Vector3 localRayOrigin = localFromWorldNormalized.TransformPoint(src) * scale.GetReciprocal(); + const Vector3 localRayOrigin = localFromWorldNormalized.TransformPoint(src) / scale; const Vector3 localRayDirection = localFromWorldNormalized.TransformVector(dir); return spline.GetNearestAddressRay(localRayOrigin, localRayDirection); } diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.cpp b/Code/Framework/AzCore/AzCore/Math/Transform.cpp index bb3f764492..ad57daa5e4 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Transform.cpp @@ -130,7 +130,7 @@ namespace AZ const Transform* transform = reinterpret_cast(classPtr); float data[NumFloats]; transform->GetRotation().StoreToFloat4(data); - transform->GetScale().StoreToFloat3(&data[4]); + Vector3(transform->GetScale()).StoreToFloat3(&data[4]); transform->GetTranslation().StoreToFloat3(&data[7]); for (int i = 0; i < NumFloats; i++) @@ -220,7 +220,7 @@ namespace AZ Vector3 translation = Vector3::CreateFromFloat3(&data[7]); *reinterpret_cast(classPtr) = - Transform::CreateFromQuaternionAndTranslation(rotation, translation) * Transform::CreateScale(scale); + Transform::CreateFromQuaternionAndTranslation(rotation, translation) * Transform::CreateUniformScale(scale.GetMaxElement()); return true; } @@ -250,7 +250,7 @@ namespace AZ Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> Attribute(Script::Attributes::Storage, Script::Attributes::StorageType::Value)-> Attribute(Script::Attributes::GenericConstructorOverride, &Internal::TransformDefaultConstructor)-> - Constructor()-> + Constructor()-> Method("GetBasis", &Transform::GetBasis)-> Method("GetBasisX", &Transform::GetBasisX)-> Method("GetBasisY", &Transform::GetBasisY)-> @@ -284,7 +284,7 @@ namespace AZ Method("GetRotation", &Transform::GetRotation)-> Method("SetRotation", &Transform::SetRotation)-> Method("GetScale", &Transform::GetScale)-> - Method("SetScale", &Transform::SetScale)-> + Method("SetScale", static_cast(&Transform::SetScale))-> Method("ExtractScale", &Transform::ExtractScale)-> Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> Method("MultiplyByScale", &Transform::MultiplyByScale)-> @@ -315,7 +315,7 @@ namespace AZ { Transform result; Matrix3x3 tmp = value; - result.m_scale = tmp.ExtractScale(); + result.m_scale = tmp.ExtractScale().GetMaxElement(); result.m_rotation = Quaternion::CreateFromMatrix3x3(tmp); result.m_translation = Vector3::CreateZero(); return result; @@ -325,7 +325,7 @@ namespace AZ { Transform result; Matrix3x3 tmp = value; - result.m_scale = tmp.ExtractScale(); + result.m_scale = tmp.ExtractScale().GetMaxElement(); result.m_rotation = Quaternion::CreateFromMatrix3x3(tmp); result.m_translation = p; return result; @@ -335,7 +335,7 @@ namespace AZ { Transform result; Matrix3x4 tmp = value; - result.m_scale = tmp.ExtractScale(); + result.m_scale = tmp.ExtractScale().GetMaxElement(); result.m_rotation = Quaternion::CreateFromMatrix3x4(tmp); result.m_translation = value.GetTranslation(); return result; diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.h b/Code/Framework/AzCore/AzCore/Math/Transform.h index eb1a12a912..ba08722338 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.h +++ b/Code/Framework/AzCore/AzCore/Math/Transform.h @@ -63,7 +63,7 @@ namespace AZ Transform() = default; //! Construct a transform from components. - Transform(const Vector3& translation, const Quaternion& rotation, const Vector3& scale); + Transform(const Vector3& translation, const Quaternion& rotation, const float scale); //! Creates an identity transform. static Transform CreateIdentity(); @@ -89,8 +89,11 @@ namespace AZ static Transform CreateFromMatrix3x4(const Matrix3x4& value); - //! Sets the matrix to be a scale matrix, translation is set to zero. - static Transform CreateScale(const Vector3& scale); + //! Sets the transform to apply (uniform) scale only, no rotation or translation. + static Transform CreateScale(const AZ::Vector3& scale); + + //! Sets the transform to apply (uniform) scale only, no rotation or translation. + static Transform CreateUniformScale(const float scale); //! Sets the matrix to be a translation matrix, rotation part is set to identity. static Transform CreateTranslation(const Vector3& translation); @@ -119,13 +122,19 @@ namespace AZ const Quaternion& GetRotation() const; void SetRotation(const Quaternion& rotation); - const Vector3& GetScale() const; + Vector3 GetScale() const; + float GetUniformScale() const; void SetScale(const Vector3& v); + void SetUniformScale(const float scale); - //! Sets the transforms scale to a unit value and returns the previous scale value. + //! Sets the transform's scale to a unit value and returns the previous scale value. Vector3 ExtractScale(); - void MultiplyByScale(const Vector3& scale); + //! Sets the transform's scale to a unit value and returns the previous scale value. + float ExtractUniformScale(); + + void MultiplyByScale(const AZ::Vector3& scale); + void MultiplyByUniformScale(float scale); Transform operator*(const Transform& rhs) const; Transform& operator*=(const Transform& rhs); @@ -159,7 +168,7 @@ namespace AZ private: Quaternion m_rotation; - Vector3 m_scale; + float m_scale; Vector3 m_translation; }; diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.inl b/Code/Framework/AzCore/AzCore/Math/Transform.inl index 63425e6e41..c92208da54 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.inl +++ b/Code/Framework/AzCore/AzCore/Math/Transform.inl @@ -12,7 +12,7 @@ namespace AZ { - AZ_MATH_INLINE Transform::Transform(const Vector3& translation, const Quaternion& rotation, const Vector3& scale) + AZ_MATH_INLINE Transform::Transform(const Vector3& translation, const Quaternion& rotation, const float scale) : m_translation(translation) , m_rotation(rotation) , m_scale(scale) @@ -25,7 +25,7 @@ namespace AZ { Transform result; result.m_rotation = Quaternion::CreateIdentity(); - result.m_scale = Vector3::CreateOne(); + result.m_scale = 1.0f; result.m_translation = Vector3::CreateZero(); return result; } @@ -49,7 +49,7 @@ namespace AZ { Transform result; result.m_rotation = q; - result.m_scale = Vector3::CreateOne(); + result.m_scale = 1.0f; result.m_translation = Vector3::CreateZero(); return result; } @@ -58,12 +58,22 @@ namespace AZ { Transform result; result.m_rotation = q; - result.m_scale = Vector3::CreateOne(); + result.m_scale = 1.0f; result.m_translation = p; return result; } - AZ_MATH_INLINE Transform Transform::CreateScale(const Vector3& scale) + AZ_MATH_INLINE Transform Transform::CreateScale(const AZ::Vector3& scale) + { + AZ_Warning("Transform", false, "CreateScale is deprecated, please use CreateUniformScale instead."); + Transform result; + result.m_rotation = Quaternion::CreateIdentity(); + result.m_scale = scale.GetMaxElement(); + result.m_translation = Vector3::CreateZero(); + return result; + } + + AZ_MATH_INLINE Transform Transform::CreateUniformScale(float scale) { Transform result; result.m_rotation = Quaternion::CreateIdentity(); @@ -76,7 +86,7 @@ namespace AZ { Transform result; result.m_rotation = Quaternion::CreateIdentity(); - result.m_scale = Vector3::CreateOne(); + result.m_scale = 1.0f; result.m_translation = translation; return result; } @@ -104,17 +114,17 @@ namespace AZ AZ_MATH_INLINE Vector3 Transform::GetBasisX() const { - return m_rotation.TransformVector(Vector3::CreateAxisX(m_scale.GetX())); + return m_rotation.TransformVector(Vector3::CreateAxisX(m_scale)); } AZ_MATH_INLINE Vector3 Transform::GetBasisY() const { - return m_rotation.TransformVector(Vector3::CreateAxisY(m_scale.GetY())); + return m_rotation.TransformVector(Vector3::CreateAxisY(m_scale)); } AZ_MATH_INLINE Vector3 Transform::GetBasisZ() const { - return m_rotation.TransformVector(Vector3::CreateAxisZ(m_scale.GetZ())); + return m_rotation.TransformVector(Vector3::CreateAxisZ(m_scale)); } AZ_MATH_INLINE void Transform::GetBasisAndTranslation(Vector3* basisX, Vector3* basisY, Vector3* basisZ, Vector3* pos) const @@ -150,24 +160,50 @@ namespace AZ m_rotation = rotation; } - AZ_MATH_INLINE const Vector3& Transform::GetScale() const + AZ_MATH_INLINE Vector3 Transform::GetScale() const + { + AZ_Warning("Transform", false, "GetScale is deprecated, please use GetUniformScale instead."); + return Vector3(m_scale); + } + + AZ_MATH_INLINE float Transform::GetUniformScale() const { return m_scale; } AZ_MATH_INLINE void Transform::SetScale(const Vector3& scale) + { + AZ_Warning("Transform", false, "SetScale is deprecated, please use SetUniformScale instead."); + m_scale = scale.GetMaxElement(); + } + + AZ_MATH_INLINE void Transform::SetUniformScale(const float scale) { m_scale = scale; } AZ_MATH_INLINE Vector3 Transform::ExtractScale() { - const Vector3 scale = m_scale; - m_scale = Vector3::CreateOne(); + AZ_Warning("Transform", false, "ExtractScale is deprecated, please use ExtractUniformScale instead."); + const float scale = m_scale; + m_scale = 1.0f; + return Vector3(scale); + } + + AZ_MATH_INLINE float Transform::ExtractUniformScale() + { + const float scale = m_scale; + m_scale = 1.0f; return scale; } - AZ_MATH_INLINE void Transform::MultiplyByScale(const Vector3& scale) + AZ_MATH_INLINE void Transform::MultiplyByScale(const AZ::Vector3& scale) + { + AZ_Warning("Transform", false, "MultiplyByScale is deprecated, please use MultiplyByUniformScale instead."); + m_scale *= scale.GetMaxElement(); + } + + AZ_MATH_INLINE void Transform::MultiplyByUniformScale(float scale) { m_scale *= scale; } @@ -207,7 +243,7 @@ namespace AZ // note - need to be careful about how to calculate inverse when there is non-uniform scale Transform out; out.m_rotation = m_rotation.GetConjugate(); - out.m_scale = m_scale.GetReciprocal(); + out.m_scale = 1.0f / m_scale; out.m_translation = -out.m_scale * (out.m_rotation.TransformVector(m_translation)); return out; } @@ -219,27 +255,27 @@ namespace AZ AZ_MATH_INLINE bool Transform::IsOrthogonal(float tolerance) const { - return m_scale.IsClose(Vector3::CreateOne(), tolerance); + return AZ::IsClose(m_scale, 1.0f, tolerance); } AZ_MATH_INLINE Transform Transform::GetOrthogonalized() const { Transform result; result.m_rotation = m_rotation; - result.m_scale = Vector3::CreateOne(); + result.m_scale = 1.0f; result.m_translation = m_translation; return result; } AZ_MATH_INLINE void Transform::Orthogonalize() { - *this = GetOrthogonalized(); + m_scale = 1.0f; } AZ_MATH_INLINE bool Transform::IsClose(const Transform& rhs, float tolerance) const { return m_rotation.IsClose(rhs.m_rotation, tolerance) - && m_scale.IsClose(rhs.m_scale, tolerance) + && AZ::IsClose(m_scale, rhs.m_scale, tolerance) && m_translation.IsClose(rhs.m_translation, tolerance); } @@ -268,21 +304,21 @@ namespace AZ AZ_MATH_INLINE void Transform::SetFromEulerDegrees(const Vector3& eulerDegrees) { m_translation = Vector3::CreateZero(); - m_scale = Vector3::CreateOne(); + m_scale = 1.0f; m_rotation.SetFromEulerDegrees(eulerDegrees); } AZ_MATH_INLINE void Transform::SetFromEulerRadians(const Vector3& eulerRadians) { m_translation = Vector3::CreateZero(); - m_scale = Vector3::CreateOne(); + m_scale = 1.0f; m_rotation.SetFromEulerRadians(eulerRadians); } AZ_MATH_INLINE bool Transform::IsFinite() const { return m_rotation.IsFinite() - && m_scale.IsFinite() + && IsFiniteFloat(m_scale) && m_translation.IsFinite(); } diff --git a/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp b/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp index 0a3e02ee0d..46440ac000 100644 --- a/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp @@ -58,9 +58,7 @@ namespace AZ } { - // Scale is transitioning to a single uniform scale value, but since it's still internally represented as a Vector3, - // we need to pick one number to use for load/store operations. - float scale = transformInstance->GetScale().GetMaxElement(); + float scale = transformInstance->GetUniformScale(); JSR::ResultCode loadResult = ContinueLoadingFromJsonObjectField(&scale, azrtti_typeid(), inputValue, ScaleTag, context); @@ -122,10 +120,8 @@ namespace AZ { AZ::ScopedContextPath subPathName(context, ScaleTag); - // Scale is transitioning to a single uniform scale value, but since it's still internally represented as a Vector3, - // we need to pick one number to use for load/store operations. - float scale = transformInstance->GetScale().GetMaxElement(); - float defaultScale = defaultTransformInstance ? defaultTransformInstance->GetScale().GetMaxElement() : 0.0f; + float scale = transformInstance->GetUniformScale(); + float defaultScale = defaultTransformInstance ? defaultTransformInstance->GetUniformScale() : 0.0f; JSR::ResultCode storeResult = ContinueStoringToJsonObjectField( outputValue, ScaleTag, &scale, defaultTransformInstance ? &defaultScale : nullptr, azrtti_typeid(), diff --git a/Code/Framework/AzCore/Tests/Math/MathTestData.h b/Code/Framework/AzCore/Tests/Math/MathTestData.h index cd3ade7854..c82c5caea7 100644 --- a/Code/Framework/AzCore/Tests/Math/MathTestData.h +++ b/Code/Framework/AzCore/Tests/Math/MathTestData.h @@ -61,8 +61,8 @@ namespace MathTestData }; static const AZ::Transform NonOrthogonalTransforms[] = { - AZ::Transform::CreateScale(AZ::Vector3(2.4f, 0.3f, 1.7f)), - AZ::Transform::CreateRotationX(2.2f) * AZ::Transform::CreateScale(AZ::Vector3(0.2f, 0.8f, 1.4f)) + AZ::Transform::CreateUniformScale(2.4f), + AZ::Transform::CreateRotationX(2.2f) * AZ::Transform::CreateUniformScale(0.8f) }; static const AZ::Transform OrthogonalTransforms[] = { diff --git a/Code/Framework/AzCore/Tests/Math/ObbTests.cpp b/Code/Framework/AzCore/Tests/Math/ObbTests.cpp index a90d66f288..de267b4265 100644 --- a/Code/Framework/AzCore/Tests/Math/ObbTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/ObbTests.cpp @@ -59,11 +59,11 @@ namespace UnitTest TEST(MATH_Obb, TestScaleTransform) { Obb obb = Obb::CreateFromPositionRotationAndHalfLengths(position, rotation, halfLengths); - Vector3 scaleFactors = Vector3(1.0f, 2.0f, 3.0f); - Transform transform = Transform::CreateScale(scaleFactors); + float scale = 3.0f; + Transform transform = Transform::CreateUniformScale(scale); obb = transform * obb; - EXPECT_THAT(obb.GetPosition(), IsClose(Vector3(1.0f, 4.0f, 9.0f))); - EXPECT_THAT(obb.GetHalfLengths(), IsClose(Vector3(0.5f, 1.0f, 1.5f))); + EXPECT_THAT(obb.GetPosition(), IsClose(Vector3(3.0f, 6.0f, 9.0f))); + EXPECT_THAT(obb.GetHalfLengths(), IsClose(Vector3(1.5f, 1.5f, 1.5f))); } TEST(MATH_Obb, TestSetPosition) diff --git a/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp b/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp index 400a845913..a9788375ad 100644 --- a/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp @@ -186,7 +186,7 @@ namespace Benchmark { for (auto& testData : m_testDataArray) { - AZ::Transform result = AZ::Transform::CreateScale(testData.v3); + AZ::Transform result = AZ::Transform::CreateUniformScale(testData.value[0]); benchmark::DoNotOptimize(result); } } @@ -350,7 +350,7 @@ namespace Benchmark { for (auto& testData : m_testDataArray) { - AZ::Vector3 result = testData.t1.GetScale(); + float result = testData.t1.GetUniformScale(); benchmark::DoNotOptimize(result); } } @@ -376,7 +376,7 @@ namespace Benchmark for (auto& testData : m_testDataArray) { AZ::Transform testTransform = testData.t2; - AZ::Vector3 result = testTransform.ExtractScale(); + float result = testTransform.ExtractUniformScale(); benchmark::DoNotOptimize(result); } } diff --git a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp index d0343211c3..49607573ce 100644 --- a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp @@ -184,12 +184,12 @@ namespace UnitTest TEST(MATH_Transform, CreateScale) { - const AZ::Vector3 scale(1.7f, 0.3f, 2.4f); - const AZ::Transform transform = AZ::Transform::CreateScale(scale); + const float scale = 1.7f; + const AZ::Transform transform = AZ::Transform::CreateUniformScale(scale); const AZ::Vector3 vector(0.2f, -1.6f, 0.4f); EXPECT_THAT(transform.GetTranslation(), IsClose(AZ::Vector3::CreateZero())); const AZ::Vector3 transformedVector = transform.TransformPoint(vector); - const AZ::Vector3 expected(0.34f, -0.48f, 0.96f); + const AZ::Vector3 expected(0.34f, -2.72f, 0.68f); EXPECT_THAT(transformedVector, IsClose(expected)); } @@ -237,10 +237,10 @@ namespace UnitTest TEST(MATH_Transform, MultiplyByTransform) { const AZ::Transform transform1 = AZ::Transform::CreateRotationY(0.3f); - const AZ::Transform transform2 = AZ::Transform::CreateScale(AZ::Vector3(1.3f, 1.5f, 0.4f)); + const AZ::Transform transform2 = AZ::Transform::CreateUniformScale(1.3f); const AZ::Transform transform3 = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.42f, 0.46f, -0.66f, 0.42f), AZ::Vector3(2.8f, -3.7f, 1.6f)); - const AZ::Transform transform4 = AZ::Transform::CreateRotationX(-0.7f) * AZ::Transform::CreateScale(AZ::Vector3(0.6f, 1.3f, 0.7f)); + const AZ::Transform transform4 = AZ::Transform::CreateRotationX(-0.7f) * AZ::Transform::CreateUniformScale(0.6f); AZ::Transform transform5 = transform1; transform5 *= transform4; const AZ::Vector3 vector(1.9f, 2.3f, 0.2f); @@ -341,10 +341,10 @@ namespace UnitTest AZ::Transform unscaledTransform = orthogonalTransform; unscaledTransform.ExtractScale(); EXPECT_THAT(unscaledTransform.GetScale(), IsClose(AZ::Vector3::CreateOne())); - const AZ::Vector3 scale(2.8f, 0.7f, 1.3f); + const float scale = 2.8f; AZ::Transform scaledTransform = orthogonalTransform; - scaledTransform.MultiplyByScale(scale); - EXPECT_THAT(scaledTransform.GetScale(), IsClose(scale)); + scaledTransform.MultiplyByUniformScale(scale); + EXPECT_NEAR(scaledTransform.GetUniformScale(), scale, AZ::Constants::Tolerance); } INSTANTIATE_TEST_CASE_P(MATH_Transform, TransformScaleFixture, ::testing::ValuesIn(MathTestData::OrthogonalTransforms)); @@ -353,24 +353,11 @@ namespace UnitTest { EXPECT_TRUE(AZ::Transform::CreateIdentity().IsOrthogonal()); EXPECT_TRUE(AZ::Transform::CreateRotationZ(0.3f).IsOrthogonal()); - EXPECT_FALSE(AZ::Transform::CreateScale(AZ::Vector3(0.8f, 0.3f, 1.2f)).IsOrthogonal()); + EXPECT_FALSE(AZ::Transform::CreateUniformScale(0.8f).IsOrthogonal()); EXPECT_TRUE(AZ::Transform::CreateFromQuaternion(AZ::Quaternion(-0.52f, -0.08f, 0.56f, 0.64f)).IsOrthogonal()); AZ::Transform transform; transform.SetFromEulerRadians(AZ::Vector3(0.2f, 0.4f, 0.1f)); EXPECT_TRUE(transform.IsOrthogonal()); - - // want to test each possible way the transform could fail to be orthogonal, which we can do by testing for one - // axis, then using a rotation which cycles the axes - const AZ::Transform axisCycle = AZ::Transform::CreateFromQuaternion(AZ::Quaternion(0.5f, 0.5f, 0.5f, 0.5f)); - - // a transform which is normalized in 2 axes, but not the third - AZ::Transform nonOrthogonalTransform1 = AZ::Transform::CreateScale(AZ::Vector3(1.0f, 1.0f, 2.0f)); - - for (int i = 0; i < 3; i++) - { - EXPECT_FALSE(nonOrthogonalTransform1.IsOrthogonal()); - nonOrthogonalTransform1 = axisCycle * nonOrthogonalTransform1; - } } using TransformSetFromEulerDegreesFixture = ::testing::TestWithParam; @@ -465,10 +452,11 @@ namespace UnitTest AZ::Transform* deserializedTransform = AZ::Utils::LoadObjectFromBuffer(objectStreamBuffer, strlen(objectStreamBuffer) + 1); const AZ::Vector3 expectedTranslation(513.7845459f, 492.5420837f, 32.0000000f); - const AZ::Vector3 expectedScale(1.5f, 0.5f, 1.2f); + const float expectedScale = 1.5f; const AZ::Quaternion expectedRotation(0.2624075f, 0.4405251f, 0.2029076f, 0.8342113f); const AZ::Transform expectedTransform = - AZ::Transform::CreateFromQuaternionAndTranslation(expectedRotation, expectedTranslation) * AZ::Transform::CreateScale(expectedScale); + AZ::Transform::CreateFromQuaternionAndTranslation(expectedRotation, expectedTranslation) * + AZ::Transform::CreateUniformScale(expectedScale); EXPECT_TRUE(deserializedTransform->IsClose(expectedTransform)); azfree(deserializedTransform); diff --git a/Code/Framework/AzCore/Tests/ScriptMath.cpp b/Code/Framework/AzCore/Tests/ScriptMath.cpp index cb673e92e7..493a21de36 100644 --- a/Code/Framework/AzCore/Tests/ScriptMath.cpp +++ b/Code/Framework/AzCore/Tests/ScriptMath.cpp @@ -1275,10 +1275,10 @@ namespace UnitTest script->Execute("AZTestAssert(t1:TransformVector(Vector3(1, 0, 0)):IsClose(Vector3(1, 0, 0)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 1, 0)):IsClose(Vector3(0, 0.866, 0.5)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 0, 1)):IsClose(Vector3(0, -0.5, 0.866)))"); - script->Execute("t1 = Transform.CreateScale(Vector3(1, 2, 3))"); - script->Execute("AZTestAssert(t1:TransformVector(Vector3(1, 0, 0)):IsClose(Vector3(1, 0, 0)))"); + script->Execute("t1 = Transform.CreateScale(2)"); + script->Execute("AZTestAssert(t1:TransformVector(Vector3(1, 0, 0)):IsClose(Vector3(2, 0, 0)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 1, 0)):IsClose(Vector3(0, 2, 0)))"); - script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 0, 1)):IsClose(Vector3(0, 0, 3)))"); + script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 0, 1)):IsClose(Vector3(0, 0, 2)))"); script->Execute("t1 = Transform.CreateTranslation(Vector3(1, 2, 3))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(1, 0, 0)):IsClose(Vector3(1, 0, 0)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 1, 0)):IsClose(Vector3(0, 1, 0)))"); @@ -1341,19 +1341,19 @@ namespace UnitTest script->Execute("AZTestAssert(t3:GetTranslation():IsClose(Vector3(-5.90, 25.415, 19.645), 0.001))"); ////test inverse, should handle non-orthogonal matrices - script->Execute("t1 = Transform.CreateRotationX(1) * Transform.CreateScale(Vector3(1, 2, 3))"); + script->Execute("t1 = Transform.CreateRotationX(1) * Transform.CreateScale(2)"); script->Execute("AZTestAssert((t1*t1:GetInverse()):IsClose(Transform.CreateIdentity()))"); ////scale access - script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(40)) * Transform.CreateScale(Vector3(2, 3, 4))"); - script->Execute("AZTestAssert(t1:GetScale():IsClose(Vector3(2, 3, 4)))"); - script->Execute("AZTestAssert(t1:ExtractScale():IsClose(Vector3(2, 3, 4)))"); - script->Execute("AZTestAssert(t1:GetScale():IsClose(Vector3.CreateOne()))"); - script->Execute("t1:MultiplyByScale(Vector3(3, 4, 5))"); - script->Execute("AZTestAssert(t1:GetScale():IsClose(Vector3(3, 4, 5)))"); + script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(40)) * Transform.CreateScale(3)"); + script->Execute("AZTestAssert(t1:GetScale():IsClose(3))"); + script->Execute("AZTestAssert(t1:ExtractScale():IsClose(3))"); + script->Execute("AZTestAssert(t1:GetScale():IsClose(1))"); + script->Execute("t1:MultiplyByScale(2)"); + script->Execute("AZTestAssert(t1:GetScale():IsClose(2))"); ////orthogonalize - script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateScale(Vector3(2, 3, 4))"); + script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateScale(3)"); script->Execute("t1:SetTranslation(Vector3(1,2,3))"); script->Execute("t2 = t1:GetOrthogonalized()"); script->Execute("AZTestAssertFloatClose(t2:GetBasisX():GetLength(), 1)"); @@ -1372,7 +1372,7 @@ namespace UnitTest script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30))"); script->Execute("t1:SetTranslation(Vector3(1, 2, 3))"); script->Execute("AZTestAssert(t1:IsOrthogonal(0.05))"); - script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateScale(Vector3(2, 3, 4))"); + script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateScale(2)"); script->Execute("AZTestAssert( not t1:IsOrthogonal(0.05))"); ////IsClose diff --git a/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp b/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp index 12711b1e1a..7febbbb5d9 100644 --- a/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp +++ b/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp @@ -44,7 +44,7 @@ namespace JsonSerializationTests AZStd::shared_ptr CreateFullySetInstance() override { return AZStd::make_shared( - AZ::Vector3(1.0f, 2.0f, 3.0f), AZ::Quaternion(0.25f, 0.5f, 0.75f, 1.0f), AZ::Vector3(9.0f)); + AZ::Vector3(1.0f, 2.0f, 3.0f), AZ::Quaternion(0.25f, 0.5f, 0.75f, 1.0f), 9.0f); } AZStd::string_view GetJsonForFullySetInstance() override @@ -95,7 +95,7 @@ namespace JsonSerializationTests AZ::Transform expectedTransform( AZ::Vector3(2.25f, 3.5f, 4.75f), AZ::Quaternion(0.25f, 0.5f, 0.75f, 1.0f), - AZ::Vector3(5.5f)); + 5.5f); rapidjson::Document json; json.Parse(R"({ "Translation": [ 2.25, 3.5, 4.75 ], "Rotation": [ 0.25, 0.5, 0.75, 1.0 ], "Scale": 5.5 })"); @@ -189,7 +189,7 @@ namespace JsonSerializationTests TEST_F(JsonTransformSerializerTests, Load_FullySetTransform_ReturnsSuccessWithOnlyScale) { AZ::Transform testTransform = AZ::Transform::CreateIdentity(); - AZ::Transform expectedTransform = AZ::Transform::CreateScale(AZ::Vector3(5.5f)); + AZ::Transform expectedTransform = AZ::Transform::CreateUniformScale(5.5f); rapidjson::Document json; json.Parse(R"({ "Scale" : 5.5 })"); diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp index 4b805fd3e1..b1b2378174 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp @@ -447,29 +447,12 @@ namespace AzFramework static AZ::Transform RotateAroundLocalHelper(float eulerAngleRadian, const AZ::Transform& localTM, AZ::Vector3 axis) { - //get the existing translation and scale - AZ::Vector3 translation = localTM.GetTranslation(); - AZ::Vector3 scale = localTM.GetScale(); - //normalize the axis before creating rotation axis.Normalize(); AZ::Quaternion rotate = AZ::Quaternion::CreateFromAxisAngle(axis, eulerAngleRadian); - //create new rotation transform - AZ::Quaternion currentRotate = localTM.GetRotation(); - AZ::Quaternion newRotate = rotate * currentRotate; - newRotate.Normalize(); - - //scale - AZ::Transform newLocalTM = AZ::Transform::CreateScale(scale); - - //rotate - AZ::Transform rotateLocalTM = AZ::Transform::CreateFromQuaternion(newRotate); - newLocalTM = rotateLocalTM * newLocalTM; - - //translate - newLocalTM.SetTranslation(translation); - + AZ::Transform newLocalTM = localTM; + newLocalTM.SetRotation((rotate * localTM.GetRotation()).GetNormalized()); return newLocalTM; } @@ -527,6 +510,23 @@ namespace AzFramework return m_worldTM.GetScale(); } + void TransformComponent::SetLocalUniformScale(float scale) + { + AZ::Transform newLocalTM = m_localTM; + newLocalTM.SetUniformScale(scale); + SetLocalTM(newLocalTM); + } + + float TransformComponent::GetLocalUniformScale() + { + return m_localTM.GetUniformScale(); + } + + float TransformComponent::GetWorldUniformScale() + { + return m_worldTM.GetUniformScale(); + } + AZStd::vector TransformComponent::GetChildren() { AZStd::vector children; diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h index f393e22064..f0fa1b6985 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.h @@ -146,10 +146,13 @@ namespace AzFramework // Scale Modifiers void SetLocalScale(const AZ::Vector3& scale) override; - AZ::Vector3 GetLocalScale() override; AZ::Vector3 GetWorldScale() override; + void SetLocalUniformScale(float scale) override; + float GetLocalUniformScale() override; + float GetWorldUniformScale() override; + // Transform hierarchy AZStd::vector GetChildren() override; AZStd::vector GetAllDescendants() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp index 3af09f644d..caeedd834f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp @@ -82,9 +82,7 @@ namespace AzToolsFramework m_uniformScaleManipulator->SetVisualOrientationOverride( QuaternionFromTransformNoScaling(localTransform)); - m_uniformScaleManipulator->SetLocalTransform( - AZ::Transform::CreateTranslation(localTransform.GetTranslation()) * - AZ::Transform::CreateScale(localTransform.GetScale())); + m_uniformScaleManipulator->SetLocalOrientation(AZ::Quaternion::CreateIdentity()); } void ScaleManipulators::SetLocalPositionImpl(const AZ::Vector3& localPosition) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceUtilities.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceUtilities.cpp index 75070d9b41..e13d4fdb47 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceUtilities.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceUtilities.cpp @@ -1475,10 +1475,8 @@ namespace AzToolsFramework // to avoid pushing them to the slice. // Only scale is preserved on the root entity of a slice. transformComponent->SetParent(AZ::EntityId()); - AZ::Vector3 scale = transformComponent->GetLocalScale(); transformComponent->SetWorldTranslation(AZ::Vector3::CreateZero()); transformComponent->SetLocalRotation(AZ::Vector3::CreateZero()); - transformComponent->SetLocalScale(scale); } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp index 671a56b4d4..bcd8e3fa4a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp @@ -46,9 +46,9 @@ namespace AzToolsFramework const AZ::u32 ParentEntityCRC = AZ_CRC("Parent Entity", 0x5b1b276c); // Decompose a transform into euler angles in degrees, scale (along basis, any shear will be dropped), and translation. - void DecomposeTransform(const AZ::Transform& transform, AZ::Vector3& translation, AZ::Vector3& rotation, AZ::Vector3& scale) + void DecomposeTransform(const AZ::Transform& transform, AZ::Vector3& translation, AZ::Vector3& rotation, float& scale) { - scale = transform.GetScale(); + scale = transform.GetUniformScale(); translation = transform.GetTranslation(); rotation = transform.GetRotation().GetEulerDegrees(); } @@ -323,7 +323,7 @@ namespace AzToolsFramework AZ::Transform TransformComponent::GetLocalScaleTM() const { - return AZ::Transform::CreateScale(m_editorTransform.m_scale); + return AZ::Transform::CreateUniformScale(m_editorTransform.m_scale); } const AZ::Transform& TransformComponent::GetLocalTM() @@ -340,7 +340,8 @@ namespace AzToolsFramework // given a local transform, update local transform. void TransformComponent::SetLocalTM(const AZ::Transform& finalTx) { - AZ::Vector3 tx, rot, scale; + AZ::Vector3 tx, rot; + float scale; Internal::DecomposeTransform(finalTx, tx, rot, scale); m_editorTransform.m_translate = tx; @@ -645,13 +646,13 @@ namespace AzToolsFramework void TransformComponent::SetLocalScale(const AZ::Vector3& scale) { - m_editorTransform.m_scale = scale; + m_editorTransform.m_scale = scale.GetMaxElement(); TransformChanged(); } AZ::Vector3 TransformComponent::GetLocalScale() { - return m_editorTransform.m_scale; + return AZ::Vector3(m_editorTransform.m_scale); } AZ::Vector3 TransformComponent::GetWorldScale() @@ -659,6 +660,22 @@ namespace AzToolsFramework return GetWorldTM().GetScale(); } + void TransformComponent::SetLocalUniformScale(float scale) + { + m_editorTransform.m_scale = scale; + TransformChanged(); + } + + float TransformComponent::GetLocalUniformScale() + { + return m_editorTransform.m_scale; + } + + float TransformComponent::GetWorldUniformScale() + { + return GetWorldTM().GetUniformScale(); + } + const AZ::Transform& TransformComponent::GetParentWorldTM() const { auto parent = GetParentTransformComponent(); @@ -1062,12 +1079,6 @@ namespace AzToolsFramework ModifyEditorTransform(m_editorTransform.m_rotate, data, parent); } - void TransformComponent::ScaleBy(const AZ::Vector3& data) - { - //scale is always local - ModifyEditorTransform(m_editorTransform.m_scale, data, AZ::Transform::Identity()); - } - AZ::EntityId TransformComponent::GetSliceEntityParentId() { return GetParentId(); @@ -1214,7 +1225,7 @@ namespace AzToolsFramework { AzToolsFramework::ScopedUndoBatch undo("Reset transform values"); m_editorTransform.m_translate = AZ::Vector3::CreateZero(); - m_editorTransform.m_scale = AZ::Vector3::CreateOne(); + m_editorTransform.m_scale = 1.0f; m_editorTransform.m_rotate = AZ::Vector3::CreateZero(); OnTransformChanged(); SetDirty(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h index bbdf770dab..06d1101c58 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.h @@ -130,10 +130,13 @@ namespace AzToolsFramework // Scale Modifiers void SetLocalScale(const AZ::Vector3& scale) override; - AZ::Vector3 GetLocalScale() override; AZ::Vector3 GetWorldScale() override; + void SetLocalUniformScale(float scale) override; + float GetLocalUniformScale() override; + float GetWorldUniformScale() override; + AZ::EntityId GetParentId() override; AZ::TransformInterface* GetParent() override; void SetParent(AZ::EntityId parentId) override; @@ -147,7 +150,6 @@ namespace AzToolsFramework // TransformComponentMessages::Bus void TranslateBy(const AZ::Vector3&) override; void RotateBy(const AZ::Vector3&) override; // euler in degrees - void ScaleBy(const AZ::Vector3&) override; const EditorTransform& GetLocalEditorTransform() override; void SetLocalEditorTransform(const EditorTransform& dest) override; bool IsTransformLocked() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h index f1cb8459c4..6082bda4bd 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h @@ -30,7 +30,7 @@ namespace AzToolsFramework EditorTransform() { m_translate = AZ::Vector3::CreateZero(); - m_scale = AZ::Vector3::CreateOne(); + m_scale = 1.0f; m_rotate = AZ::Vector3::CreateZero(); m_locked = false; } @@ -41,7 +41,7 @@ namespace AzToolsFramework } AZ::Vector3 m_translate; //! Translation in engine units (meters) - AZ::Vector3 m_scale; + float m_scale; AZ::Vector3 m_rotate; //! Rotation in degrees bool m_locked; }; @@ -65,7 +65,6 @@ namespace AzToolsFramework virtual void TranslateBy(const AZ::Vector3&) = 0; virtual void RotateBy(const AZ::Vector3&) = 0; - virtual void ScaleBy(const AZ::Vector3&) = 0; virtual bool IsTransformLocked() = 0; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index 433602e6d8..65ba51908d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -1472,7 +1472,7 @@ namespace AzToolsFramework { const AZ::Quaternion rotation = entityIdLookupIt->second.m_initial.GetRotation().GetNormalized(); const AZ::Vector3 position = entityIdLookupIt->second.m_initial.GetTranslation(); - const AZ::Vector3 scale = entityIdLookupIt->second.m_initial.GetScale(); + const float scale = entityIdLookupIt->second.m_initial.GetUniformScale(); const AZ::Vector3 centerOffset = CalculateCenterOffset(entityId, m_pivotMode); @@ -1483,7 +1483,7 @@ namespace AzToolsFramework AZ::Transform::CreateFromQuaternion(rotation) * AZ::Transform::CreateTranslation(centerOffset) * offsetRotation * AZ::Transform::CreateTranslation(-centerOffset) * - AZ::Transform::CreateScale(scale)); + AZ::Transform::CreateUniformScale(scale)); } break; case ReferenceFrame::Parent: @@ -1595,16 +1595,15 @@ namespace AzToolsFramework } const AZ::Transform initial = entityIdLookupIt->second.m_initial; - const AZ::Vector3 initialScale = initial.GetScale(); + const float initialScale = initial.GetUniformScale(); const auto sumVectorElements = [](const AZ::Vector3& vec) { return vec.GetX() + vec.GetY() + vec.GetZ(); }; - const AZ::Vector3 uniformScale = AZ::Vector3(action.m_start.m_sign * sumVectorElements(action.LocalScaleOffset())); - const AZ::Vector3 scale = (AZ::Vector3::CreateOne() + - (uniformScale / initialScale)).GetClamp(AZ::Vector3(AZ::MinTransformScale), AZ::Vector3(AZ::MaxTransformScale)); - const AZ::Transform scaleTransform = AZ::Transform::CreateScale(scale); + const float uniformScale = action.m_start.m_sign * sumVectorElements(action.LocalScaleOffset()); + const float scale = AZ::GetClamp(1.0f + uniformScale / initialScale, AZ::MinTransformScale, AZ::MaxTransformScale); + const AZ::Transform scaleTransform = AZ::Transform::CreateUniformScale(scale); if (action.m_modifiers.Alt()) { @@ -1866,7 +1865,7 @@ namespace AzToolsFramework CopyOrientationToSelectedEntitiesGroup(QuaternionFromTransformNoScaling(worldFromLocal)); break; case Mode::Scale: - CopyScaleToSelectedEntitiesIndividualWorld(worldFromLocal.GetScale()); + CopyScaleToSelectedEntitiesIndividualWorld(worldFromLocal.GetUniformScale()); break; case Mode::Translation: CopyTranslationToSelectedEntitiesGroup(worldFromLocal.GetTranslation()); @@ -1895,7 +1894,7 @@ namespace AzToolsFramework CopyOrientationToSelectedEntitiesIndividual(QuaternionFromTransformNoScaling(worldFromLocal)); break; case Mode::Scale: - CopyScaleToSelectedEntitiesIndividualWorld(worldFromLocal.GetScale()); + CopyScaleToSelectedEntitiesIndividualWorld(worldFromLocal.GetUniformScale()); break; case Mode::Translation: CopyTranslationToSelectedEntitiesIndividual(worldFromLocal.GetTranslation()); @@ -2388,7 +2387,7 @@ namespace AzToolsFramework ResetOrientationForSelectedEntitiesLocal(); break; case Mode::Scale: - CopyScaleToSelectedEntitiesIndividualLocal(AZ::Vector3::CreateOne()); + CopyScaleToSelectedEntitiesIndividualLocal(1.0f); break; case Mode::Translation: ResetTranslationForSelectedEntitiesLocal(); @@ -2414,7 +2413,7 @@ namespace AzToolsFramework ResetOrientationForSelectedEntitiesLocal(); break; case Mode::Scale: - CopyScaleToSelectedEntitiesIndividualWorld(AZ::Vector3::CreateOne()); + CopyScaleToSelectedEntitiesIndividualWorld(1.0f); break; case Mode::Translation: // do nothing @@ -2934,7 +2933,7 @@ namespace AzToolsFramework } } - void EditorTransformComponentSelection::CopyScaleToSelectedEntitiesIndividualWorld(const AZ::Vector3& scale) + void EditorTransformComponentSelection::CopyScaleToSelectedEntitiesIndividualWorld(float scale) { AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework); @@ -2949,7 +2948,7 @@ namespace AzToolsFramework const auto transformsBefore = RecordTransformsBefore(manipulatorEntityIds.m_entityIds); // update scale relative to initial - const AZ::Transform scaleTransform = AZ::Transform::CreateScale(scale); + const AZ::Transform scaleTransform = AZ::Transform::CreateUniformScale(scale); for (AZ::EntityId entityId : manipulatorEntityIds.m_entityIds) { ScopedUndoBatch::MarkEntityDirty(entityId); @@ -2968,7 +2967,7 @@ namespace AzToolsFramework RefreshUiAfterChange(manipulatorEntityIds.m_entityIds); } - void EditorTransformComponentSelection::CopyScaleToSelectedEntitiesIndividualLocal(const AZ::Vector3& scale) + void EditorTransformComponentSelection::CopyScaleToSelectedEntitiesIndividualLocal(float scale) { AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework); @@ -3014,9 +3013,9 @@ namespace AzToolsFramework if (transformIt != transformsBefore.end()) { AZ::Transform newWorldFromLocal = transformIt->second; - const AZ::Vector3 scale = newWorldFromLocal.GetScale(); + const float scale = newWorldFromLocal.GetUniformScale(); newWorldFromLocal.SetRotation(orientation); - newWorldFromLocal *= AZ::Transform::CreateScale(scale); + newWorldFromLocal *= AZ::Transform::CreateUniformScale(scale); SetEntityWorldTransform(entityId, newWorldFromLocal); } @@ -3661,7 +3660,7 @@ namespace AzToolsFramework } void EditorTransformComponentSelection::SetEntityLocalScale( - const AZ::EntityId entityId, const AZ::Vector3& localScale) + const AZ::EntityId entityId, const float localScale) { ETCS::SetEntityLocalScale(entityId, localScale, m_transformChangedInternally); } @@ -3714,11 +3713,11 @@ namespace AzToolsFramework entityId, &AZ::TransformBus::Events::SetWorldTM, worldTransform); } - void SetEntityLocalScale(AZ::EntityId entityId, const AZ::Vector3& localScale, bool& internal) + void SetEntityLocalScale(AZ::EntityId entityId, float localScale, bool& internal) { ScopeSwitch sw(internal); AZ::TransformBus::Event( - entityId, &AZ::TransformBus::Events::SetLocalScale, localScale); + entityId, &AZ::TransformBus::Events::SetLocalUniformScale, localScale); } void SetEntityLocalRotation(AZ::EntityId entityId, const AZ::Vector3& localRotation, bool& internal) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h index 99265313fe..9fd16a6e21 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h @@ -212,8 +212,8 @@ namespace AzToolsFramework void CopyOrientationToSelectedEntitiesIndividual(const AZ::Quaternion& orientation); void CopyOrientationToSelectedEntitiesGroup(const AZ::Quaternion& orientation); void ResetOrientationForSelectedEntitiesLocal(); - void CopyScaleToSelectedEntitiesIndividualLocal(const AZ::Vector3& scale); - void CopyScaleToSelectedEntitiesIndividualWorld(const AZ::Vector3& scale); + void CopyScaleToSelectedEntitiesIndividualLocal(float scale); + void CopyScaleToSelectedEntitiesIndividualWorld(float scale); // EditorManipulatorCommandUndoRedoRequestBus ... void UndoRedoEntityManipulatorCommand( @@ -248,7 +248,7 @@ namespace AzToolsFramework void SetEntityWorldTranslation(AZ::EntityId entityId, const AZ::Vector3& worldTranslation); void SetEntityLocalTranslation(AZ::EntityId entityId, const AZ::Vector3& localTranslation); void SetEntityWorldTransform(AZ::EntityId entityId, const AZ::Transform& worldTransform); - void SetEntityLocalScale(AZ::EntityId entityId, const AZ::Vector3& localScale); + void SetEntityLocalScale(AZ::EntityId entityId, float localScale); void SetEntityLocalRotation(AZ::EntityId entityId, const AZ::Vector3& localRotation); AZ::EntityId m_hoveredEntityId; ///< What EntityId is the mouse currently hovering over (if any). @@ -316,7 +316,7 @@ namespace AzToolsFramework void SetEntityWorldTranslation(AZ::EntityId entityId, const AZ::Vector3& worldTranslation, bool& internal); void SetEntityLocalTranslation(AZ::EntityId entityId, const AZ::Vector3& localTranslation, bool& internal); void SetEntityWorldTransform(AZ::EntityId entityId, const AZ::Transform& worldTransform, bool& internal); - void SetEntityLocalScale(AZ::EntityId entityId, const AZ::Vector3& localScale, bool& internal); + void SetEntityLocalScale(AZ::EntityId entityId, float localScale, bool& internal); void SetEntityLocalRotation(AZ::EntityId entityId, const AZ::Vector3& localRotation, bool& internal); } // namespace ETCS } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h index 59c250b8f7..9cd78f8c50 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h @@ -101,10 +101,10 @@ namespace AzToolsFramework virtual void ResetOrientationForSelectedEntitiesLocal() = 0; /// Copy scale to each individual entity in local space without moving position. - virtual void CopyScaleToSelectedEntitiesIndividualLocal(const AZ::Vector3& scale) = 0; + virtual void CopyScaleToSelectedEntitiesIndividualLocal(float scale) = 0; /// Copy scale to to each individual entity in world (absolute) space. - virtual void CopyScaleToSelectedEntitiesIndividualWorld(const AZ::Vector3& scale) = 0; + virtual void CopyScaleToSelectedEntitiesIndividualWorld(float scale) = 0; protected: ~EditorTransformComponentSelectionRequests() = default; diff --git a/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp b/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp index 751e151ec6..9dc7de1cf7 100644 --- a/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp +++ b/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp @@ -488,18 +488,17 @@ void TransformCompressor::Marshal(WriteBuffer& wb, const AZ::Transform& value) c { AZ::u8 flags = 0; auto flagsMarker = wb.InsertMarker(flags); - AZ::Matrix3x3 m33 = AZ::Matrix3x3::CreateFromTransform(value); - AZ::Vector3 scale = m33.ExtractScale(); - AZ::Quaternion rot = AZ::Quaternion::CreateFromMatrix3x3(m33.GetOrthogonalized()); + float scale = value.GetUniformScale(); + AZ::Quaternion rot = value.GetRotation(); if (!rot.IsIdentity()) { flags |= HAS_ROT; wb.Write(rot, QuatCompMarshaler()); } - if (!scale.IsClose(AZ::Vector3::CreateOne())) + if (!AZ::IsClose(scale, 1.0f)) { flags |= HAS_SCALE; - wb.Write(scale, Vec3CompMarshaler()); + wb.Write(scale, HalfMarshaler()); } AZ::Vector3 pos = value.GetTranslation(); if (!pos.IsZero()) @@ -527,9 +526,9 @@ void TransformCompressor::Unmarshal(AZ::Transform& value, ReadBuffer& rb) const } if (flags & HAS_SCALE) { - AZ::Vector3 scale; - rb.Read(scale, Vec3CompMarshaler()); - xform.MultiplyByScale(scale); + float scale; + rb.Read(scale, HalfMarshaler()); + xform.MultiplyByUniformScale(scale); } if (flags & HAS_POS) { diff --git a/Code/Framework/Tests/TransformComponent.cpp b/Code/Framework/Tests/TransformComponent.cpp index 44008686cd..0b6110e3aa 100644 --- a/Code/Framework/Tests/TransformComponent.cpp +++ b/Code/Framework/Tests/TransformComponent.cpp @@ -24,6 +24,8 @@ #include #include +#include + using namespace AZ; using namespace AzFramework; @@ -362,8 +364,8 @@ namespace UnitTest TEST_F(TransformComponentTransformMatrixSetGet, SetLocalRotation_SimpleValues_Set) { // add some scale first - float sx = 1.03f, sy = 0.67f, sz = 1.23f; - Transform tm = Transform::CreateScale(Vector3(sx, sy, sz)); + float scale = 1.23f; + Transform tm = Transform::CreateUniformScale(scale); TransformBus::Event(m_childId, &TransformBus::Events::SetLocalTM, tm); float rx = 42.435f; @@ -379,13 +381,13 @@ namespace UnitTest Matrix3x3 finalRotate = rotateX * rotateY * rotateZ; Vector3 basisX = tm.GetBasisX(); - Vector3 expectedBasisX = finalRotate.GetBasisX() * sx; + Vector3 expectedBasisX = finalRotate.GetBasisX() * scale; EXPECT_TRUE(basisX.IsClose(expectedBasisX)); Vector3 basisY = tm.GetBasisY(); - Vector3 expectedBasisY = finalRotate.GetBasisY() * sy; + Vector3 expectedBasisY = finalRotate.GetBasisY() * scale; EXPECT_TRUE(basisY.IsClose(expectedBasisY)); Vector3 basisZ = tm.GetBasisZ(); - Vector3 expectedBasisZ = finalRotate.GetBasisZ() * sz; + Vector3 expectedBasisZ = finalRotate.GetBasisZ() * scale; EXPECT_TRUE(basisZ.IsClose(expectedBasisZ)); } @@ -476,18 +478,15 @@ namespace UnitTest { TransformBus::Event(m_childId, &TransformBus::Events::RotateAroundLocalX, rx); } - Vector3 localScale; - TransformBus::EventResult(localScale, m_childId, &TransformBus::Events::GetLocalScale); - EXPECT_TRUE(localScale.IsClose(Vector3(1.0f, 1.0f, 1.0f))); + float localScale = FLT_MAX; + TransformBus::EventResult(localScale, m_childId, &TransformBus::Events::GetLocalUniformScale); + EXPECT_NEAR(localScale, 1.0f, AZ::Constants::Tolerance); } TEST_F(TransformComponentTransformMatrixSetGet, RotateAroundLocalX_ScaleDoesNotSkewRotation) { - float sx = 42.564f; - float sy = 12.460f; - float sz = 28.692f; - Vector3 expectedScales(sx, sy, sz); - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScale, expectedScales); + float expectedScale = 42.564f; + TransformBus::Event(m_childId, &TransformBus::Events::SetLocalUniformScale, expectedScale); float rx = 1.43f; TransformBus::Event(m_childId, &TransformBus::Events::RotateAroundLocalX, rx); @@ -513,18 +512,15 @@ namespace UnitTest { TransformBus::Event(m_childId, &TransformBus::Events::RotateAroundLocalY, ry); } - Vector3 localScale; - TransformBus::EventResult(localScale, m_childId, &TransformBus::Events::GetLocalScale); - EXPECT_TRUE(localScale.IsClose(Vector3(1.0f, 1.0f, 1.0f))); + float localScale = FLT_MAX; + TransformBus::EventResult(localScale, m_childId, &TransformBus::Events::GetLocalUniformScale); + EXPECT_NEAR(localScale, 1.0f, AZ::Constants::Tolerance); } TEST_F(TransformComponentTransformMatrixSetGet, RotateAroundLocalY_ScaleDoesNotSkewRotation) { - float sx = 42.564f; - float sy = 12.460f; - float sz = 28.692f; - Vector3 expectedScales(sx, sy, sz); - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScale, expectedScales); + float expectedScale = 42.564f; + TransformBus::Event(m_childId, &TransformBus::Events::SetLocalUniformScale, expectedScale); float ry = 1.43f; TransformBus::Event(m_childId, &TransformBus::Events::RotateAroundLocalY, ry); @@ -550,18 +546,15 @@ namespace UnitTest { TransformBus::Event(m_childId, &TransformBus::Events::RotateAroundLocalZ, rz); } - Vector3 localScale; - TransformBus::EventResult(localScale, m_childId, &TransformBus::Events::GetLocalScale); - EXPECT_TRUE(localScale.IsClose(Vector3(1.0f, 1.0f, 1.0f))); + float localScale = FLT_MAX; + TransformBus::EventResult(localScale, m_childId, &TransformBus::Events::GetLocalUniformScale); + EXPECT_NEAR(localScale, 1.0f, AZ::Constants::Tolerance); } TEST_F(TransformComponentTransformMatrixSetGet, RotateAroundLocalZ_ScaleDoesNotSkewRotation) { - float sx = 42.564f; - float sy = 12.460f; - float sz = 28.692f; - Vector3 expectedScales(sx, sy, sz); - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScale, expectedScales); + float expectedScale = 42.564f; + TransformBus::Event(m_childId, &TransformBus::Events::SetLocalUniformScale, expectedScale); float rz = 1.43f; TransformBus::Event(m_childId, &TransformBus::Events::RotateAroundLocalZ, rz); @@ -572,65 +565,50 @@ namespace UnitTest TEST_F(TransformComponentTransformMatrixSetGet, SetLocalScale_SimpleValues_Set) { - float sx = 42.564f; - float sy = 12.460f; - float sz = 28.692f; - Vector3 expectedScales(sx, sy, sz); - TransformBus::Event(m_childId, &TransformBus::Events::SetLocalScale, expectedScales); + float expectedScale = 42.564f; + TransformBus::Event(m_childId, &TransformBus::Events::SetLocalUniformScale, expectedScale); - Transform tm ; + Transform tm; TransformBus::EventResult(tm, m_childId, &TransformBus::Events::GetLocalTM); - Vector3 scales = tm.GetScale(); - EXPECT_TRUE(scales.IsClose(expectedScales)); + float scale = tm.GetUniformScale(); + EXPECT_NEAR(scale, expectedScale, AZ::Constants::Tolerance); } TEST_F(TransformComponentTransformMatrixSetGet, GetLocalScale_SimpleValues_Return) { - float sx = 43.463f; - float sy = 346.22f; - float sz = 863.32f; - Vector3 expectedScales(sx, sy, sz); - Transform scaleTM = Transform::CreateScale(expectedScales); + float expectedScale = 43.463f; + Transform scaleTM = Transform::CreateUniformScale(expectedScale); TransformBus::Event(m_childId, &TransformBus::Events::SetLocalTM, scaleTM); - Vector3 scales; - TransformBus::EventResult(scales, m_childId, &TransformBus::Events::GetLocalScale); - EXPECT_TRUE(scales.IsClose(expectedScales)); + float scale; + TransformBus::EventResult(scale, m_childId, &TransformBus::Events::GetLocalUniformScale); + EXPECT_NEAR(scale, expectedScale, AZ::Constants::Tolerance); } TEST_F(TransformComponentTransformMatrixSetGet, GetWorldScale_ChildHasNoScale_ReturnScaleSameAsParent) { - float sx = 43.463f; - float sy = 346.22f; - float sz = 863.32f; - Vector3 expectedScales(sx, sy, sz); - Transform scaleTM = Transform::CreateScale(expectedScales); + float expectedScale = 43.463f; + Transform scaleTM = Transform::CreateUniformScale(expectedScale); TransformBus::Event(m_parentId, &TransformBus::Events::SetLocalTM, scaleTM); - Vector3 scales; - TransformBus::EventResult(scales, m_childId, &TransformBus::Events::GetWorldScale); - EXPECT_TRUE(scales.IsClose(expectedScales)); + float scale = FLT_MAX; + TransformBus::EventResult(scale, m_childId, &TransformBus::Events::GetWorldUniformScale); + EXPECT_NEAR(scale, expectedScale, AZ::Constants::Tolerance); } TEST_F(TransformComponentTransformMatrixSetGet, GetWorldScale_ChildHasScale_ReturnCompoundScale) { - float sx = 4.463f; - float sy = 3.22f; - float sz = 8.32f; - Vector3 parentScales(sx, sy, sz); - Transform parentScaleTM = Transform::CreateScale(parentScales); + float parentScale = 4.463f; + Transform parentScaleTM = Transform::CreateUniformScale(parentScale); TransformBus::Event(m_parentId, &TransformBus::Events::SetLocalTM, parentScaleTM); - float csx = 1.64f; - float csy = 9.35f; - float csz = 1.57f; - Vector3 childScales(csx, csy, csz); - Transform childScaleTM = Transform::CreateScale(childScales); + float childScale = 1.64f; + Transform childScaleTM = Transform::CreateUniformScale(childScale); TransformBus::Event(m_childId, &TransformBus::Events::SetLocalTM, childScaleTM); - Vector3 scales; - TransformBus::EventResult(scales, m_childId, &TransformBus::Events::GetWorldScale); - EXPECT_TRUE(scales.IsClose(parentScales * childScales)); + float scale = FLT_MAX; + TransformBus::EventResult(scale, m_childId, &TransformBus::Events::GetWorldUniformScale); + EXPECT_NEAR(scale, parentScale * childScale, AZ::Constants::Tolerance); } class TransformComponentHierarchy diff --git a/Code/Sandbox/Editor/Objects/SelectionGroup.cpp b/Code/Sandbox/Editor/Objects/SelectionGroup.cpp index b883b78e49..6363257e2f 100644 --- a/Code/Sandbox/Editor/Objects/SelectionGroup.cpp +++ b/Code/Sandbox/Editor/Objects/SelectionGroup.cpp @@ -490,28 +490,6 @@ void CSelectionGroup::StartScaling() } -void CSelectionGroup::FinishScaling(const Vec3& scale, [[maybe_unused]] int referenceCoordSys) -{ - if (fabs(scale.x - scale.y) < 0.001f && - fabs(scale.y - scale.z) < 0.001f && - fabs(scale.z - scale.x) < 0.001f) - { - return; - } - - for (int i = 0; i < GetFilteredCount(); ++i) - { - CBaseObject* obj = GetFilteredObject(i); - Vec3 OriginalScale; - if (obj->GetUntransformedScale(OriginalScale)) - { - obj->TransformScale(scale); - obj->SetScale(OriginalScale); - } - } -} - - ////////////////////////////////////////////////////////////////////////// void CSelectionGroup::Align() { diff --git a/Code/Sandbox/Editor/Objects/SelectionGroup.h b/Code/Sandbox/Editor/Objects/SelectionGroup.h index 277ff2a492..9f672f28b2 100644 --- a/Code/Sandbox/Editor/Objects/SelectionGroup.h +++ b/Code/Sandbox/Editor/Objects/SelectionGroup.h @@ -103,7 +103,6 @@ public: void StartScaling(); void Scale(const Vec3& scale, int referenceCoordSys); void SetScale(const Vec3& scale, int referenceCoordSys); - void FinishScaling(const Vec3& scale, int referenceCoordSys); //! Align objects in selection to surface normal void Align(); //! Very special method to move contents of a voxel. diff --git a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp index ae7077b4fc..b9814e66c1 100644 --- a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp +++ b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp @@ -1869,7 +1869,7 @@ void CTrackViewAnimNode::SetPos(const Vec3& position) } ////////////////////////////////////////////////////////////////////////// -void CTrackViewAnimNode::SetScale(const Vec3& scale) +void CTrackViewAnimNode::SetScale(float scale) { CTrackViewTrack* track = GetTrackForParameter(AnimParamType::Scale); @@ -2012,9 +2012,9 @@ void CTrackViewAnimNode::SetPosRotScaleTracksDefaultValues(bool positionAllowed, } if (scaleAllowed) { - AZ::Vector3 scale = AZ::Vector3::CreateOne(); - AZ::TransformBus::EventResult(scale, entityId, &AZ::TransformBus::Events::GetWorldScale); - m_animNode->SetScale(time, AZVec3ToLYVec3(scale)); + float scale = 1.0f; + AZ::TransformBus::EventResult(scale, entityId, &AZ::TransformBus::Events::GetWorldUniformScale); + m_animNode->SetScale(time, scale); } } } @@ -2482,11 +2482,11 @@ Quat CTrackViewAnimNode::GetTransformDelegateRotation(const Quat& baseRotation) ////////////////////////////////////////////////////////////////////////// Vec3 CTrackViewAnimNode::GetTransformDelegateScale(const Vec3& baseScale) const { - const Vec3 scale = GetScale(); + float scale = GetScale(); - return Vec3(CheckTrackAnimated(AnimParamType::ScaleX) ? scale.x : baseScale.x, - CheckTrackAnimated(AnimParamType::ScaleY) ? scale.y : baseScale.y, - CheckTrackAnimated(AnimParamType::ScaleZ) ? scale.z : baseScale.z); + return Vec3(CheckTrackAnimated(AnimParamType::ScaleX) ? scale : baseScale.x, + CheckTrackAnimated(AnimParamType::ScaleY) ? scale : baseScale.y, + CheckTrackAnimated(AnimParamType::ScaleZ) ? scale : baseScale.z); } ////////////////////////////////////////////////////////////////////////// @@ -2504,7 +2504,7 @@ void CTrackViewAnimNode::SetTransformDelegateRotation(const Quat& rotation) ////////////////////////////////////////////////////////////////////////// void CTrackViewAnimNode::SetTransformDelegateScale(const Vec3& scale) { - SetScale(scale); + SetScale(scale.x); } bool CTrackViewAnimNode::IsTransformAnimParamTypeDelegated(const AnimParamType animParamType) const diff --git a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h index 1e0cc2262a..4435d0efc7 100644 --- a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h +++ b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h @@ -182,8 +182,8 @@ public: // Rotation/Position & Scale void SetPos(const Vec3& position); Vec3 GetPos() const { return m_animNode->GetPos(); } - void SetScale(const Vec3& scale); - Vec3 GetScale() const { return m_animNode->GetScale(); } + void SetScale(float scale); + float GetScale() const { return m_animNode->GetScale(); } void SetRotation(const Quat& rotation); Quat GetRotation() const { return m_animNode->GetRotate(); } Quat GetRotation(float time) const { return m_animNode != nullptr ? m_animNode->GetRotate(time) : Quat(0,0,0,0); } diff --git a/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp b/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp index f915c804f8..3642f21da6 100644 --- a/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp +++ b/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp @@ -825,10 +825,10 @@ void CTrackViewSequence::SyncSelectedTracksToBase() { const Vec3 position = pAnimNode->GetPos(); const Quat rotation = pAnimNode->GetRotation(); - const Vec3 scale = pAnimNode->GetScale(); + const float scale = pAnimNode->GetScale(); AZ::Transform transform = AZ::Transform::CreateIdentity(); - transform.SetScale(LYVec3ToAZVec3(scale)); + transform.SetUniformScale(scale); transform.SetRotation(LYQuaternionToAZQuaternion(rotation)); transform.SetTranslation(LYVec3ToAZVec3(position)); @@ -870,7 +870,7 @@ void CTrackViewSequence::SyncSelectedTracksFromBase() pAnimNode->SetPos(AZVec3ToLYVec3(transform.GetTranslation())); pAnimNode->SetRotation(AZQuaternionToLYQuaternion(transform.GetRotation())); - pAnimNode->SetScale(AZVec3ToLYVec3(transform.GetScale())); + pAnimNode->SetScale(transform.GetUniformScale()); bNothingWasSynced = false; } diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/Utilities/SceneUtilities.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/Utilities/SceneUtilities.cpp index f5bb9d28a6..ac27ed54eb 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/Utilities/SceneUtilities.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/Utilities/SceneUtilities.cpp @@ -79,7 +79,7 @@ namespace AZ if (coordinateSystemRule->GetScale() != 1.0f) { float scale = coordinateSystemRule->GetScale(); - matrix.MultiplyByScale(Vector3(scale, scale, scale)); + matrix.MultiplyByScale(Vector3(scale)); } if (!coordinateSystemRule->GetOriginNodeName().empty()) { diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp index 09588a606e..640c092070 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include namespace AZ @@ -58,10 +59,11 @@ namespace AZ } else { - AzToolsFramework::Vector3PropertyHandler handler; - handler.ConsumeAttribute(widget->GetTranslationWidget(), attrib, attrValue, debugName); - handler.ConsumeAttribute(widget->GetRotationWidget(), attrib, attrValue, debugName); - handler.ConsumeAttribute(widget->GetScaleWidget(), attrib, attrValue, debugName); + AzToolsFramework::Vector3PropertyHandler vector3Handler; + vector3Handler.ConsumeAttribute(widget->GetTranslationWidget(), attrib, attrValue, debugName); + vector3Handler.ConsumeAttribute(widget->GetRotationWidget(), attrib, attrValue, debugName); + AzToolsFramework::doublePropertySpinboxHandler spinboxHandler; + spinboxHandler.ConsumeAttribute(widget->GetScaleWidget(), attrib, attrValue, debugName); } } @@ -109,4 +111,4 @@ namespace AZ } // namespace SceneAPI } // namespace AZ -#include \ No newline at end of file +#include diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.h b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.h index a020ee8198..582f32649e 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.h +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.h @@ -60,4 +60,4 @@ namespace AZ }; } // namespace SceneUI } // namespace SceneAPI -} // namespace AZ \ No newline at end of file +} // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp index 10e0fd2a68..e8ecaa0c27 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -47,7 +48,7 @@ namespace AZ ExpandedTransform::ExpandedTransform() : m_translation(0, 0, 0) , m_rotation(0, 0, 0) - , m_scale(1, 1, 1) + , m_scale(1) { } @@ -60,14 +61,14 @@ namespace AZ { m_translation = transform.GetTranslation(); m_rotation = transform.GetEulerDegrees(); - m_scale = transform.GetScale(); + m_scale = transform.GetUniformScale(); } void ExpandedTransform::GetTransform(AZ::Transform& transform) const { transform = Transform::CreateTranslation(m_translation); transform *= AZ::ConvertEulerDegreesToTransform(m_rotation); - transform.MultiplyByScale(m_scale); + transform.MultiplyByUniformScale(m_scale); } const AZ::Vector3& ExpandedTransform::GetTranslation() const @@ -90,12 +91,12 @@ namespace AZ m_rotation = rotation; } - const AZ::Vector3& ExpandedTransform::GetScale() const + const float ExpandedTransform::GetScale() const { return m_scale; } - void ExpandedTransform::SetScale(const AZ::Vector3& scale) + void ExpandedTransform::SetScale(const float scale) { m_scale = scale; } @@ -131,7 +132,7 @@ namespace AZ m_rotationWidget->setMaximum(360); m_rotationWidget->setSuffix(" degrees"); - m_scaleWidget = new AzQtComponents::VectorInput(this, 3); + m_scaleWidget = new AzToolsFramework::PropertyDoubleSpinCtrl(this); m_scaleWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_scaleWidget->setMinimum(0); m_scaleWidget->setMaximum(10000); @@ -191,13 +192,10 @@ namespace AZ AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestWrite, this); }); - QObject::connect(m_scaleWidget, &AzQtComponents::VectorInput::valueChanged, this, [this] + QObject::connect(m_scaleWidget, &AzToolsFramework::PropertyDoubleSpinCtrl::valueChanged, this, [this] { - AzQtComponents::VectorInput* widget = this->GetScaleWidget(); - AZ::Vector3 scale; - - PopulateVector3(widget, scale); - + AzToolsFramework::PropertyDoubleSpinCtrl* widget = this->GetScaleWidget(); + float scale = aznumeric_cast(widget->value()); m_transform.SetScale(scale); AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestWrite, this); }); @@ -224,9 +222,7 @@ namespace AZ m_rotationWidget->setValuebyIndex(m_transform.GetRotation().GetY(), 1); m_rotationWidget->setValuebyIndex(m_transform.GetRotation().GetZ(), 2); - m_scaleWidget->setValuebyIndex(m_transform.GetScale().GetX(), 0); - m_scaleWidget->setValuebyIndex(m_transform.GetScale().GetY(), 1); - m_scaleWidget->setValuebyIndex(m_transform.GetScale().GetZ(), 2); + m_scaleWidget->setValue(m_transform.GetScale()); blockSignals(false); } @@ -251,7 +247,7 @@ namespace AZ return m_rotationWidget; } - AzQtComponents::VectorInput* TransformRowWidget::GetScaleWidget() + AzToolsFramework::PropertyDoubleSpinCtrl* TransformRowWidget::GetScaleWidget() { return m_scaleWidget; } diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h index dc3286f80e..3977d26c7c 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h @@ -21,6 +21,7 @@ #include #include #include + #endif namespace AzQtComponents @@ -28,6 +29,11 @@ namespace AzQtComponents class VectorInput; } +namespace AzToolsFramework +{ + class PropertyDoubleSpinCtrl; +} + namespace AZ { namespace SceneAPI @@ -51,14 +57,14 @@ namespace AZ const AZ::Vector3& GetRotation() const; void SetRotation(const AZ::Vector3& translation); - const AZ::Vector3& GetScale() const; - void SetScale(const AZ::Vector3& scale); + const float GetScale() const; + void SetScale(const float scale); private: AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING AZ::Vector3 m_translation; AZ::Vector3 m_rotation; - AZ::Vector3 m_scale; + float m_scale; AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING }; @@ -78,7 +84,7 @@ namespace AZ AzQtComponents::VectorInput* GetTranslationWidget(); AzQtComponents::VectorInput* GetRotationWidget(); - AzQtComponents::VectorInput* GetScaleWidget(); + AzToolsFramework::PropertyDoubleSpinCtrl* GetScaleWidget(); protected: ExpandedTransform m_transform; @@ -87,7 +93,7 @@ namespace AZ AzQtComponents::VectorInput* m_translationWidget; AzQtComponents::VectorInput* m_rotationWidget; - AzQtComponents::VectorInput* m_scaleWidget; + AzToolsFramework::PropertyDoubleSpinCtrl* m_scaleWidget; }; } // namespace SceneUI } // namespace SceneAPI diff --git a/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp b/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp index 05082f29fb..cda6582e63 100644 --- a/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp +++ b/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp @@ -30,7 +30,7 @@ namespace AZ Vector3 m_translation = Vector3(10.0f, 20.0f, 30.0f); Vector3 m_rotation = Vector3(30.0f, 45.0f, 60.0f); - Vector3 m_scale = Vector3(2.0f, 3.0f, 4.0f); + float m_scale = 3.0f; }; TEST_F(TransformRowWidgetTest, GetTranslation_TranslationInMatrix_TranslationCanBeRetrievedDirectly) @@ -83,26 +83,22 @@ namespace AZ TEST_F(TransformRowWidgetTest, GetScale_ScaleInMatrix_ScaleCanBeRetrievedDirectly) { - m_transform = Transform::CreateScale(m_scale); + m_transform = Transform::CreateUniformScale(m_scale); m_expanded.SetTransform(m_transform); - const Vector3& returned = m_expanded.GetScale(); - EXPECT_NEAR(m_scale.GetX(), returned.GetX(), 0.1f); - EXPECT_NEAR(m_scale.GetY(), returned.GetY(), 0.1f); - EXPECT_NEAR(m_scale.GetZ(), returned.GetZ(), 0.1f); + const float returned = m_expanded.GetScale(); + EXPECT_NEAR(m_scale, returned, 0.1f); } TEST_F(TransformRowWidgetTest, GetScale_ScaleInMatrix_ScaleCanBeRetrievedFromTransform) { - m_transform = Transform::CreateScale(m_scale); + m_transform = Transform::CreateUniformScale(m_scale); m_expanded.SetTransform(m_transform); Transform rebuild; m_expanded.GetTransform(rebuild); - Vector3 returned = rebuild.GetScale(); - EXPECT_NEAR(m_scale.GetX(), returned.GetX(), 0.1f); - EXPECT_NEAR(m_scale.GetY(), returned.GetY(), 0.1f); - EXPECT_NEAR(m_scale.GetZ(), returned.GetZ(), 0.1f); + float returned = rebuild.GetUniformScale(); + EXPECT_NEAR(m_scale, returned, 0.1f); } TEST_F(TransformRowWidgetTest, GetTransform_RotateAndTranslateInMatrix_ReconstructedTransformMatchesOriginal) @@ -121,7 +117,7 @@ namespace AZ { Quaternion quaternion = AZ::ConvertEulerDegreesToQuaternion(m_rotation); m_transform = Transform::CreateFromQuaternionAndTranslation(quaternion, m_translation); - m_transform.MultiplyByScale(m_scale); + m_transform.MultiplyByUniformScale(m_scale); m_expanded.SetTransform(m_transform); Transform rebuild; diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp index e1bfaa3872..b55dcf2088 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -178,9 +179,10 @@ namespace MaterialEditor m_shadowCatcherEntity->CreateComponent(AZ::Render::MeshComponentTypeId); m_shadowCatcherEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); m_shadowCatcherEntity->CreateComponent(azrtti_typeid()); + m_shadowCatcherEntity->CreateComponent(azrtti_typeid()); m_shadowCatcherEntity->Activate(); - AZ::TransformBus::Event(m_shadowCatcherEntity->GetId(), &AZ::TransformBus::Events::SetLocalScale, AZ::Vector3{ 100, 100, 1.0 }); + AZ::NonUniformScaleRequestBus::Event(m_shadowCatcherEntity->GetId(), &AZ::NonUniformScaleRequests::SetScale, AZ::Vector3{ 100, 100, 1.0 }); AZ::Data::AssetId shadowCatcherModelAssetId = RPI::AssetUtils::GetAssetIdForProductPath("materialeditor/viewportmodels/plane_1x1.azmodel", RPI::AssetUtils::TraceLevel::Error); AZ::Render::MeshComponentRequestBus::Event(m_shadowCatcherEntity->GetId(), diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp index c2bcc566e0..6ec780c2ab 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp @@ -50,7 +50,6 @@ namespace AZ AZStd::vector vertices = m_shapeBus->GetPolygonPrism()->m_vertexContainer.GetVertices(); Transform transform = GetTransform(); - transform.SetScale(Vector3(transform.GetScale().GetMaxElement())); // Poly Prism only supports uniform scale, so use max element. AZStd::vector transformedVertices; transformedVertices.reserve(vertices.size()); diff --git a/Gems/Blast/Code/Tests/BlastFamilyTest.cpp b/Gems/Blast/Code/Tests/BlastFamilyTest.cpp index 2e6fd7f2bb..7af9f41e9c 100644 --- a/Gems/Blast/Code/Tests/BlastFamilyTest.cpp +++ b/Gems/Blast/Code/Tests/BlastFamilyTest.cpp @@ -137,7 +137,7 @@ namespace Blast .Times(1) .WillOnce(Return(false)); - AZ::Transform transform = AZ::Transform::CreateScale(AZ::Vector3::CreateOne()); + AZ::Transform transform = AZ::Transform::CreateUniformScale(1.0f); blastFamily->Spawn(transform); } diff --git a/Gems/Blast/Code/Tests/Mocks/BlastMocks.h b/Gems/Blast/Code/Tests/Mocks/BlastMocks.h index 88c22cf67f..c9455c2fb3 100644 --- a/Gems/Blast/Code/Tests/Mocks/BlastMocks.h +++ b/Gems/Blast/Code/Tests/Mocks/BlastMocks.h @@ -669,6 +669,9 @@ namespace Blast MOCK_METHOD1(SetLocalScale, void(const AZ::Vector3&)); MOCK_METHOD0(GetLocalScale, AZ::Vector3()); MOCK_METHOD0(GetWorldScale, AZ::Vector3()); + MOCK_METHOD1(SetLocalUniformScale, void(float)); + MOCK_METHOD0(GetLocalUniformScale, float()); + MOCK_METHOD0(GetWorldUniformScale, float()); MOCK_METHOD0(GetParentId, AZ::EntityId()); MOCK_METHOD0(GetParent, TransformInterface*()); MOCK_METHOD1(SetParent, void(AZ::EntityId)); diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp index 0aef3f9d4f..3a23241385 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp @@ -1157,7 +1157,7 @@ namespace MCommon void RenderUtil::RenderSphere(const AZ::Vector3& position, float radius, const MCore::RGBAColor& color) { // setup the world space matrix of the sphere - AZ::Transform sphereTransform = AZ::Transform::CreateScale(AZ::Vector3(radius, radius, radius)); + AZ::Transform sphereTransform = AZ::Transform::CreateUniformScale(radius); sphereTransform.SetTranslation(position); // render the sphere diff --git a/Gems/GradientSignal/Code/Include/GradientSignal/Util.h b/Gems/GradientSignal/Code/Include/GradientSignal/Util.h index 4e15bdc293..1a8bb00eba 100644 --- a/Gems/GradientSignal/Code/Include/GradientSignal/Util.h +++ b/Gems/GradientSignal/Code/Include/GradientSignal/Util.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -64,15 +65,15 @@ namespace GradientSignal AZ::LerpInverse(bounds.GetMin().GetZ(), bounds.GetMax().GetZ(), point.GetZ())); } - inline void GetObbParamsFromShape(const AZ::EntityId& entity, AZ::Aabb& bounds, AZ::Transform& worldToBoundsTransform) + inline void GetObbParamsFromShape(const AZ::EntityId& entity, AZ::Aabb& bounds, AZ::Matrix3x4& worldToBoundsTransform) { //get bound and transform data for associated shape bounds = AZ::Aabb::CreateNull(); - worldToBoundsTransform = AZ::Transform::CreateIdentity(); + AZ::Transform transform = AZ::Transform::CreateIdentity(); if (entity.IsValid()) { - LmbrCentral::ShapeComponentRequestsBus::Event(entity, &LmbrCentral::ShapeComponentRequestsBus::Events::GetTransformAndLocalBounds, worldToBoundsTransform, bounds); - worldToBoundsTransform.Invert(); + LmbrCentral::ShapeComponentRequestsBus::Event(entity, &LmbrCentral::ShapeComponentRequestsBus::Events::GetTransformAndLocalBounds, transform, bounds); + worldToBoundsTransform = AZ::Matrix3x4::CreateFromTransform(transform.GetInverse()); } } diff --git a/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.cpp b/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.cpp index 0b967a6957..6cee088a1c 100644 --- a/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.cpp +++ b/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.cpp @@ -333,7 +333,7 @@ namespace GradientSignal AZStd::lock_guard lock(m_cacheMutex); //transforming coordinate into "local" relative space of shape bounds - outUVW = m_shapeTransformInverse.TransformPoint(inPosition); + outUVW = m_shapeTransformInverse * inPosition; if (!m_configuration.m_advancedMode || !m_configuration.m_is3d) { @@ -387,7 +387,7 @@ namespace GradientSignal void GradientTransformComponent::GetGradientEncompassingBounds(AZ::Aabb& bounds) const { bounds = m_shapeBounds; - bounds.ApplyTransform(m_shapeTransformInverse.GetInverse()); + bounds.ApplyMatrix3x4(m_shapeTransformInverse.GetInverseFull()); } void GradientTransformComponent::OnCompositionChanged() @@ -500,10 +500,11 @@ namespace GradientSignal m_shapeBounds = AZ::Aabb::CreateFromMinMax(-m_configuration.m_bounds * 0.5f, m_configuration.m_bounds * 0.5f); //rebuild transform from parameters - AZ::Quaternion rotation; - rotation.SetFromEulerDegrees(m_configuration.m_rotate); - const AZ::Transform shapeTransformFinal(m_configuration.m_translate, rotation, m_configuration.m_scale); - m_shapeTransformInverse = shapeTransformFinal.GetInverse(); + AZ::Matrix3x4 shapeTransformFinal; + shapeTransformFinal.SetFromEulerDegrees(m_configuration.m_rotate); + shapeTransformFinal.SetTranslation(m_configuration.m_translate); + shapeTransformFinal.MultiplyByScale(m_configuration.m_scale); + m_shapeTransformInverse = shapeTransformFinal.GetInverseFull(); } AZ::EntityId GradientTransformComponent::GetShapeEntityId() const diff --git a/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.h b/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.h index 15aaf40494..5955da95c7 100644 --- a/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.h +++ b/Gems/GradientSignal/Code/Source/Components/GradientTransformComponent.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -172,8 +173,8 @@ namespace GradientSignal mutable AZStd::recursive_mutex m_cacheMutex; GradientTransformConfig m_configuration; AZ::Aabb m_shapeBounds = AZ::Aabb::CreateNull(); - AZ::Transform m_shapeTransformInverse = AZ::Transform::CreateIdentity(); + AZ::Matrix3x4 m_shapeTransformInverse = AZ::Matrix3x4::CreateIdentity(); LmbrCentral::DependencyMonitor m_dependencyMonitor; AZStd::atomic_bool m_dirty{ false }; }; -} //namespace GradientSignal \ No newline at end of file +} //namespace GradientSignal diff --git a/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp b/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp index 537585f48c..efef5761bc 100644 --- a/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp @@ -242,14 +242,14 @@ namespace LmbrCentral { // apply offset in world-space finalTransform = m_targetEntityTransform * m_targetBoneTransform; - finalTransform.SetScale(AZ::Vector3::CreateOne()); + finalTransform.SetUniformScale(1.0f); finalTransform *= m_targetOffset; } else if (m_scaleSource == AttachmentConfiguration::ScaleSource::TargetEntityScale) { // apply offset in target-entity-space (ignoring bone scale) AZ::Transform boneNoScale = m_targetBoneTransform; - boneNoScale.SetScale(AZ::Vector3::CreateOne()); + boneNoScale.SetUniformScale(1.0f); finalTransform = m_targetEntityTransform * boneNoScale * m_targetOffset; } diff --git a/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp b/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp index 337da51159..6190f976a0 100644 --- a/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp @@ -124,7 +124,7 @@ namespace LmbrCentral { AZ::Transform offset = AZ::ConvertEulerDegreesToTransform(m_rotationOffset); offset.SetTranslation(m_positionOffset); - offset.MultiplyByScale(m_scaleOffset); + offset.MultiplyByUniformScale(m_scaleOffset.GetMaxElement()); return offset; } diff --git a/Gems/LmbrCentral/Code/Source/Scripting/EditorLookAtComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/EditorLookAtComponent.cpp index ab22514cf8..7a2cc52627 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/EditorLookAtComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/EditorLookAtComponent.cpp @@ -169,22 +169,24 @@ namespace LmbrCentral { AZ::TransformNotificationBus::MultiHandler::BusDisconnect(GetEntityId()); { - AZ::Transform currentTM = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(currentTM, GetEntityId(), AZ::TransformBus, GetWorldTM); - AZ::Vector3 currentScale = currentTM.ExtractScale(); + AZ::Transform sourceTM = AZ::Transform::CreateIdentity(); + AZ::TransformBus::EventResult(sourceTM, GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); AZ::Transform targetTM = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(targetTM, m_targetId, AZ::TransformBus, GetWorldTM); + AZ::TransformBus::EventResult(targetTM, m_targetId, &AZ::TransformBus::Events::GetWorldTM); AZ::Transform lookAtTransform = AZ::Transform::CreateLookAt( - currentTM.GetTranslation(), + sourceTM.GetTranslation(), targetTM.GetTranslation(), m_forwardAxis ); - lookAtTransform.MultiplyByScale(currentScale); + // update the rotation and translation for sourceTM based on lookAtTransform, but leave scale unchanged + sourceTM.SetRotation(lookAtTransform.GetRotation()); + sourceTM.SetTranslation(lookAtTransform.GetTranslation()); EBUS_EVENT_ID(GetEntityId(), AZ::TransformBus, SetWorldTM, lookAtTransform); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformBus::Events::SetWorldTM, sourceTM); } AZ::TransformNotificationBus::MultiHandler::BusConnect(GetEntityId()); } diff --git a/Gems/LmbrCentral/Code/Source/Shape/BoxShape.cpp b/Gems/LmbrCentral/Code/Source/Shape/BoxShape.cpp index 2830f514fe..a2ee4d986f 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/BoxShape.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/BoxShape.cpp @@ -251,7 +251,7 @@ namespace LmbrCentral const AZ::Transform& currentTransform, const BoxShapeConfig& configuration, const AZ::Vector3& currentNonUniformScale) { AZ::Transform worldFromLocalNormalized = currentTransform; - const float entityScale = worldFromLocalNormalized.ExtractScale().GetMaxElement(); + const float entityScale = worldFromLocalNormalized.ExtractUniformScale(); m_currentPosition = worldFromLocalNormalized.GetTranslation(); m_scaledDimensions = configuration.m_dimensions * currentNonUniformScale * entityScale; diff --git a/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp b/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp index 89c5028e93..db5aaf097c 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp @@ -437,22 +437,18 @@ namespace LmbrCentral const float height = polygonPrism.GetHeight(); const AZ::Vector3& nonUniformScale = polygonPrism.GetNonUniformScale(); - AZ::Transform worldFromLocalUniformScale = worldFromLocal; - const float entityScale = worldFromLocalUniformScale.ExtractScale().GetMaxElement(); - worldFromLocalUniformScale *= AZ::Transform::CreateScale(AZ::Vector3(entityScale)); - AZ::Aabb aabb = AZ::Aabb::CreateNull(); // check base of prism for (const AZ::Vector2& vertex : vertexContainer.GetVertices()) { - aabb.AddPoint(worldFromLocalUniformScale.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), 0.0f))); + aabb.AddPoint(worldFromLocal.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), 0.0f))); } // check top of prism // set aabb to be height of prism - ensure entire polygon prism shape is enclosed in aabb for (const AZ::Vector2& vertex : vertexContainer.GetVertices()) { - aabb.AddPoint(worldFromLocalUniformScale.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), height))); + aabb.AddPoint(worldFromLocal.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), height))); } return aabb; @@ -468,14 +464,10 @@ namespace LmbrCentral const AZStd::vector& vertices = polygonPrism.m_vertexContainer.GetVertices(); const size_t vertexCount = vertices.size(); - AZ::Transform worldFromLocalWithUniformScale = worldFromLocal; - const float transformScale = worldFromLocalWithUniformScale.ExtractScale().GetMaxElement(); - worldFromLocalWithUniformScale *= AZ::Transform::CreateScale(AZ::Vector3(transformScale)); - // transform point to local space // it's fine to invert the transform including scale here, because it won't affect whether the point is inside the prism const AZ::Vector3 localPoint = - worldFromLocalWithUniformScale.GetInverse().TransformPoint(point) / polygonPrism.GetNonUniformScale(); + worldFromLocal.GetInverse().TransformPoint(point) / polygonPrism.GetNonUniformScale(); // ensure the point is not above or below the prism (in its local space) if (localPoint.GetZ() < 0.0f || localPoint.GetZ() > polygonPrism.GetHeight()) @@ -534,7 +526,7 @@ namespace LmbrCentral // but inverting any scale in the transform would mess up the distance, so extract that first and apply scale separately to the // prism AZ::Transform worldFromLocalNoScale = worldFromLocal; - const float transformScale = worldFromLocalNoScale.ExtractScale().GetMaxElement(); + const float transformScale = worldFromLocalNoScale.ExtractUniformScale(); const AZ::Vector3 combinedScale = transformScale * nonUniformScale; const float scaledHeight = height * combinedScale.GetZ(); @@ -610,9 +602,9 @@ namespace LmbrCentral } // transform ray into local space - AZ::Transform worldFromLocalNomalized = worldFromLocal; - const float entityScale = worldFromLocalNomalized.ExtractScale().GetMaxElement(); - const AZ::Transform localFromWorldNormalized = worldFromLocalNomalized.GetInverse(); + AZ::Transform worldFromLocalNormalized = worldFromLocal; + const float entityScale = worldFromLocalNormalized.ExtractUniformScale(); + const AZ::Transform localFromWorldNormalized = worldFromLocalNormalized.GetInverse(); const float rayLength = 1000.0f; const AZ::Vector3 localSrc = localFromWorldNormalized.TransformPoint(src); const AZ::Vector3 localDir = localFromWorldNormalized.TransformVector(dir); diff --git a/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h b/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h index 09088f06cd..3591ecde36 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h +++ b/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h @@ -42,15 +42,10 @@ namespace LmbrCentral return; } - // only uniform scale is supported in physics so the debug visuals reflect this fact - AZ::Transform worldFromLocalWithUniformScale = worldFromLocal; - const AZ::Vector3 scale = worldFromLocalWithUniformScale.ExtractScale(); - worldFromLocalWithUniformScale.MultiplyByScale(AZ::Vector3(scale.GetMaxElement())); - - debugDisplay.PushMatrix(worldFromLocalWithUniformScale); + debugDisplay.PushMatrix(worldFromLocal); drawShape(debugDisplay); debugDisplay.PopMatrix(); } -} // namespace LmbrCentral \ No newline at end of file +} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp b/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp index 6ca2e55de8..2691ab1557 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp @@ -216,11 +216,7 @@ namespace LmbrCentral return AZ::Aabb::CreateNull(); } - AZ::Transform worldFromLocalUniformScale = m_currentTransform; - const float maxScale = worldFromLocalUniformScale.ExtractScale().GetMaxElement(); - worldFromLocalUniformScale *= AZ::Transform::CreateScale(AZ::Vector3(maxScale)); - - return CalculateTubeBounds(*this, worldFromLocalUniformScale); + return CalculateTubeBounds(*this, m_currentTransform); } void TubeShape::GetTransformAndLocalBounds(AZ::Transform& transform, AZ::Aabb& bounds) @@ -236,46 +232,38 @@ namespace LmbrCentral return false; } - AZ::Transform worldFromLocalNormalized = m_currentTransform; - const AZ::Vector3 scale = AZ::Vector3(worldFromLocalNormalized.ExtractScale().GetMaxElement()); - const AZ::Transform localFromWorldNormalized = worldFromLocalNormalized.GetInverse(); - const AZ::Vector3 localPoint = localFromWorldNormalized.TransformPoint(point) * scale.GetReciprocal(); + const float scale = m_currentTransform.GetUniformScale(); + const AZ::Vector3 localPoint = m_currentTransform.GetInverse().TransformPoint(point); const auto address = m_spline->GetNearestAddressPosition(localPoint).m_splineAddress; const float radiusSq = powf(m_radius, 2.0f); const float variableRadiusSq = powf(m_variableRadius.GetElementInterpolated(address, Lerpf), 2.0f); - return (m_spline->GetPosition(address) - localPoint).GetLengthSq() < (radiusSq + variableRadiusSq) * - scale.GetMaxElement(); + return (m_spline->GetPosition(address) - localPoint).GetLengthSq() < (radiusSq + variableRadiusSq) * scale; } float TubeShape::DistanceSquaredFromPoint(const AZ::Vector3& point) { - AZ::Transform worldFromLocalNormalized = m_currentTransform; - const AZ::Vector3 maxScale = AZ::Vector3(worldFromLocalNormalized.ExtractScale().GetMaxElement()); - const AZ::Transform localFromWorldNormalized = worldFromLocalNormalized.GetInverse(); - const AZ::Vector3 localPoint = localFromWorldNormalized.TransformPoint(point) * maxScale.GetReciprocal(); + const float scale = m_currentTransform.GetUniformScale(); + const AZ::Transform localFromWorld = m_currentTransform.GetInverse(); + const AZ::Vector3 localPoint = localFromWorld.TransformPoint(point); const auto splineQueryResult = m_spline->GetNearestAddressPosition(localPoint); const float variableRadius = m_variableRadius.GetElementInterpolated(splineQueryResult.m_splineAddress, Lerpf); - return powf((sqrtf(splineQueryResult.m_distanceSq) - (m_radius + variableRadius)) * maxScale.GetMaxElement(), 2.0f); + return powf((sqrtf(splineQueryResult.m_distanceSq) - (m_radius + variableRadius)) * scale, 2.0f); } bool TubeShape::IntersectRay(const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) { - AZ::Transform transformUniformScale = m_currentTransform; - const float maxScale = transformUniformScale.ExtractScale().GetMaxElement(); - transformUniformScale *= AZ::Transform::CreateScale(AZ::Vector3(maxScale)); - - const auto splineQueryResult = IntersectSpline(transformUniformScale, src, dir, *m_spline); + const auto splineQueryResult = IntersectSpline(m_currentTransform, src, dir, *m_spline); const float variableRadius = m_variableRadius.GetElementInterpolated( splineQueryResult.m_splineAddress, Lerpf); const float totalRadius = m_radius + variableRadius; - distance = (splineQueryResult.m_rayDistance - totalRadius) * m_currentTransform.GetScale().GetMaxElement(); + distance = (splineQueryResult.m_rayDistance - totalRadius) * m_currentTransform.GetUniformScale(); return static_cast(sqrtf(splineQueryResult.m_distanceSq)) < totalRadius; } diff --git a/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp index fd1e4ae4f1..24ee8ace2f 100644 --- a/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp @@ -262,7 +262,7 @@ namespace UnitTest AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisY(), AZ::Constants::QuarterPi), AZ::Vector3(0.0f, 0.0f, 5.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f)), + AZ::Transform::CreateUniformScale(3.0f), AZ::Vector3(2.0f, 4.0f, 1.0f), entity); bool rayHit = false; @@ -295,7 +295,7 @@ namespace UnitTest { AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateTranslation(AZ::Vector3(2.0f, -5.0f, 3.0f)); - transform.MultiplyByScale(AZ::Vector3(0.5f)); + transform.MultiplyByUniformScale(0.5f); const AZ::Vector3 dimensions(2.2f, 1.8f, 0.4f); const AZ::Vector3 nonUniformScale(0.2f, 2.6f, 1.2f); CreateBoxWithNonUniformScale(transform, dimensions, nonUniformScale, entity); @@ -340,7 +340,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.50f, 0.10f, 0.02f, 0.86f), AZ::Vector3(4.0f, 1.0f, -2.0f)); - transform.MultiplyByScale(AZ::Vector3(1.5f)); + transform.MultiplyByUniformScale(1.5f); const AZ::Vector3 dimensions(1.2f, 0.7f, 2.1f); const AZ::Vector3 nonUniformScale(0.8f, 0.6f, 0.7f); CreateBoxWithNonUniformScale(transform, dimensions, nonUniformScale, entity); @@ -433,7 +433,7 @@ namespace UnitTest AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisY(), AZ::Constants::QuarterPi), AZ::Vector3::CreateZero()) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f)), + AZ::Transform::CreateUniformScale(3.0f), AZ::Vector3(2.0f, 4.0f, 1.0f), entity); AZ::Aabb aabb; @@ -483,7 +483,7 @@ namespace UnitTest AZ::Transform transformIn = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisX(), AZ::Constants::QuarterPi) * AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisY(), AZ::Constants::QuarterPi), AZ::Vector3(9.0f, 11.0f, 13.0f)); - transformIn.MultiplyByScale(AZ::Vector3(3.0f)); + transformIn.MultiplyByUniformScale(3.0f); CreateBox(transformIn, AZ::Vector3(1.5f, 3.5f, 5.5f), entity); AZ::Transform transformOut; @@ -500,7 +500,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transformIn = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.62f, 0.62f, 0.14f, 0.46f), AZ::Vector3(0.8f, -1.2f, 2.7f)); - transformIn.MultiplyByScale(AZ::Vector3(2.0f)); + transformIn.MultiplyByUniformScale(2.0f); const AZ::Vector3 nonUniformScale(1.5f, 2.0f, 0.4f); const AZ::Vector3 boxDimensions(2.0f, 1.7f, 0.5f); CreateBoxWithNonUniformScale(transformIn, nonUniformScale, boxDimensions, entity); @@ -531,7 +531,7 @@ namespace UnitTest AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisZ(), AZ::Constants::QuarterPi), AZ::Vector3(23.0f, 12.0f, 40.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f)), + AZ::Transform::CreateUniformScale(3.0f), AZ::Vector3(2.0f, 6.0f, 3.5f), entity); // test some pairs of nearby points which should be just either side of the surface of the box @@ -551,7 +551,7 @@ namespace UnitTest AZ::Transform::CreateTranslation(AZ::Vector3(23.0f, 12.0f, 40.0f)) * AZ::Transform::CreateRotationX(-AZ::Constants::QuarterPi) * AZ::Transform::CreateRotationZ(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), AZ::Vector3(4.0f, 7.0f, 3.5f), entity); // test some pairs of nearby points which should be just either side of the surface of the box @@ -588,8 +588,8 @@ namespace UnitTest CreateBox( AZ::Transform::CreateTranslation(AZ::Vector3(10.0f, 37.0f, 32.0f)) * AZ::Transform::CreateRotationZ(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f, 1.0f, 1.0f)), - AZ::Vector3(4.0f, 2.0f, 10.0f), entity); + AZ::Transform::CreateUniformScale(2.0f), + AZ::Vector3(6.0f, 1.0f, 5.0f), entity); float distance; LmbrCentral::ShapeComponentRequestsBus::EventResult( @@ -606,8 +606,8 @@ namespace UnitTest AZ::Transform::CreateTranslation(AZ::Vector3(10.0f, 37.0f, 32.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::HalfPi) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f, 1.0f, 1.0f)), - AZ::Vector3(4.0f, 2.0f, 10.0f), entity); + AZ::Transform::CreateUniformScale(0.5f), + AZ::Vector3(24.0f, 4.0f, 20.0f), entity); float distance; LmbrCentral::ShapeComponentRequestsBus::EventResult( @@ -621,7 +621,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateRotationY(AZ::DegToRad(30.0f)), AZ::Vector3(3.0f, 4.0f, 5.0f)); - transform.MultiplyByScale(AZ::Vector3(2.0f)); + transform.MultiplyByUniformScale(2.0f); const AZ::Vector3 dimensions(2.0f, 3.0f, 1.5f); const AZ::Vector3 nonUniformScale(1.4f, 2.2f, 0.8f); CreateBoxWithNonUniformScale(transform, nonUniformScale, dimensions, entity); @@ -638,7 +638,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.70f, 0.10f, 0.34f, 0.62f), AZ::Vector3(3.0f, -1.0f, 2.0f)); - transform.MultiplyByScale(AZ::Vector3(2.0f)); + transform.MultiplyByUniformScale(2.0f); const AZ::Vector3 dimensions(1.2f, 0.8f, 1.7f); const AZ::Vector3 nonUniformScale(2.4f, 1.3f, 1.8f); CreateBoxWithNonUniformScale(transform, nonUniformScale, dimensions, entity); diff --git a/Gems/LmbrCentral/Code/Tests/CapsuleShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/CapsuleShapeTest.cpp index 9b57cd46c7..3274585e63 100644 --- a/Gems/LmbrCentral/Code/Tests/CapsuleShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/CapsuleShapeTest.cpp @@ -144,7 +144,7 @@ namespace UnitTest CreateCapsule( AZ::Transform::CreateTranslation(AZ::Vector3(-4.0f, -12.0f, -3.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * - AZ::Transform::CreateScale(AZ::Vector3(6.0f)), + AZ::Transform::CreateUniformScale(6.0f), 0.25f, 1.5f, entity); bool rayHit = false; @@ -208,7 +208,7 @@ namespace UnitTest TEST_F(CapsuleShapeTest, GetAabb3) { AZ::Entity entity; - CreateCapsule(AZ::Transform::CreateScale(AZ::Vector3(3.5f)), 2.0f, 4.0f, entity); + CreateCapsule(AZ::Transform::CreateUniformScale(3.5f), 2.0f, 4.0f, entity); AZ::Aabb aabb; LmbrCentral::ShapeComponentRequestsBus::EventResult( @@ -224,7 +224,7 @@ namespace UnitTest AZ::Entity entity; CreateCapsule( AZ::Transform::CreateTranslation(AZ::Vector3(5.0f, 20.0f, 0.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f)), 1.0f, 5.0f, entity); + AZ::Transform::CreateUniformScale(2.5f), 1.0f, 5.0f, entity); AZ::Aabb aabb; LmbrCentral::ShapeComponentRequestsBus::EventResult( @@ -255,7 +255,7 @@ namespace UnitTest AZ::Transform transformIn = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisX(), AZ::Constants::HalfPi) * AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisY(), AZ::Constants::QuarterPi), AZ::Vector3(-10.0f, -10.0f, 0.0f)); - transformIn.MultiplyByScale(AZ::Vector3(3.0f)); + transformIn.MultiplyByUniformScale(3.0f); CreateCapsule(transformIn, 5.0f, 2.0f, entity); AZ::Transform transformOut; @@ -273,7 +273,7 @@ namespace UnitTest AZ::Transform transformIn = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisX(), AZ::Constants::HalfPi) * AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisY(), AZ::Constants::QuarterPi), AZ::Vector3(-10.0f, -10.0f, 0.0f)); - transformIn.MultiplyByScale(AZ::Vector3(3.0f)); + transformIn.MultiplyByUniformScale(3.0f); CreateCapsule(transformIn, 2.0f, 5.0f, entity); AZ::Transform transformOut; @@ -291,7 +291,7 @@ namespace UnitTest AZ::Entity entity; CreateCapsule( AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f, 1.0f, 1.0f)), // test max scale + AZ::Transform::CreateUniformScale(2.5f), 0.5f, 2.0f, entity); bool inside; @@ -309,7 +309,7 @@ namespace UnitTest AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(0.5f)), + AZ::Transform::CreateUniformScale(0.5f), 0.5f, 2.0f, entity); bool inside; @@ -327,7 +327,7 @@ namespace UnitTest AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), 0.5f, 4.0f, entity); float distance; @@ -345,7 +345,7 @@ namespace UnitTest AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), 0.5f, 4.0f, entity); float distance; diff --git a/Gems/LmbrCentral/Code/Tests/CylinderShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/CylinderShapeTest.cpp index 893ed3fcac..115abcf5ff 100644 --- a/Gems/LmbrCentral/Code/Tests/CylinderShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/CylinderShapeTest.cpp @@ -138,7 +138,7 @@ namespace UnitTest { AZ::Transform::CreateTranslation(AZ::Vector3(-14.0f, -14.0f, -1.0f)) * AZ::Transform::CreateRotationY(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationZ(AZ::Constants::HalfPi) * - AZ::Transform::CreateScale(AZ::Vector3(4.0f)), + AZ::Transform::CreateUniformScale(4.0f), 1.0f, 1.25f }, // Result: hit, distance, epsilon { true, 2.5f, 1e-2f } @@ -203,7 +203,7 @@ namespace UnitTest // Test case 2 { // Cylinder: transform, radius, height { AZ::Transform::CreateTranslation(AZ::Vector3(-10.0f, -10.0f, 10.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(3.5f)), + AZ::Transform::CreateUniformScale(3.5f), 1.0f, 5.0f }, // AABB: min, max { AZ::Vector3(-13.5f, -13.5f, 1.25f), AZ::Vector3(-6.5f, -6.5f, 18.75f) } }, @@ -236,7 +236,7 @@ namespace UnitTest { AZ::Vector3(-5.0f, -5.0f, -0.5f), AZ::Vector3(5.0f, 5.0f, 0.5f) } }, // Test case 1 { // Cylinder: transform, radius, height - { AZ::Transform::CreateTranslation(AZ::Vector3(-10.0f, -10.0f, 10.0f)) * AZ::Transform::CreateScale(AZ::Vector3(3.5f)), + { AZ::Transform::CreateTranslation(AZ::Vector3(-10.0f, -10.0f, 10.0f)) * AZ::Transform::CreateUniformScale(3.5f), 5.0f, 5.0f }, // Local bounds: min, max { AZ::Vector3(-5.0f, -5.0f, -2.5f), AZ::Vector3(5.0f, 5.0f, 2.5f) } }, @@ -264,7 +264,7 @@ namespace UnitTest // Test case 0 { // Cylinder: transform, radius, height {AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f, 1.0f, 1.0f)), // test max scale + AZ::Transform::CreateUniformScale(2.5f), 0.5f, 2.0f}, // Point AZ::Vector3(27.0f, 28.5f, 40.0f), @@ -275,7 +275,7 @@ namespace UnitTest {AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(0.5f)), + AZ::Transform::CreateUniformScale(0.5f), 0.5f, 2.0f}, // Point AZ::Vector3(27.0f, 28.155f, 37.82f), @@ -316,7 +316,7 @@ namespace UnitTest { AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), 0.5f, 4.0f }, // Point AZ::Vector3(27.0f, 28.0f, 41.0f), @@ -327,7 +327,7 @@ namespace UnitTest { AZ::Transform::CreateTranslation(AZ::Vector3(27.0f, 28.0f, 38.0f)) * AZ::Transform::CreateRotationX(AZ::Constants::HalfPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), 0.5f, 4.0f }, // Point AZ::Vector3(22.757f, 32.243f, 38.0f), diff --git a/Gems/LmbrCentral/Code/Tests/DiskShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/DiskShapeTest.cpp index 4a39cd966e..c3683cc33b 100644 --- a/Gems/LmbrCentral/Code/Tests/DiskShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/DiskShapeTest.cpp @@ -307,7 +307,7 @@ namespace UnitTest AZ::Entity entity; CreateDisk( AZ::Transform::CreateTranslation(AZ::Vector3(100.0f, 200.0f, 300.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f)), + AZ::Transform::CreateUniformScale(2.5f), 0.5f, entity); AZ::Aabb aabb; diff --git a/Gems/LmbrCentral/Code/Tests/PolygonPrismShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/PolygonPrismShapeTest.cpp index 46c3da90ab..f12ca69425 100644 --- a/Gems/LmbrCentral/Code/Tests/PolygonPrismShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/PolygonPrismShapeTest.cpp @@ -329,7 +329,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateRotationY(AZ::DegToRad(45.0f)), AZ::Vector3(3.0f, 4.0f, 5.0f)); - transform.MultiplyByScale(AZ::Vector3(1.5f, 1.5f, 1.5f)); + transform.MultiplyByUniformScale(1.5f); const float height = 1.2f; const AZ::Vector3 nonUniformScale(2.0f, 1.2f, 0.5f); const AZStd::vector vertices = @@ -447,7 +447,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateRotationY(AZ::DegToRad(45.0f)), AZ::Vector3(3.0f, 4.0f, 5.0f)); - transform.MultiplyByScale(AZ::Vector3(1.5f, 1.5f, 1.5f)); + transform.MultiplyByUniformScale(1.5f); const float height = 1.2f; const AZ::Vector3 nonUniformScale(2.0f, 1.2f, 0.5f); const AZStd::vector vertices = @@ -608,7 +608,7 @@ namespace UnitTest AZ::Entity entity; CreatePolygonPrism( AZ::Transform::CreateTranslation(AZ::Vector3(5.0f, 15.0f, 40.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f)), 2.0f, + AZ::Transform::CreateUniformScale(3.0f), 2.0f, AZStd::vector( { AZ::Vector2(-2.0f, -2.0f), @@ -669,7 +669,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateRotationY(AZ::DegToRad(60.0f)), AZ::Vector3(1.0f, 2.5f, -1.0f)); - transform.MultiplyByScale(AZ::Vector3(2.0f, 2.0f, 2.0f)); + transform.MultiplyByUniformScale(2.0f); const float height = 1.5f; const AZ::Vector3 nonUniformScale(0.5f, 1.5f, 2.0f); @@ -772,7 +772,7 @@ namespace UnitTest AZ::Entity entity; CreatePolygonPrism( AZ::Transform::CreateTranslation(AZ::Vector3(5.0f, 15.0f, 40.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(3.0f)), 1.5f, + AZ::Transform::CreateUniformScale(3.0f), 1.5f, AZStd::vector( { AZ::Vector2(-2.0f, -2.0f), @@ -795,7 +795,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateRotationX(AZ::DegToRad(30.0f)), AZ::Vector3(2.0f, -5.0f, 3.0f)); - transform.MultiplyByScale(AZ::Vector3(2.0f, 2.0f, 2.0f)); + transform.MultiplyByUniformScale(2.0f); const float height = 1.2f; const AZ::Vector3 nonUniformScale(1.5f, 0.8f, 2.0f); const AZStd::vector vertices = diff --git a/Gems/LmbrCentral/Code/Tests/QuadShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/QuadShapeTest.cpp index d70a9344a4..4b6eae4bb8 100644 --- a/Gems/LmbrCentral/Code/Tests/QuadShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/QuadShapeTest.cpp @@ -188,7 +188,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transformIn = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.46f, 0.34f, 0.02f, 0.82f), AZ::Vector3(1.7f, -0.4f, 2.3f)); - transformIn.MultiplyByScale(AZ::Vector3(2.2f)); + transformIn.MultiplyByUniformScale(2.2f); const AZ::Vector3 nonUniformScale(0.8f, 0.6f, 1.3f); const float width = 0.7f; const float height = 1.3f; @@ -327,7 +327,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.64f, 0.16f, 0.68f, 0.32f), AZ::Vector3(0.4f, -2.3f, -0.9f)); - transform.MultiplyByScale(AZ::Vector3(1.3f)); + transform.MultiplyByUniformScale(1.3f); const AZ::Vector3 nonUniformScale(0.7f, 0.5f, 1.3f); const float width = 0.9f; const float height = 1.3f; @@ -384,7 +384,7 @@ namespace UnitTest AZ::Entity entity; CreateQuad( AZ::Transform::CreateTranslation(AZ::Vector3(100.0f, 200.0f, 300.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f)), + AZ::Transform::CreateUniformScale(2.5f), 1.0f, 2.0f, entity); AZ::Aabb aabb; @@ -425,7 +425,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.44f, 0.24f, 0.48f, 0.72f), AZ::Vector3(3.4f, 1.2f, -2.8f)); - transform.MultiplyByScale(AZ::Vector3(1.5f)); + transform.MultiplyByUniformScale(1.5f); const AZ::Vector3 nonUniformScale(1.2f, 1.1f, 0.8f); const float width = 1.2f; const float height = 1.7f; @@ -518,7 +518,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.24f, 0.72f, 0.44f, 0.48f), AZ::Vector3(2.7f, 2.3f, -1.8f)); - transform.MultiplyByScale(AZ::Vector3(1.2f)); + transform.MultiplyByUniformScale(1.2f); const AZ::Vector3 nonUniformScale(0.4f, 2.2f, 1.3f); const float width = 1.6f; const float height = 0.7f; @@ -546,7 +546,7 @@ namespace UnitTest AZ::Entity entity; AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion(0.70f, 0.10f, 0.34f, 0.62f), AZ::Vector3(3.0f, -1.0f, 2.0f)); - transform.MultiplyByScale(AZ::Vector3(2.0f)); + transform.MultiplyByUniformScale(2.0f); const AZ::Vector3 nonUniformScale(2.4f, 1.3f, 1.8f); const float width = 0.8f; const float height = 1.4f; diff --git a/Gems/LmbrCentral/Code/Tests/SphereShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/SphereShapeTest.cpp index 563bb16caa..b5e45f2cda 100644 --- a/Gems/LmbrCentral/Code/Tests/SphereShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/SphereShapeTest.cpp @@ -179,7 +179,7 @@ namespace UnitTest AZ::Entity entity; CreateSphere( AZ::Transform::CreateTranslation(AZ::Vector3(-8.0f, -15.0f, 5.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(5.0f)), + AZ::Transform::CreateUniformScale(5.0f), 0.25f, entity); bool rayHit = false; @@ -240,7 +240,7 @@ namespace UnitTest AZ::Entity entity; CreateSphere( AZ::Transform::CreateTranslation(AZ::Vector3(100.0f, 200.0f, 300.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f)), + AZ::Transform::CreateUniformScale(2.5f), 0.5f, entity); AZ::Aabb aabb; @@ -269,7 +269,7 @@ namespace UnitTest TEST_F(SphereShapeTest, GetTransformAndLocalBounds2) { AZ::Entity entity; - AZ::Transform transformIn = AZ::Transform::CreateTranslation(AZ::Vector3(100.0f, 200.0f, 300.0f)) * AZ::Transform::CreateScale(AZ::Vector3(2.5f)); + AZ::Transform transformIn = AZ::Transform::CreateTranslation(AZ::Vector3(100.0f, 200.0f, 300.0f)) * AZ::Transform::CreateUniformScale(2.5f); CreateSphere(transformIn, 2.0f, entity); AZ::Transform transformOut; @@ -287,7 +287,7 @@ namespace UnitTest AZ::Entity entity; CreateSphere( AZ::Transform::CreateTranslation(AZ::Vector3(-30.0f, -30.0f, 22.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), 1.2f, entity); bool inside; @@ -303,7 +303,7 @@ namespace UnitTest AZ::Entity entity; CreateSphere( AZ::Transform::CreateTranslation(AZ::Vector3(-30.0f, -30.0f, 22.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(1.5f)), + AZ::Transform::CreateUniformScale(1.5f), 1.6f, entity); bool inside; @@ -319,7 +319,7 @@ namespace UnitTest AZ::Entity entity; CreateSphere( AZ::Transform::CreateTranslation(AZ::Vector3(19.0f, 34.0f, 37.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f)), + AZ::Transform::CreateUniformScale(2.0f), 1.0f, entity); float distance; @@ -335,7 +335,7 @@ namespace UnitTest AZ::Entity entity; CreateSphere( AZ::Transform::CreateTranslation(AZ::Vector3(19.0f, 34.0f, 37.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(0.5f)), + AZ::Transform::CreateUniformScale(0.5f), 1.0f, entity); float distance; diff --git a/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp index 65388d1fe5..b8f58d5d20 100644 --- a/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp @@ -139,7 +139,7 @@ namespace UnitTest AZ::Entity entity; CreateTube( AZ::Transform::CreateTranslation(AZ::Vector3(-40.0f, 6.0f, 1.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.5f, 1.0f, 1.0f)), // test max scale + AZ::Transform::CreateUniformScale(2.5f), 1.0f, entity); diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp index b0ebb10b0e..54eeb1fcc9 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp +++ b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp @@ -189,7 +189,7 @@ Quat CAnimAzEntityNode::GetRotate(float time) } ////////////////////////////////////////////////////////////////////////// -void CAnimAzEntityNode::SetScale(float time, const Vec3& scale) +void CAnimAzEntityNode::SetScale(float time, float scale) { CAnimComponentNode* transformComponent = GetTransformComponentNode(); if (transformComponent) @@ -198,7 +198,7 @@ void CAnimAzEntityNode::SetScale(float time, const Vec3& scale) } } -Vec3 CAnimAzEntityNode::GetScale() +float CAnimAzEntityNode::GetScale() { CAnimComponentNode* transformComponent = GetTransformComponentNode(); if (transformComponent) @@ -206,7 +206,7 @@ Vec3 CAnimAzEntityNode::GetScale() return transformComponent->GetScale(); } - return Vec3(.0f, .0f, .0f); + return 0.0f; } Vec3 CAnimAzEntityNode::GetOffsetPosition(const Vec3& position) diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h index 863d0e927f..d5af311b70 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h @@ -57,14 +57,14 @@ public: void SetPos(float time, const Vec3& pos) override; void SetRotate(float time, const Quat& quat) override; - void SetScale(float time, const Vec3& scale) override; + void SetScale(float time, float scale) override; Vec3 GetOffsetPosition(const Vec3& position) override; Vec3 GetPos() override; Quat GetRotate() override; Quat GetRotate(float time) override; - Vec3 GetScale() override; + float GetScale() override; ////////////////////////////////////////////////////////////////////////// void Serialize(XmlNodeRef& xmlNode, bool bLoading, bool bLoadEmptyTracks); diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp index ea7322014c..13a5d4ed63 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp +++ b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp @@ -341,10 +341,10 @@ void CAnimComponentNode::ConvertBetweenWorldAndLocalRotation(Quat& rotation, ETr } ////////////////////////////////////////////////////////////////////////// -void CAnimComponentNode::ConvertBetweenWorldAndLocalScale(Vec3& scale, ETransformSpaceConversionDirection conversionDirection) const +void CAnimComponentNode::ConvertBetweenWorldAndLocalScale(float& scale, ETransformSpaceConversionDirection conversionDirection) const { AZ::Transform parentTransform = AZ::Transform::Identity(); - AZ::Transform scaleTransform = AZ::Transform::CreateScale(AZ::Vector3(scale.x, scale.y, scale.z)); + AZ::Transform scaleTransform = AZ::Transform::CreateUniformScale(scale); GetParentWorldTransform(parentTransform); if (conversionDirection == eTransformConverstionDirection_toLocalSpace) @@ -353,8 +353,7 @@ void CAnimComponentNode::ConvertBetweenWorldAndLocalScale(Vec3& scale, ETransfor } scaleTransform = parentTransform * scaleTransform; - AZ::Vector3 vScale = scaleTransform.GetScale(); - scale.Set(vScale.GetX(), vScale.GetY(), vScale.GetZ()); + scale = scaleTransform.GetUniformScale(); } ////////////////////////////////////////////////////////////////////////// @@ -457,7 +456,7 @@ Quat CAnimComponentNode::GetRotate() } ////////////////////////////////////////////////////////////////////////// -void CAnimComponentNode::SetScale(float time, const Vec3& scale) +void CAnimComponentNode::SetScale(float time, float scale) { if (m_componentTypeId == AZ::Uuid(AZ::EditorTransformComponentTypeId) || m_componentTypeId == AzFramework::TransformComponent::TYPEINFO_Uuid()) { @@ -468,7 +467,7 @@ void CAnimComponentNode::SetScale(float time, const Vec3& scale) { // Scale is in World space, even if the entity is parented - because Component Entity AZ::Transforms do not correctly set // CBaseObject parenting, so we convert it to Local space here. This should probably be fixed, but for now, we explicitly change from World to Local space here. - Vec3 localScale(scale); + float localScale = scale; ConvertBetweenWorldAndLocalScale(localScale, eTransformConverstionDirection_toLocalSpace); scaleTrack->SetValue(time, localScale, bDefault); } @@ -480,15 +479,15 @@ void CAnimComponentNode::SetScale(float time, const Vec3& scale) } } -Vec3 CAnimComponentNode::GetScale() +float CAnimComponentNode::GetScale() { Maestro::SequenceComponentRequests::AnimatablePropertyAddress animatableAddress(m_componentId, "Scale"); - Maestro::SequenceComponentRequests::AnimatedVector3Value scaleValue(AZ::Vector3::CreateZero()); + Maestro::SequenceComponentRequests::AnimatedFloatValue scaleValue(0.0f); Maestro::SequenceComponentRequestBus::Event(m_pSequence->GetSequenceEntityId(), &Maestro::SequenceComponentRequestBus::Events::GetAnimatedPropertyValue, scaleValue, GetParentAzEntityId(), animatableAddress); // Always return World scale because Component Entity AZ::Transforms do not correctly set // CBaseObject parenting. This should probably be fixed, but for now, we explicitly change from Local to World space here. - Vec3 worldScale(scaleValue.GetVector3Value()); + float worldScale = scaleValue.GetFloatValue(); ConvertBetweenWorldAndLocalScale(worldScale, eTransformConverstionDirection_toWorldSpace); return worldScale; diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h index 5d83f7ba0d..48913e5b85 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h @@ -71,12 +71,12 @@ public: void SetPos(float time, const Vec3& pos) override; void SetRotate(float time, const Quat& quat) override; - void SetScale(float time, const Vec3& scale) override; + void SetScale(float time, float scale) override; Vec3 GetPos() override; Quat GetRotate() override; Quat GetRotate(float time) override; - Vec3 GetScale() override; + float GetScale() override; void Activate(bool bActivate) override; ////////////////////////////////////////////////////////////////////////// @@ -128,7 +128,7 @@ private: void GetParentWorldTransform(AZ::Transform& retTransform) const; void ConvertBetweenWorldAndLocalPosition(Vec3& position, ETransformSpaceConversionDirection conversionDirection) const; void ConvertBetweenWorldAndLocalRotation(Quat& rotation, ETransformSpaceConversionDirection conversionDirection) const; - void ConvertBetweenWorldAndLocalScale(Vec3& scale, ETransformSpaceConversionDirection conversionDirection) const; + void ConvertBetweenWorldAndLocalScale(float& scale, ETransformSpaceConversionDirection conversionDirection) const; // Utility function to query the units for a track and set the track multiplier if needed. Returns true if track multiplier was set. bool SetTrackMultiplier(IAnimTrack* track) const; diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimNode.h b/Gems/Maestro/Code/Source/Cinematics/AnimNode.h index 0c52ac5a48..f29ba2eab0 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimNode.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimNode.h @@ -79,12 +79,12 @@ public: ////////////////////////////////////////////////////////////////////////// void SetPos([[maybe_unused]] float time, [[maybe_unused]] const Vec3& pos) override {}; void SetRotate([[maybe_unused]] float time, [[maybe_unused]] const Quat& quat) override {}; - void SetScale([[maybe_unused]] float time, [[maybe_unused]] const Vec3& scale) override {}; + void SetScale([[maybe_unused]] float time, [[maybe_unused]] const float scale) override {}; Vec3 GetPos() override { return Vec3(0, 0, 0); }; Quat GetRotate() override { return Quat(0, 0, 0, 0); }; Quat GetRotate(float /*time*/) override { return Quat(0, 0, 0, 0); }; - Vec3 GetScale() override { return Vec3(0, 0, 0); }; + float GetScale() override { return 0.0f; }; virtual Matrix34 GetReferenceMatrix() const; diff --git a/Gems/PhysX/Code/Source/RigidBodyComponent.cpp b/Gems/PhysX/Code/Source/RigidBodyComponent.cpp index 8984343fe5..6709412ffe 100644 --- a/Gems/PhysX/Code/Source/RigidBodyComponent.cpp +++ b/Gems/PhysX/Code/Source/RigidBodyComponent.cpp @@ -203,9 +203,8 @@ namespace PhysX AZ::Quaternion newRotation = AZ::Quaternion::CreateIdentity(); m_interpolator->GetInterpolated(newPosition, newRotation, deltaTime); - AZ::Transform interpolatedTransform = AZ::Transform::CreateFromQuaternionAndTranslation(newRotation, newPosition); - interpolatedTransform.MultiplyByScale(m_initialScale); - AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetWorldTM, interpolatedTransform); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetRotationQuaternion, newRotation); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetWorldTranslation, newPosition); } } @@ -244,14 +243,8 @@ namespace PhysX } else { - AZ::Transform transform = m_rigidBody->GetTransform(); - - // Maintain scale (this must be precise). - AZ::Transform entityTransform = AZ::Transform::Identity(); - AZ::TransformBus::EventResult(entityTransform, GetEntityId(), &AZ::TransformInterface::GetWorldTM); - transform.MultiplyByScale(m_initialScale); - - AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetWorldTM, transform); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetRotationQuaternion, m_rigidBody->GetOrientation()); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetWorldTranslation, m_rigidBody->GetPosition()); } m_isLastMovementFromKinematicSource = false; } @@ -338,8 +331,6 @@ namespace PhysX m_interpolator = std::make_unique(); m_interpolator->Reset(transform.GetTranslation(), rotation); - m_initialScale = transform.ExtractScale(); - Physics::RigidBodyNotificationBus::Event(GetEntityId(), &Physics::RigidBodyNotificationBus::Events::OnPhysicsEnabled); Physics::WorldBodyNotificationBus::Event(GetEntityId(), &Physics::WorldBodyNotifications::OnPhysicsEnabled); } diff --git a/Gems/PhysX/Code/Source/RigidBodyComponent.h b/Gems/PhysX/Code/Source/RigidBodyComponent.h index c46e136669..6e5a45ea36 100644 --- a/Gems/PhysX/Code/Source/RigidBodyComponent.h +++ b/Gems/PhysX/Code/Source/RigidBodyComponent.h @@ -159,7 +159,6 @@ namespace PhysX AzPhysics::RigidBody* m_rigidBody = nullptr; AzPhysics::SceneHandle m_attachedSceneHandle = AzPhysics::InvalidSceneHandle; - AZ::Vector3 m_initialScale = AZ::Vector3::CreateOne(); bool m_staticTransformAtActivation = false; ///< Whether the transform was static when the component last activated. bool m_isLastMovementFromKinematicSource = false; ///< True when the source of the movement comes from SetKinematicTarget as opposed to coming from a Transform change bool m_rigidBodyTransformNeedsUpdateOnPhysReEnable = false; ///< True if rigid body transform needs to be synced to the entity's when physics is re-enabled diff --git a/Gems/PhysX/Code/Source/Utils.cpp b/Gems/PhysX/Code/Source/Utils.cpp index 767f386b6f..d04db0d37c 100644 --- a/Gems/PhysX/Code/Source/Utils.cpp +++ b/Gems/PhysX/Code/Source/Utils.cpp @@ -920,9 +920,9 @@ namespace PhysX AZ::Vector3 GetTransformScale(AZ::EntityId entityId) { - AZ::Vector3 worldScale = AZ::Vector3::CreateOne(); - AZ::TransformBus::EventResult(worldScale, entityId, &AZ::TransformBus::Events::GetWorldScale); - return worldScale; + float worldScale = 1.0f; + AZ::TransformBus::EventResult(worldScale, entityId, &AZ::TransformBus::Events::GetWorldUniformScale); + return AZ::Vector3(worldScale); } AZ::Vector3 GetUniformScale(AZ::EntityId entityId) diff --git a/Gems/PhysX/Code/Tests/ColliderScalingTests.cpp b/Gems/PhysX/Code/Tests/ColliderScalingTests.cpp index 51a11c7605..5c8fcb70d5 100644 --- a/Gems/PhysX/Code/Tests/ColliderScalingTests.cpp +++ b/Gems/PhysX/Code/Tests/ColliderScalingTests.cpp @@ -68,7 +68,7 @@ namespace PhysXEditorTests AZ::EntityId editorId = editorEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.5f)); + worldTM.SetUniformScale(1.5f); worldTM.SetTranslation(AZ::Vector3(5.0f, 6.0f, 7.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(30.0f))); AZ::TransformBus::Event(editorId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -99,7 +99,7 @@ namespace PhysXEditorTests AZ::EntityId editorId = editorEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.5f)); + worldTM.SetUniformScale(1.5f); worldTM.SetTranslation(AZ::Vector3(5.0f, 6.0f, 7.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(30.0f))); AZ::TransformBus::Event(editorId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -144,7 +144,7 @@ namespace PhysXEditorTests AZ::EntityId capsuleId = editorEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(0.5f)); + worldTM.SetUniformScale(0.5f); worldTM.SetTranslation(AZ::Vector3(3.0f, 1.0f, -4.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationY(AZ::DegToRad(90.0f))); AZ::TransformBus::Event(capsuleId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -176,7 +176,7 @@ namespace PhysXEditorTests AZ::EntityId capsuleId = editorEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(0.5f)); + worldTM.SetUniformScale(0.5f); worldTM.SetTranslation(AZ::Vector3(3.0f, 1.0f, -4.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationY(AZ::DegToRad(90.0f))); AZ::TransformBus::Event(capsuleId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -222,7 +222,7 @@ namespace PhysXEditorTests AZ::EntityId sphereId = editorEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.2f)); + worldTM.SetUniformScale(1.2f); worldTM.SetTranslation(AZ::Vector3(-2.0f, -1.0f, 3.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(90.0f))); AZ::TransformBus::Event(sphereId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -254,7 +254,7 @@ namespace PhysXEditorTests AZ::EntityId sphereId = editorEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.2f)); + worldTM.SetUniformScale(1.2f); worldTM.SetTranslation(AZ::Vector3(-2.0f, -1.0f, 3.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(90.0f))); AZ::TransformBus::Event(sphereId, &AZ::TransformBus::Events::SetWorldTM, worldTM); diff --git a/Gems/PhysX/Code/Tests/DebugDrawTests.cpp b/Gems/PhysX/Code/Tests/DebugDrawTests.cpp index 5b41c37f34..610ba8d6f6 100644 --- a/Gems/PhysX/Code/Tests/DebugDrawTests.cpp +++ b/Gems/PhysX/Code/Tests/DebugDrawTests.cpp @@ -32,7 +32,7 @@ namespace PhysXEditorTests AZ::EntityId boxId = boxEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.5f)); + worldTM.SetUniformScale(1.5f); worldTM.SetTranslation(AZ::Vector3(5.0f, 6.0f, 7.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(30.0f))); AZ::TransformBus::Event(boxId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -61,7 +61,7 @@ namespace PhysXEditorTests AZ::EntityId boxId = boxEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.2f)); + worldTM.SetUniformScale(1.2f); worldTM.SetTranslation(AZ::Vector3(4.0f, -3.0f, 1.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationZ(AZ::DegToRad(45.0f))); AZ::TransformBus::Event(boxId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -91,7 +91,7 @@ namespace PhysXEditorTests AZ::EntityId boxId = boxEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.2f)); + worldTM.SetUniformScale(1.2f); worldTM.SetTranslation(AZ::Vector3(4.0f, -3.0f, 1.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationZ(AZ::DegToRad(45.0f))); AZ::TransformBus::Event(boxId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -129,7 +129,7 @@ namespace PhysXEditorTests AZ::EntityId capsuleId = capsuleEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(0.5f)); + worldTM.SetUniformScale(0.5f); worldTM.SetTranslation(AZ::Vector3(3.0f, 1.0f, -4.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationY(AZ::DegToRad(90.0f))); AZ::TransformBus::Event(capsuleId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -158,7 +158,7 @@ namespace PhysXEditorTests AZ::EntityId capsuleId = capsuleEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.4f)); + worldTM.SetUniformScale(1.4f); worldTM.SetTranslation(AZ::Vector3(1.0f, -4.0f, 4.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(45.0f))); AZ::TransformBus::Event(capsuleId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -189,7 +189,7 @@ namespace PhysXEditorTests AZ::EntityId sphereId = sphereEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(1.2f)); + worldTM.SetUniformScale(1.2f); worldTM.SetTranslation(AZ::Vector3(-2.0f, -1.0f, 3.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationX(AZ::DegToRad(90.0f))); AZ::TransformBus::Event(sphereId, &AZ::TransformBus::Events::SetWorldTM, worldTM); @@ -218,7 +218,7 @@ namespace PhysXEditorTests AZ::EntityId sphereId = sphereEntity->GetId(); AZ::Transform worldTM; - worldTM.SetScale(AZ::Vector3(0.8f)); + worldTM.SetUniformScale(0.8f); worldTM.SetTranslation(AZ::Vector3(2.0f, -1.0f, 3.0f)); worldTM.SetRotation(AZ::Quaternion::CreateRotationY(AZ::DegToRad(45.0f))); AZ::TransformBus::Event(sphereId, &AZ::TransformBus::Events::SetWorldTM, worldTM); diff --git a/Gems/PhysX/Code/Tests/RigidBodyComponentTests.cpp b/Gems/PhysX/Code/Tests/RigidBodyComponentTests.cpp index eee747d390..4ff88c0b3b 100644 --- a/Gems/PhysX/Code/Tests/RigidBodyComponentTests.cpp +++ b/Gems/PhysX/Code/Tests/RigidBodyComponentTests.cpp @@ -38,8 +38,8 @@ namespace PhysXEditorTests const AZ::Aabb originalAabb = rigidBodyComponent->GetRigidBody()->GetAabb(); // Update the scale - const AZ::Vector3 scale(2.0f); - AZ::TransformBus::Event(editorEntity->GetId(), &AZ::TransformInterface::SetLocalScale, scale); + float scale = 2.0f; + AZ::TransformBus::Event(editorEntity->GetId(), &AZ::TransformInterface::SetLocalUniformScale, scale); // Trigger editor physics world update so EditorRigidBodyComponent can process scale change auto* physicsSystem = AZ::Interface::Get(); @@ -89,8 +89,8 @@ namespace PhysXEditorTests idPair, &PhysX::EditorColliderComponentRequests::SetColliderOffset, offset); // Update the scale - const AZ::Vector3 scale(2.0f); - AZ::TransformBus::Event(editorEntity->GetId(), &AZ::TransformInterface::SetLocalScale, scale); + float scale = 2.0f; + AZ::TransformBus::Event(editorEntity->GetId(), &AZ::TransformInterface::SetLocalUniformScale, scale); // Update editor world to let updates to be applied physicsSystem->Simulate(0.1f); diff --git a/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp b/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp index 8af9defff8..ad632b579d 100644 --- a/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp +++ b/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp @@ -241,7 +241,7 @@ namespace PhysXEditorTests SetPolygonPrismHeight(entityId, 2.0f); // update the transform scale and non-uniform scale - AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalScale, AZ::Vector3(2.0f)); + AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalUniformScale, 2.0f); AZ::NonUniformScaleRequestBus::Event(entityId, &AZ::NonUniformScaleRequests::SetScale, AZ::Vector3(0.5f, 1.5f, 2.0f)); EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get()); @@ -435,8 +435,8 @@ namespace PhysXEditorTests &LmbrCentral::BoxShapeComponentRequests::GetBoxDimensions); // update the transform - const AZ::Vector3 scale(2.0f); - AZ::TransformBus::Event(editorEntityId, &AZ::TransformInterface::SetLocalScale, scale); + const float scale = 2.0f; + AZ::TransformBus::Event(editorEntityId, &AZ::TransformInterface::SetLocalUniformScale, scale); const AZ::Vector3 translation(10.0f, 20.0f, 30.0f); AZ::TransformBus::Event(editorEntityId, &AZ::TransformInterface::SetWorldTranslation, translation); @@ -527,10 +527,8 @@ namespace PhysXEditorTests editorParentEntity->Activate(); // set some scale to parent entity - const AZ::Vector3 parentScale(2.0f); - AZ::TransformBus::Event(editorParentEntity->GetId(), - &AZ::TransformInterface::SetLocalScale, - parentScale); + const float parentScale = 2.0f; + AZ::TransformBus::Event(editorParentEntity->GetId(), &AZ::TransformInterface::SetLocalUniformScale, parentScale); // create an editor child entity with a shape collider component and a box shape component EntityPtr editorChildEntity = CreateInactiveEditorEntity("ChildEntity"); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp index a0db02c3a8..30e55cee49 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp @@ -2527,15 +2527,15 @@ namespace ScriptCanvas { Data::TransformType copy(source); AZ::Vector3 pos = copy.GetTranslation(); - AZ::Vector3 scale = copy.ExtractScale(); + float scale = copy.ExtractUniformScale(); AZ::Vector3 rotation = AZ::ConvertTransformToEulerDegrees(copy); return AZStd::string::format ( "(Position: X: %f, Y: %f, Z: %f," " Rotation: X: %f, Y: %f, Z: %f," - " Scale: X: %f, Y: %f, Z: %f)" + " Scale: %f)" , static_cast(pos.GetX()), static_cast(pos.GetY()), static_cast(pos.GetZ()) , static_cast(rotation.GetX()), static_cast(rotation.GetY()), static_cast(rotation.GetZ()) - , static_cast(scale.GetX()), static_cast(scale.GetY()), static_cast(scale.GetZ())); + , scale); } AZStd::string Datum::ToStringVector2(const AZ::Vector2& source) const diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/Rotate.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/Rotate.cpp index c510b55314..2f79d4218a 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/Rotate.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/Rotate.cpp @@ -47,21 +47,10 @@ namespace ScriptCanvas AZ::Transform currentTransform = AZ::Transform::CreateIdentity(); AZ::TransformBus::EventResult(currentTransform, targetEntity, &AZ::TransformInterface::GetWorldTM); - - AZ::Vector3 position = currentTransform.GetTranslation(); - AZ::Quaternion currentRotation = currentTransform.GetRotation(); + currentTransform.SetRotation((rotation * currentTransform.GetRotation().GetNormalized())); - AZ::Quaternion newRotation = (rotation * currentRotation); - newRotation.Normalize(); - - AZ::Transform newTransform = AZ::Transform::CreateIdentity(); - - newTransform.SetScale(currentTransform.GetScale()); - newTransform.SetRotation(newRotation); - newTransform.SetTranslation(position); - - AZ::TransformBus::Event(targetEntity, &AZ::TransformInterface::SetWorldTM, newTransform); + AZ::TransformBus::Event(targetEntity, &AZ::TransformInterface::SetWorldTM, currentTransform); } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/RotateMethod.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/RotateMethod.cpp index 20ea4e1b33..53884f4dd8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/RotateMethod.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/RotateMethod.cpp @@ -44,22 +44,12 @@ namespace ScriptCanvas { AZ::Quaternion rotation = AZ::ConvertEulerDegreesToQuaternion(angles); - AZ::Transform currentTransform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(currentTransform, targetEntity, &AZ::TransformInterface::GetWorldTM); + AZ::Transform transform = AZ::Transform::CreateIdentity(); + AZ::TransformBus::EventResult(transform, targetEntity, &AZ::TransformInterface::GetWorldTM); - AZ::Vector3 position = currentTransform.GetTranslation(); - AZ::Quaternion currentRotation = currentTransform.GetRotation(); + transform.SetRotation((rotation * transform.GetRotation()).GetNormalized()); - AZ::Quaternion newRotation = (rotation * currentRotation); - newRotation.Normalize(); - - AZ::Transform newTransform = AZ::Transform::CreateIdentity(); - - newTransform.CreateScale(currentTransform.ExtractScale()); - newTransform.SetRotation(newRotation); - newTransform.SetTranslation(position); - - AZ::TransformBus::Event(targetEntity, &AZ::TransformInterface::SetWorldTM, newTransform); + AZ::TransformBus::Event(targetEntity, &AZ::TransformInterface::SetWorldTM, transform); } } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h index 6a0f082272..7aafdf584e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h @@ -26,9 +26,9 @@ namespace ScriptCanvas using namespace MathNodeUtilities; static const char* k_categoryName = "Math/Transform"; - AZ_INLINE std::tuple ExtractScale(TransformType source) + AZ_INLINE std::tuple ExtractScale(TransformType source) { - auto scale(source.ExtractScale()); + auto scale(source.ExtractUniformScale()); return std::make_tuple( scale, source ); } SCRIPT_CANVAS_GENERIC_FUNCTION_MULTI_RESULTS_NODE(ExtractScale, k_categoryName, "{8DFE5247-0950-4CD1-87E6-0CAAD42F1637}", "returns a vector which is the length of the scale components, and a transform with the scale extracted ", "Source", "Scale", "Extracted"); diff --git a/Gems/StartingPointCamera/Code/Source/CameraLookAtBehaviors/RotateCameraLookAt.cpp b/Gems/StartingPointCamera/Code/Source/CameraLookAtBehaviors/RotateCameraLookAt.cpp index 2ab7e0bd01..e2e818f3e7 100644 --- a/Gems/StartingPointCamera/Code/Source/CameraLookAtBehaviors/RotateCameraLookAt.cpp +++ b/Gems/StartingPointCamera/Code/Source/CameraLookAtBehaviors/RotateCameraLookAt.cpp @@ -58,19 +58,9 @@ namespace Camera float axisPolarity = m_shouldInvertAxis ? -1.0f : 1.0f; float rotationAmount = axisPolarity * m_rotationAmount; - // remove translation and scale - AZ::Vector3 translation = outLookAtTargetTransform.GetTranslation(); - outLookAtTargetTransform.SetTranslation(AZ::Vector3::CreateZero()); - AZ::Vector3 transformScale = outLookAtTargetTransform.ExtractScale(); - - // perform our rotation - AZ::Transform desiredRotationTransform = AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateFromAxisAngle(outLookAtTargetTransform.GetBasis(m_axisOfRotation), rotationAmount)); - - outLookAtTargetTransform = desiredRotationTransform * outLookAtTargetTransform; - - // return scale and translate - outLookAtTargetTransform.SetScale(transformScale); - outLookAtTargetTransform.SetTranslation(translation); + AZ::Quaternion desiredRotation = AZ::Quaternion::CreateFromAxisAngle( + outLookAtTargetTransform.GetBasis(m_axisOfRotation), rotationAmount); + outLookAtTargetTransform.SetRotation(desiredRotation * outLookAtTargetTransform.GetRotation()); } void RotateCameraLookAt::Activate(AZ::EntityId entityId) From e9d3c0f08089bfecb866273e9b21f8f0edecd62d Mon Sep 17 00:00:00 2001 From: greerdv Date: Thu, 20 May 2021 13:30:32 +0100 Subject: [PATCH 04/20] fix after merge --- Gems/PhysX/Code/Source/RigidBodyComponent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gems/PhysX/Code/Source/RigidBodyComponent.cpp b/Gems/PhysX/Code/Source/RigidBodyComponent.cpp index f74232fea6..feb35ea07d 100644 --- a/Gems/PhysX/Code/Source/RigidBodyComponent.cpp +++ b/Gems/PhysX/Code/Source/RigidBodyComponent.cpp @@ -256,8 +256,8 @@ namespace PhysX } else { - AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetRotationQuaternion, m_rigidBody->GetOrientation()); - AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetWorldTranslation, m_rigidBody->GetPosition()); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetRotationQuaternion, rigidBody->GetOrientation()); + AZ::TransformBus::Event(GetEntityId(), &AZ::TransformInterface::SetWorldTranslation, rigidBody->GetPosition()); } m_isLastMovementFromKinematicSource = false; } From 0315d97fe61809b2fafbabd61feb05cde21e7558 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 13:51:26 +0100 Subject: [PATCH 05/20] fix white box editor physics tests --- .../AzToolsFramework/AzToolsFramework/Maths/TransformUtils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Maths/TransformUtils.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Maths/TransformUtils.h index 247be33839..97add27604 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Maths/TransformUtils.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Maths/TransformUtils.h @@ -33,8 +33,7 @@ namespace AzToolsFramework inline AZ::Transform TransformUniformScale(const AZ::Transform& transform) { AZ::Transform transformUniformScale = transform; - const float maxScale = transformUniformScale.GetScale().GetMaxElement(); - transformUniformScale.SetScale(AZ::Vector3(maxScale)); + transformUniformScale.SetUniformScale(transformUniformScale.GetUniformScale()); return transformUniformScale; } From 76202e4000f2e442cf052530c8a18fbe87d12f3c Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 14:39:18 +0100 Subject: [PATCH 06/20] fix azcore tests --- .../AzCore/AzCore/Math/Transform.cpp | 8 +++- .../Tests/Math/TransformPerformanceTests.cpp | 10 ++--- .../AzCore/Tests/Math/TransformTests.cpp | 37 ++++--------------- Code/Framework/AzCore/Tests/ScriptMath.cpp | 20 +++++----- 4 files changed, 29 insertions(+), 46 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.cpp b/Code/Framework/AzCore/AzCore/Math/Transform.cpp index ad57daa5e4..4d899f6204 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Transform.cpp @@ -284,10 +284,15 @@ namespace AZ Method("GetRotation", &Transform::GetRotation)-> Method("SetRotation", &Transform::SetRotation)-> Method("GetScale", &Transform::GetScale)-> - Method("SetScale", static_cast(&Transform::SetScale))-> + Method("GetUniformScale", &Transform::GetUniformScale)-> + Method("SetScale", &Transform::SetScale)-> + Method("SetUniformScale", &Transform::SetUniformScale)-> Method("ExtractScale", &Transform::ExtractScale)-> Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> + Method("ExtractUniformScale", &Transform::ExtractUniformScale)-> + Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> Method("MultiplyByScale", &Transform::MultiplyByScale)-> + Method("MultiplyByUniformScale", &Transform::MultiplyByUniformScale)-> Method("GetInverse", &Transform::GetInverse)-> Method("Invert", &Transform::Invert)-> Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> @@ -306,6 +311,7 @@ namespace AZ Method("CreateFromMatrix3x3", &Transform::CreateFromMatrix3x3)-> Method("CreateFromMatrix3x3AndTranslation", &Transform::CreateFromMatrix3x3AndTranslation)-> Method("CreateScale", &Transform::CreateScale)-> + Method("CreateUniformScale", &Transform::CreateUniformScale)-> Method("CreateTranslation", &Transform::CreateTranslation)-> Method("ConstructFromValuesNumeric", &Internal::ConstructTransformFromValues); } diff --git a/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp b/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp index a9788375ad..943aba9b76 100644 --- a/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/TransformPerformanceTests.cpp @@ -180,7 +180,7 @@ namespace Benchmark } } - BENCHMARK_F(BM_MathTransform, CreateScale)(benchmark::State& state) + BENCHMARK_F(BM_MathTransform, CreateUniformScale)(benchmark::State& state) { for (auto _ : state) { @@ -344,7 +344,7 @@ namespace Benchmark } } - BENCHMARK_F(BM_MathTransform, GetScale)(benchmark::State& state) + BENCHMARK_F(BM_MathTransform, GetUniformScale)(benchmark::State& state) { for (auto _ : state) { @@ -356,20 +356,20 @@ namespace Benchmark } } - BENCHMARK_F(BM_MathTransform, SetScale)(benchmark::State& state) + BENCHMARK_F(BM_MathTransform, SetUniformScale)(benchmark::State& state) { for (auto _ : state) { for (auto& testData : m_testDataArray) { AZ::Transform testTransform = testData.t2; - testTransform.SetScale(testData.v3); + testTransform.SetUniformScale(testData.value[0]); benchmark::DoNotOptimize(testTransform); } } } - BENCHMARK_F(BM_MathTransform, ExtractScale)(benchmark::State& state) + BENCHMARK_F(BM_MathTransform, ExtractUniformScale)(benchmark::State& state) { for (auto _ : state) { diff --git a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp index 49607573ce..8525ba29ec 100644 --- a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp @@ -159,30 +159,7 @@ namespace UnitTest INSTANTIATE_TEST_CASE_P(MATH_Transform, TransformCreateFromQuaternionFixture, ::testing::ValuesIn(MathTestData::UnitQuaternions)); - using TransformCreateFromMatrix3x3Fixture = ::testing::TestWithParam; - - TEST_P(TransformCreateFromMatrix3x3Fixture, CreateFromMatrix3x3) - { - const AZ::Matrix3x3 matrix3x3 = GetParam(); - const AZ::Transform transform = AZ::Transform::CreateFromMatrix3x3(matrix3x3); - EXPECT_THAT(transform.GetTranslation(), IsClose(AZ::Vector3::CreateZero())); - const AZ::Vector3 vector(2.3f, -0.6, 1.8f); - EXPECT_THAT(transform.TransformPoint(vector), IsClose(matrix3x3 * vector)); - } - - TEST_P(TransformCreateFromMatrix3x3Fixture, CreateFromMatrix3x3AndTranslation) - { - const AZ::Matrix3x3 matrix3x3 = GetParam(); - const AZ::Vector3 translation(-2.6f, 1.7f, 0.8f); - const AZ::Transform transform = AZ::Transform::CreateFromMatrix3x3AndTranslation(matrix3x3, translation); - EXPECT_THAT(transform.GetTranslation(), IsClose(translation)); - const AZ::Vector3 vector(2.3f, -0.6, 1.8f); - EXPECT_THAT(transform.TransformPoint(vector), IsClose(matrix3x3 * vector + translation)); - } - - INSTANTIATE_TEST_CASE_P(MATH_Transform, TransformCreateFromMatrix3x3Fixture, ::testing::ValuesIn(MathTestData::Matrix3x3s)); - - TEST(MATH_Transform, CreateScale) + TEST(MATH_Transform, CreateUniformScale) { const float scale = 1.7f; const AZ::Transform transform = AZ::Transform::CreateUniformScale(scale); @@ -254,14 +231,14 @@ namespace UnitTest TEST(MATH_Transform, TranslationCorrectInTransformHierarchy) { AZ::Transform parent = AZ::Transform::CreateRotationZ(AZ::DegToRad(45.0f)); - parent.SetScale(AZ::Vector3(3.0f, 2.0f, 1.0f)); + parent.SetUniformScale(3.0f); parent.SetTranslation(AZ::Vector3(0.2f, 0.3f, 0.4f)); AZ::Transform child = AZ::Transform::CreateRotationZ(AZ::DegToRad(90.0f)); child.SetTranslation(AZ::Vector3(0.5f, 0.6f, 0.7f)); const AZ::Transform overallTransform = parent * child; const AZ::Vector3 overallTranslation = overallTransform.GetTranslation(); - const AZ::Vector3 expectedTranslation(0.412132f, 2.20919f, 1.1f); - EXPECT_THAT(overallTranslation, IsClose(AZ::Vector3(0.412132f, 2.20919f, 1.1f))); + const AZ::Vector3 expectedTranslation(-0.012132f, 2.633452f, 2.5f); + EXPECT_THAT(overallTranslation, IsClose(expectedTranslation)); } TEST(MATH_Transform, TransformPointVector3) @@ -337,10 +314,10 @@ namespace UnitTest TEST_P(TransformScaleFixture, Scale) { const AZ::Transform orthogonalTransform = GetParam(); - EXPECT_THAT(orthogonalTransform.GetScale(), IsClose(AZ::Vector3::CreateOne())); + EXPECT_NEAR(orthogonalTransform.GetUniformScale(), 1.0f, AZ::Constants::Tolerance); AZ::Transform unscaledTransform = orthogonalTransform; - unscaledTransform.ExtractScale(); - EXPECT_THAT(unscaledTransform.GetScale(), IsClose(AZ::Vector3::CreateOne())); + unscaledTransform.ExtractUniformScale(); + EXPECT_NEAR(unscaledTransform.GetUniformScale(), 1.0f, AZ::Constants::Tolerance); const float scale = 2.8f; AZ::Transform scaledTransform = orthogonalTransform; scaledTransform.MultiplyByUniformScale(scale); diff --git a/Code/Framework/AzCore/Tests/ScriptMath.cpp b/Code/Framework/AzCore/Tests/ScriptMath.cpp index 493a21de36..dce63051c9 100644 --- a/Code/Framework/AzCore/Tests/ScriptMath.cpp +++ b/Code/Framework/AzCore/Tests/ScriptMath.cpp @@ -1275,7 +1275,7 @@ namespace UnitTest script->Execute("AZTestAssert(t1:TransformVector(Vector3(1, 0, 0)):IsClose(Vector3(1, 0, 0)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 1, 0)):IsClose(Vector3(0, 0.866, 0.5)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 0, 1)):IsClose(Vector3(0, -0.5, 0.866)))"); - script->Execute("t1 = Transform.CreateScale(2)"); + script->Execute("t1 = Transform.CreateUniformScale(2)"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(1, 0, 0)):IsClose(Vector3(2, 0, 0)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 1, 0)):IsClose(Vector3(0, 2, 0)))"); script->Execute("AZTestAssert(t1:TransformVector(Vector3(0, 0, 1)):IsClose(Vector3(0, 0, 2)))"); @@ -1341,19 +1341,19 @@ namespace UnitTest script->Execute("AZTestAssert(t3:GetTranslation():IsClose(Vector3(-5.90, 25.415, 19.645), 0.001))"); ////test inverse, should handle non-orthogonal matrices - script->Execute("t1 = Transform.CreateRotationX(1) * Transform.CreateScale(2)"); + script->Execute("t1 = Transform.CreateRotationX(1) * Transform.CreateUniformScale(2)"); script->Execute("AZTestAssert((t1*t1:GetInverse()):IsClose(Transform.CreateIdentity()))"); ////scale access - script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(40)) * Transform.CreateScale(3)"); - script->Execute("AZTestAssert(t1:GetScale():IsClose(3))"); - script->Execute("AZTestAssert(t1:ExtractScale():IsClose(3))"); - script->Execute("AZTestAssert(t1:GetScale():IsClose(1))"); - script->Execute("t1:MultiplyByScale(2)"); - script->Execute("AZTestAssert(t1:GetScale():IsClose(2))"); + script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(40)) * Transform.CreateUniformScale(3)"); + script->Execute("AZTestAssertFloatClose(t1:GetUniformScale(), 3)"); + script->Execute("AZTestAssertFloatClose(t1:ExtractUniformScale(), 3)"); + script->Execute("AZTestAssertFloatClose(t1:GetUniformScale(), 1)"); + script->Execute("t1:MultiplyByUniformScale(2)"); + script->Execute("AZTestAssertFloatClose(t1:GetUniformScale(), 2)"); ////orthogonalize - script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateScale(3)"); + script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateUniformScale(3)"); script->Execute("t1:SetTranslation(Vector3(1,2,3))"); script->Execute("t2 = t1:GetOrthogonalized()"); script->Execute("AZTestAssertFloatClose(t2:GetBasisX():GetLength(), 1)"); @@ -1372,7 +1372,7 @@ namespace UnitTest script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30))"); script->Execute("t1:SetTranslation(Vector3(1, 2, 3))"); script->Execute("AZTestAssert(t1:IsOrthogonal(0.05))"); - script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateScale(2)"); + script->Execute("t1 = Transform.CreateRotationX(Math.DegToRad(30)) * Transform.CreateUniformScale(2)"); script->Execute("AZTestAssert( not t1:IsOrthogonal(0.05))"); ////IsClose From fadd2276986353a89cff29a32bdc118667ce340a Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 16:30:24 +0100 Subject: [PATCH 07/20] fix aztoolsframework tests --- Code/Framework/AzCore/AzCore/Math/Quaternion.cpp | 9 ++++++++- Code/Framework/AzCore/AzCore/Math/Quaternion.h | 5 ++++- .../Components/TransformComponent.cpp | 9 +++------ Code/Framework/AzToolsFramework/Tests/Slice.cpp | 3 +++ .../EditorLayerComponentTests.cpp | 8 ++++---- .../EditorTransformComponentTests.cpp | 16 ++++++++-------- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp b/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp index 143fe59ca7..06443c0698 100644 --- a/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp @@ -348,13 +348,20 @@ namespace AZ return result.GetW() >= 0.0f ? result : -result; } - const Quaternion Quaternion::CreateFromEulerAnglesDegrees(Vector3& anglesInDegrees) + const Quaternion Quaternion::CreateFromEulerAnglesDegrees(const Vector3& anglesInDegrees) { Quaternion result; result.SetFromEulerDegrees(anglesInDegrees); return result; } + const Quaternion Quaternion::CreateFromEulerAnglesRadians(const Vector3& anglesInRadians) + { + Quaternion result; + result.SetFromEulerRadians(anglesInRadians); + return result; + } + Quaternion Quaternion::Slerp(const Quaternion& dest, float t) const { const float DestDot = Dot(dest); diff --git a/Code/Framework/AzCore/AzCore/Math/Quaternion.h b/Code/Framework/AzCore/AzCore/Math/Quaternion.h index c4502063de..be8ac3e841 100644 --- a/Code/Framework/AzCore/AzCore/Math/Quaternion.h +++ b/Code/Framework/AzCore/AzCore/Math/Quaternion.h @@ -84,7 +84,10 @@ namespace AZ static Quaternion CreateShortestArc(const Vector3& v1, const Vector3& v2); /// Creates a quaternion using rotation in degrees about the axes. First rotated about the X axis, followed by the Y axis, then the Z axis. - static const Quaternion CreateFromEulerAnglesDegrees(Vector3& anglesInDegrees); + static const Quaternion CreateFromEulerAnglesDegrees(const Vector3& anglesInDegrees); + + /// Creates a quaternion using rotation in radians about the axes. First rotated about the X axis, followed by the Y axis, then the Z axis. + static const Quaternion CreateFromEulerAnglesRadians(const Vector3& anglesInRadians); //! Stores the vector to an array of 4 floats. The floats need only be 4 byte aligned, 16 byte alignment is not required. void StoreToFloat4(float* values) const; diff --git a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp index 8d5cbef030..3dafc7c717 100644 --- a/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Components/TransformComponent.cpp @@ -432,17 +432,14 @@ namespace AzFramework void TransformComponent::SetLocalRotation(const AZ::Vector3& eulerRadianAngles) { - AZ::Transform newLocalTM = AZ::ConvertEulerRadiansToTransform(eulerRadianAngles); - newLocalTM.SetScale(m_localTM.GetScale()); - newLocalTM.SetTranslation(m_localTM.GetTranslation()); + AZ::Transform newLocalTM = m_localTM; + newLocalTM.SetRotation(AZ::Quaternion::CreateFromEulerAnglesRadians(eulerRadianAngles)); SetLocalTM(newLocalTM); } void TransformComponent::SetLocalRotationQuaternion(const AZ::Quaternion& quaternion) { - AZ::Transform newLocalTM; - newLocalTM.SetScale(m_localTM.GetScale()); - newLocalTM.SetTranslation(m_localTM.GetTranslation()); + AZ::Transform newLocalTM = m_localTM; newLocalTM.SetRotation(quaternion); SetLocalTM(newLocalTM); } diff --git a/Code/Framework/AzToolsFramework/Tests/Slice.cpp b/Code/Framework/AzToolsFramework/Tests/Slice.cpp index 33160b9c20..7b67481684 100644 --- a/Code/Framework/AzToolsFramework/Tests/Slice.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Slice.cpp @@ -483,6 +483,9 @@ namespace UnitTest { AUTO_RESULT_IF_SETTING_TRUE(UnitTest::prefabSystemSetting, true) + // Swallow deprecation warnings from the Transform component as they are not relevant to this test + UnitTest::ErrorHandler errorHandler("GetScale is deprecated"); + // Create a parent entity with a transform component AZ::Entity* parentEntity = aznew AZ::Entity("TestParentEntity"); parentEntity->CreateComponent(); diff --git a/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp index 7b03b63dd0..2177b9e1b2 100644 --- a/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp @@ -610,15 +610,15 @@ namespace AzToolsFramework m_layerEntity.m_layer->ClearUnsavedChanges(); // Change the scale of the child entity so it registers as an unsaved change on the layer. - AZ::Vector3 scale(-1.0f,0.0f,0.0f); + float scale = 0.0f; AZ::TransformBus::EventResult( scale, childEntity->GetId(), - &AZ::TransformBus::Events::GetLocalScale); - scale.SetX(scale.GetX() + 1.0f); + &AZ::TransformBus::Events::GetLocalUniformScale); + scale += 1.0f; AZ::TransformBus::Event( childEntity->GetId(), - &AZ::TransformBus::Events::SetLocalScale, + &AZ::TransformBus::Events::SetLocalUniformScale, scale); bool hasUnsavedChanges = false; diff --git a/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorTransformComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorTransformComponentTests.cpp index 62cf16f9a7..fcc4aa49e5 100644 --- a/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorTransformComponentTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorTransformComponentTests.cpp @@ -52,19 +52,19 @@ namespace AzToolsFramework TransformTestEntityHierarchy hierarchy = BuildTestHierarchy(); // Set scale to parent entity - const AZ::Vector3 parentScale(2.0f, 1.0f, 3.0f); - AZ::TransformBus::Event(hierarchy.m_parentId, &AZ::TransformInterface::SetLocalScale, parentScale); + const float parentScale = 2.0f; + AZ::TransformBus::Event(hierarchy.m_parentId, &AZ::TransformInterface::SetLocalUniformScale, parentScale); // Set scale to child entity - const AZ::Vector3 childScale(5.0f, 6.0f, 10.0f); - AZ::TransformBus::Event(hierarchy.m_childId, &AZ::TransformInterface::SetLocalScale, childScale); + const float childScale = 5.0f; + AZ::TransformBus::Event(hierarchy.m_childId, &AZ::TransformInterface::SetLocalUniformScale, childScale); - const AZ::Vector3 expectedScale = childScale * parentScale; + const float expectedScale = childScale * parentScale; - AZ::Vector3 childWorldScale = AZ::Vector3::CreateOne(); - AZ::TransformBus::EventResult(childWorldScale, hierarchy.m_childId, &AZ::TransformBus::Events::GetWorldScale); + float childWorldScale = 1.0f; + AZ::TransformBus::EventResult(childWorldScale, hierarchy.m_childId, &AZ::TransformBus::Events::GetWorldUniformScale); - EXPECT_THAT(childWorldScale, UnitTest::IsClose(expectedScale)); + EXPECT_NEAR(childWorldScale, expectedScale, AZ::Constants::Tolerance); } TEST_F(EditorTransformComponentTest, TransformTests_GetChildren_DirectChildrenMatchHierarchy) From 047000862deef266e13339f75db8b1f9593bafc1 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 17:31:51 +0100 Subject: [PATCH 08/20] fix lmbrcentral tests --- Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp index 24ee8ace2f..5df486d9a2 100644 --- a/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/BoxShapeTest.cpp @@ -593,9 +593,9 @@ namespace UnitTest float distance; LmbrCentral::ShapeComponentRequestsBus::EventResult( - distance, entity.GetId(), &LmbrCentral::ShapeComponentRequests::DistanceFromPoint, AZ::Vector3(3.6356f, 30.636f, 40.0f)); + distance, entity.GetId(), &LmbrCentral::ShapeComponentRequests::DistanceFromPoint, AZ::Vector3(4.0f, 33.5f, 38.0f)); - EXPECT_NEAR(distance, 3.0f, 1e-2f); + EXPECT_NEAR(distance, 1.45f, 1e-2f); } // distance scaled @@ -613,7 +613,7 @@ namespace UnitTest LmbrCentral::ShapeComponentRequestsBus::EventResult( distance, entity.GetId(), &LmbrCentral::ShapeComponentRequests::DistanceFromPoint, AZ::Vector3(10.0f, 37.0f, 48.0f)); - EXPECT_NEAR(distance, 13.0f, 1e-2f); + EXPECT_NEAR(distance, 15.0f, 1e-2f); } TEST_F(BoxShapeTest, DistanceFromPointNonUniformScale) From adb37b4a769d48cb98b963faf574039e08e3e9a9 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 21:38:53 +0100 Subject: [PATCH 09/20] fix physx editor tests --- .../AzCore/AzCore/Math/Transform.cpp | 10 ++-- Code/Framework/AzCore/AzCore/Math/Transform.h | 2 +- .../AzCore/AzCore/Math/Transform.inl | 58 +++++++++---------- .../AzCore/Tests/AZTestShared/Utils/Utils.cpp | 20 ++++++- .../AzCore/Tests/AZTestShared/Utils/Utils.h | 8 +++ .../Tests/ShapeColliderComponentTests.cpp | 7 +-- 6 files changed, 64 insertions(+), 41 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.cpp b/Code/Framework/AzCore/AzCore/Math/Transform.cpp index 4d899f6204..0bdfb3b318 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Transform.cpp @@ -130,7 +130,7 @@ namespace AZ const Transform* transform = reinterpret_cast(classPtr); float data[NumFloats]; transform->GetRotation().StoreToFloat4(data); - Vector3(transform->GetScale()).StoreToFloat3(&data[4]); + transform->GetScale().StoreToFloat3(&data[4]); transform->GetTranslation().StoreToFloat3(&data[7]); for (int i = 0; i < NumFloats; i++) @@ -220,7 +220,7 @@ namespace AZ Vector3 translation = Vector3::CreateFromFloat3(&data[7]); *reinterpret_cast(classPtr) = - Transform::CreateFromQuaternionAndTranslation(rotation, translation) * Transform::CreateUniformScale(scale.GetMaxElement()); + Transform::CreateFromQuaternionAndTranslation(rotation, translation) * Transform::CreateScale(scale); return true; } @@ -321,7 +321,7 @@ namespace AZ { Transform result; Matrix3x3 tmp = value; - result.m_scale = tmp.ExtractScale().GetMaxElement(); + result.m_scale = tmp.ExtractScale(); result.m_rotation = Quaternion::CreateFromMatrix3x3(tmp); result.m_translation = Vector3::CreateZero(); return result; @@ -331,7 +331,7 @@ namespace AZ { Transform result; Matrix3x3 tmp = value; - result.m_scale = tmp.ExtractScale().GetMaxElement(); + result.m_scale = tmp.ExtractScale(); result.m_rotation = Quaternion::CreateFromMatrix3x3(tmp); result.m_translation = p; return result; @@ -341,7 +341,7 @@ namespace AZ { Transform result; Matrix3x4 tmp = value; - result.m_scale = tmp.ExtractScale().GetMaxElement(); + result.m_scale = tmp.ExtractScale(); result.m_rotation = Quaternion::CreateFromMatrix3x4(tmp); result.m_translation = value.GetTranslation(); return result; diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.h b/Code/Framework/AzCore/AzCore/Math/Transform.h index ba08722338..6139c11ba5 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.h +++ b/Code/Framework/AzCore/AzCore/Math/Transform.h @@ -168,7 +168,7 @@ namespace AZ private: Quaternion m_rotation; - float m_scale; + Vector3 m_scale; Vector3 m_translation; }; diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.inl b/Code/Framework/AzCore/AzCore/Math/Transform.inl index c92208da54..1da103c45b 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.inl +++ b/Code/Framework/AzCore/AzCore/Math/Transform.inl @@ -25,7 +25,7 @@ namespace AZ { Transform result; result.m_rotation = Quaternion::CreateIdentity(); - result.m_scale = 1.0f; + result.m_scale = Vector3::CreateOne(); result.m_translation = Vector3::CreateZero(); return result; } @@ -49,7 +49,7 @@ namespace AZ { Transform result; result.m_rotation = q; - result.m_scale = 1.0f; + result.m_scale = Vector3::CreateOne(); result.m_translation = Vector3::CreateZero(); return result; } @@ -58,17 +58,17 @@ namespace AZ { Transform result; result.m_rotation = q; - result.m_scale = 1.0f; + result.m_scale = Vector3::CreateOne(); result.m_translation = p; return result; } - AZ_MATH_INLINE Transform Transform::CreateScale(const AZ::Vector3& scale) + AZ_MATH_INLINE Transform Transform::CreateScale(const Vector3& scale) { AZ_Warning("Transform", false, "CreateScale is deprecated, please use CreateUniformScale instead."); Transform result; result.m_rotation = Quaternion::CreateIdentity(); - result.m_scale = scale.GetMaxElement(); + result.m_scale = scale; result.m_translation = Vector3::CreateZero(); return result; } @@ -77,7 +77,7 @@ namespace AZ { Transform result; result.m_rotation = Quaternion::CreateIdentity(); - result.m_scale = scale; + result.m_scale = Vector3(scale); result.m_translation = Vector3::CreateZero(); return result; } @@ -86,7 +86,7 @@ namespace AZ { Transform result; result.m_rotation = Quaternion::CreateIdentity(); - result.m_scale = 1.0f; + result.m_scale = Vector3::CreateOne(); result.m_translation = translation; return result; } @@ -114,17 +114,17 @@ namespace AZ AZ_MATH_INLINE Vector3 Transform::GetBasisX() const { - return m_rotation.TransformVector(Vector3::CreateAxisX(m_scale)); + return m_rotation.TransformVector(Vector3::CreateAxisX(m_scale.GetX())); } AZ_MATH_INLINE Vector3 Transform::GetBasisY() const { - return m_rotation.TransformVector(Vector3::CreateAxisY(m_scale)); + return m_rotation.TransformVector(Vector3::CreateAxisY(m_scale.GetY())); } AZ_MATH_INLINE Vector3 Transform::GetBasisZ() const { - return m_rotation.TransformVector(Vector3::CreateAxisZ(m_scale)); + return m_rotation.TransformVector(Vector3::CreateAxisZ(m_scale.GetZ())); } AZ_MATH_INLINE void Transform::GetBasisAndTranslation(Vector3* basisX, Vector3* basisY, Vector3* basisZ, Vector3* pos) const @@ -163,44 +163,44 @@ namespace AZ AZ_MATH_INLINE Vector3 Transform::GetScale() const { AZ_Warning("Transform", false, "GetScale is deprecated, please use GetUniformScale instead."); - return Vector3(m_scale); + return m_scale; } AZ_MATH_INLINE float Transform::GetUniformScale() const { - return m_scale; + return m_scale.GetMaxElement(); } AZ_MATH_INLINE void Transform::SetScale(const Vector3& scale) { AZ_Warning("Transform", false, "SetScale is deprecated, please use SetUniformScale instead."); - m_scale = scale.GetMaxElement(); + m_scale = scale; } AZ_MATH_INLINE void Transform::SetUniformScale(const float scale) { - m_scale = scale; + m_scale = Vector3(scale); } AZ_MATH_INLINE Vector3 Transform::ExtractScale() { AZ_Warning("Transform", false, "ExtractScale is deprecated, please use ExtractUniformScale instead."); - const float scale = m_scale; - m_scale = 1.0f; - return Vector3(scale); + const Vector3 scale = m_scale; + m_scale = Vector3::CreateOne(); + return scale; } AZ_MATH_INLINE float Transform::ExtractUniformScale() { - const float scale = m_scale; - m_scale = 1.0f; + const float scale = m_scale.GetMaxElement(); + m_scale = Vector3::CreateOne(); return scale; } - AZ_MATH_INLINE void Transform::MultiplyByScale(const AZ::Vector3& scale) + AZ_MATH_INLINE void Transform::MultiplyByScale(const Vector3& scale) { AZ_Warning("Transform", false, "MultiplyByScale is deprecated, please use MultiplyByUniformScale instead."); - m_scale *= scale.GetMaxElement(); + m_scale *= scale; } AZ_MATH_INLINE void Transform::MultiplyByUniformScale(float scale) @@ -243,7 +243,7 @@ namespace AZ // note - need to be careful about how to calculate inverse when there is non-uniform scale Transform out; out.m_rotation = m_rotation.GetConjugate(); - out.m_scale = 1.0f / m_scale; + out.m_scale = m_scale.GetReciprocal(); out.m_translation = -out.m_scale * (out.m_rotation.TransformVector(m_translation)); return out; } @@ -255,27 +255,27 @@ namespace AZ AZ_MATH_INLINE bool Transform::IsOrthogonal(float tolerance) const { - return AZ::IsClose(m_scale, 1.0f, tolerance); + return m_scale.IsClose(Vector3::CreateOne(), tolerance); } AZ_MATH_INLINE Transform Transform::GetOrthogonalized() const { Transform result; result.m_rotation = m_rotation; - result.m_scale = 1.0f; + result.m_scale = Vector3::CreateOne(); result.m_translation = m_translation; return result; } AZ_MATH_INLINE void Transform::Orthogonalize() { - m_scale = 1.0f; + m_scale = Vector3::CreateOne(); } AZ_MATH_INLINE bool Transform::IsClose(const Transform& rhs, float tolerance) const { return m_rotation.IsClose(rhs.m_rotation, tolerance) - && AZ::IsClose(m_scale, rhs.m_scale, tolerance) + && m_scale.IsClose(rhs.m_scale, tolerance) && m_translation.IsClose(rhs.m_translation, tolerance); } @@ -304,21 +304,21 @@ namespace AZ AZ_MATH_INLINE void Transform::SetFromEulerDegrees(const Vector3& eulerDegrees) { m_translation = Vector3::CreateZero(); - m_scale = 1.0f; + m_scale = Vector3::CreateOne(); m_rotation.SetFromEulerDegrees(eulerDegrees); } AZ_MATH_INLINE void Transform::SetFromEulerRadians(const Vector3& eulerRadians) { m_translation = Vector3::CreateZero(); - m_scale = 1.0f; + m_scale = Vector3::CreateOne(); m_rotation.SetFromEulerRadians(eulerRadians); } AZ_MATH_INLINE bool Transform::IsFinite() const { return m_rotation.IsFinite() - && IsFiniteFloat(m_scale) + && m_scale.IsFinite() && m_translation.IsFinite(); } diff --git a/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp b/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp index 38b9cd609b..9c6f85f08a 100644 --- a/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp +++ b/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp @@ -31,6 +31,8 @@ namespace UnitTest ErrorHandler::ErrorHandler(const char* errorPattern) : m_errorCount(0) , m_warningCount(0) + , m_expectedErrorCount(0) + , m_expectedWarningCount(0) , m_errorPattern(errorPattern) { AZ::Debug::TraceMessageBus::Handler::BusConnect(); @@ -51,6 +53,16 @@ namespace UnitTest return m_warningCount; } + int ErrorHandler::GetExpectedErrorCount() const + { + return m_expectedErrorCount; + } + + int ErrorHandler::GetExpectedWarningCount() const + { + return m_expectedWarningCount; + } + bool ErrorHandler::SuppressExpectedErrors([[maybe_unused]] const char* window, const char* message) { return AZStd::string(message).find(m_errorPattern) != AZStd::string::npos; @@ -61,7 +73,9 @@ namespace UnitTest [[maybe_unused]] const char* func, const char* message) { m_errorCount++; - return SuppressExpectedErrors(window, message); + bool suppress = SuppressExpectedErrors(window, message); + m_expectedErrorCount += suppress; + return suppress; } bool ErrorHandler::OnPreWarning( @@ -69,7 +83,9 @@ namespace UnitTest [[maybe_unused]] const char* func, const char* message) { m_warningCount++; - return SuppressExpectedErrors(window, message); + bool suppress = SuppressExpectedErrors(window, message); + m_expectedWarningCount += suppress; + return suppress; } bool ErrorHandler::OnPrintf(const char* window, const char* message) diff --git a/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.h b/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.h index 044c3d1111..56ef340d22 100644 --- a/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.h +++ b/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.h @@ -30,8 +30,14 @@ namespace UnitTest public: explicit ErrorHandler(const char* errorPattern); ~ErrorHandler(); + //! Returns the total number of errors encountered (including those which match the expected pattern). int GetErrorCount() const; + //! Returns the total number of warnings encountered (including those which match the expected pattern). int GetWarningCount() const; + //! Returns the number of errors encountered which matched the expected pattern. + int GetExpectedErrorCount() const; + //! Returns the number of warnings encountered which matched the expected pattern. + int GetExpectedWarningCount() const; bool SuppressExpectedErrors(const char* window, const char* message); // AZ::Debug::TraceMessageBus @@ -44,6 +50,8 @@ namespace UnitTest AZStd::string m_errorPattern; int m_errorCount; int m_warningCount; + int m_expectedErrorCount; + int m_expectedWarningCount; }; } diff --git a/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp b/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp index eb7e798f91..c8ab158d77 100644 --- a/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp +++ b/Gems/PhysX/Code/Tests/ShapeColliderComponentTests.cpp @@ -347,6 +347,7 @@ namespace PhysXEditorTests TEST_F(PhysXEditorFixture, EditorShapeColliderComponent_ShapeColliderWithUnsupportedShape_HandledGracefully) { UnitTest::ErrorHandler unsupportedShapeWarningHandler("Unsupported shape"); + UnitTest::ErrorHandler rigidBodyWarningHandler("No Collider or Shape information found when creating Rigid body"); // create an editor entity with a shape collider component and a cylinder shape component // the cylinder shape is not currently supported by the shape collider component @@ -355,10 +356,8 @@ namespace PhysXEditorTests editorEntity->CreateComponent(LmbrCentral::EditorCompoundShapeComponentTypeId); editorEntity->Activate(); - // expect 2 warnings - //1 raised for the unsupported shape - //2 when re-creating the underlying simulated body - EXPECT_EQ(unsupportedShapeWarningHandler.GetWarningCount(), 2); + EXPECT_EQ(unsupportedShapeWarningHandler.GetExpectedWarningCount(), 1); + EXPECT_EQ(rigidBodyWarningHandler.GetExpectedWarningCount(), 1); EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get()); From a9637a8bcadb44f04c0ea0094ef29427a664a6f4 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 22:46:38 +0100 Subject: [PATCH 10/20] fix more tests --- Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp | 2 +- Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp b/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp index 2691ab1557..fde4290d6d 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp @@ -187,7 +187,7 @@ namespace LmbrCentral static AZ::Aabb CalculateTubeBounds(const TubeShape& tubeShape, const AZ::Transform& transform) { - const auto maxScale = transform.GetScale().GetMaxElement(); + const auto maxScale = transform.GetUniformScale(); const auto scaledRadiusFn = [&tubeShape, maxScale](const AZ::SplineAddress& splineAddress) { diff --git a/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp b/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp index b8f58d5d20..e9d9c40433 100644 --- a/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/TubeShapeTest.cpp @@ -232,7 +232,7 @@ namespace UnitTest TEST_F(TubeShapeTest, GetAabb4) { AZ::Entity entity; - CreateTube(AZ::Transform::CreateScale(AZ::Vector3(1.0f, 1.0f, 2.0f)), 1.0f, entity); + CreateTube(AZ::Transform::CreateUniformScale(2.0f), 1.0f, entity); // set variable radius LmbrCentral::TubeShapeComponentRequestsBus::Event( @@ -254,7 +254,7 @@ namespace UnitTest AZ::Entity entity; CreateTube( AZ::Transform::CreateTranslation(AZ::Vector3(37.0f, 36.0f, 32.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(1.0f, 2.0f, 1.0f)), 1.5f, entity); + AZ::Transform::CreateUniformScale(2.0f), 1.5f, entity); // set variable radius LmbrCentral::TubeShapeComponentRequestsBus::Event( @@ -277,7 +277,7 @@ namespace UnitTest AZ::Transform::CreateTranslation(AZ::Vector3(37.0f, 36.0f, 32.0f)) * AZ::Transform::CreateRotationZ(AZ::Constants::QuarterPi) * AZ::Transform::CreateRotationY(AZ::Constants::QuarterPi) * - AZ::Transform::CreateScale(AZ::Vector3(0.8f, 1.5f, 1.5f)), 1.5f, entity); + AZ::Transform::CreateUniformScale(1.5f), 1.5f, entity); // set variable radius LmbrCentral::TubeShapeComponentRequestsBus::Event( @@ -302,7 +302,7 @@ namespace UnitTest AZ::Entity entity; CreateTube( AZ::Transform::CreateTranslation(AZ::Vector3(37.0f, 36.0f, 39.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f, 1.5f, 1.5f)), 1.5f, entity); + AZ::Transform::CreateUniformScale(2.0f), 1.5f, entity); LmbrCentral::TubeShapeComponentRequestsBus::Event( entity.GetId(), &LmbrCentral::TubeShapeComponentRequestsBus::Events::SetVariableRadius, 0, 1.0f); @@ -326,7 +326,7 @@ namespace UnitTest AZ::Entity entity; CreateTube( AZ::Transform::CreateTranslation(AZ::Vector3(37.0f, 36.0f, 39.0f)) * - AZ::Transform::CreateScale(AZ::Vector3(2.0f, 1.5f, 1.5f)), 1.5f, entity); + AZ::Transform::CreateUniformScale(2.0f), 1.5f, entity); LmbrCentral::TubeShapeComponentRequestsBus::Event( entity.GetId(), &LmbrCentral::TubeShapeComponentRequestsBus::Events::SetVariableRadius, 0, 1.0f); From 5ef515813ec74777da45e9c3e74f6e812238d7b6 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 24 May 2021 23:01:02 +0100 Subject: [PATCH 11/20] fix another test --- Code/Framework/AzCore/Tests/Math/TransformTests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp index 8525ba29ec..529347f31d 100644 --- a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp @@ -423,7 +423,7 @@ namespace UnitTest { const char* objectStreamBuffer = R"DELIMITER( - + )DELIMITER"; AZ::Transform* deserializedTransform = AZ::Utils::LoadObjectFromBuffer(objectStreamBuffer, strlen(objectStreamBuffer) + 1); From e0fc4cd9850786e87cf6f4442854470ecbc2cfe3 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 13:11:05 +0100 Subject: [PATCH 12/20] some tidying up --- .../AzCore/Math/TransformSerializer.cpp | 4 +++ .../Code/Source/Shape/PolygonPrismShape.cpp | 12 ++++++--- .../Code/Source/Shape/ShapeDisplay.h | 6 ++++- .../Code/Source/Shape/TubeShape.cpp | 25 +++++++++++++------ 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp b/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp index 46440ac000..86bc1c36ea 100644 --- a/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Math/TransformSerializer.cpp @@ -58,6 +58,8 @@ namespace AZ } { + // Scale is transitioning to a single uniform scale value, but since it's still internally represented as a Vector3, + // we need to pick one number to use for load/store operations. float scale = transformInstance->GetUniformScale(); JSR::ResultCode loadResult = @@ -120,6 +122,8 @@ namespace AZ { AZ::ScopedContextPath subPathName(context, ScaleTag); + // Scale is transitioning to a single uniform scale value, but since it's still internally represented as a Vector3, + // we need to pick one number to use for load/store operations. float scale = transformInstance->GetUniformScale(); float defaultScale = defaultTransformInstance ? defaultTransformInstance->GetUniformScale() : 0.0f; diff --git a/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp b/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp index be910f7bfa..4244199b85 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/PolygonPrismShape.cpp @@ -433,18 +433,21 @@ namespace LmbrCentral const float height = polygonPrism.GetHeight(); const AZ::Vector3& nonUniformScale = polygonPrism.GetNonUniformScale(); + AZ::Transform worldFromLocalUniformScale = worldFromLocal; + worldFromLocalUniformScale.SetUniformScale(worldFromLocalUniformScale.GetUniformScale()); + AZ::Aabb aabb = AZ::Aabb::CreateNull(); // check base of prism for (const AZ::Vector2& vertex : vertexContainer.GetVertices()) { - aabb.AddPoint(worldFromLocal.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), 0.0f))); + aabb.AddPoint(worldFromLocalUniformScale.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), 0.0f))); } // check top of prism // set aabb to be height of prism - ensure entire polygon prism shape is enclosed in aabb for (const AZ::Vector2& vertex : vertexContainer.GetVertices()) { - aabb.AddPoint(worldFromLocal.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), height))); + aabb.AddPoint(worldFromLocalUniformScale.TransformPoint(nonUniformScale * AZ::Vector3(vertex.GetX(), vertex.GetY(), height))); } return aabb; @@ -460,10 +463,13 @@ namespace LmbrCentral const AZStd::vector& vertices = polygonPrism.m_vertexContainer.GetVertices(); const size_t vertexCount = vertices.size(); + AZ::Transform worldFromLocalWithUniformScale = worldFromLocal; + worldFromLocalWithUniformScale.SetUniformScale(worldFromLocalWithUniformScale.GetUniformScale()); + // transform point to local space // it's fine to invert the transform including scale here, because it won't affect whether the point is inside the prism const AZ::Vector3 localPoint = - worldFromLocal.GetInverse().TransformPoint(point) / polygonPrism.GetNonUniformScale(); + worldFromLocalWithUniformScale.GetInverse().TransformPoint(point) / polygonPrism.GetNonUniformScale(); // ensure the point is not above or below the prism (in its local space) if (localPoint.GetZ() < 0.0f || localPoint.GetZ() > polygonPrism.GetHeight()) diff --git a/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h b/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h index 3591ecde36..5b5cc5fb4d 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h +++ b/Gems/LmbrCentral/Code/Source/Shape/ShapeDisplay.h @@ -42,7 +42,11 @@ namespace LmbrCentral return; } - debugDisplay.PushMatrix(worldFromLocal); + // only uniform scale is supported in physics so the debug visuals reflect this fact + AZ::Transform worldFromLocalWithUniformScale = worldFromLocal; + worldFromLocalWithUniformScale.SetUniformScale(worldFromLocalWithUniformScale.GetUniformScale()); + + debugDisplay.PushMatrix(worldFromLocalWithUniformScale); drawShape(debugDisplay); diff --git a/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp b/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp index fde4290d6d..0db2660e01 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/TubeShape.cpp @@ -216,7 +216,10 @@ namespace LmbrCentral return AZ::Aabb::CreateNull(); } - return CalculateTubeBounds(*this, m_currentTransform); + AZ::Transform worldFromLocalUniformScale = m_currentTransform; + worldFromLocalUniformScale.SetUniformScale(worldFromLocalUniformScale.GetUniformScale()); + + return CalculateTubeBounds(*this, worldFromLocalUniformScale); } void TubeShape::GetTransformAndLocalBounds(AZ::Transform& transform, AZ::Aabb& bounds) @@ -232,8 +235,10 @@ namespace LmbrCentral return false; } - const float scale = m_currentTransform.GetUniformScale(); - const AZ::Vector3 localPoint = m_currentTransform.GetInverse().TransformPoint(point); + AZ::Transform worldFromLocalNormalized = m_currentTransform; + const float scale = worldFromLocalNormalized.ExtractUniformScale(); + const AZ::Transform localFromWorldNormalized = worldFromLocalNormalized.GetInverse(); + const AZ::Vector3 localPoint = localFromWorldNormalized.TransformPoint(point) / scale; const auto address = m_spline->GetNearestAddressPosition(localPoint).m_splineAddress; const float radiusSq = powf(m_radius, 2.0f); @@ -245,20 +250,24 @@ namespace LmbrCentral float TubeShape::DistanceSquaredFromPoint(const AZ::Vector3& point) { - const float scale = m_currentTransform.GetUniformScale(); - const AZ::Transform localFromWorld = m_currentTransform.GetInverse(); - const AZ::Vector3 localPoint = localFromWorld.TransformPoint(point); + AZ::Transform worldFromLocalNormalized = m_currentTransform; + const float uniformScale = worldFromLocalNormalized.ExtractUniformScale(); + const AZ::Transform localFromWorldNormalized = worldFromLocalNormalized.GetInverse(); + const AZ::Vector3 localPoint = localFromWorldNormalized.TransformPoint(point) / uniformScale; const auto splineQueryResult = m_spline->GetNearestAddressPosition(localPoint); const float variableRadius = m_variableRadius.GetElementInterpolated(splineQueryResult.m_splineAddress, Lerpf); - return powf((sqrtf(splineQueryResult.m_distanceSq) - (m_radius + variableRadius)) * scale, 2.0f); + return powf((sqrtf(splineQueryResult.m_distanceSq) - (m_radius + variableRadius)) * uniformScale, 2.0f); } bool TubeShape::IntersectRay(const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) { - const auto splineQueryResult = IntersectSpline(m_currentTransform, src, dir, *m_spline); + AZ::Transform transformUniformScale = m_currentTransform; + transformUniformScale.SetUniformScale(transformUniformScale.GetUniformScale()); + + const auto splineQueryResult = IntersectSpline(transformUniformScale, src, dir, *m_spline); const float variableRadius = m_variableRadius.GetElementInterpolated( splineQueryResult.m_splineAddress, Lerpf); From 9211452d1577b5dae566d696bb13789295d46b7b Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 13:18:13 +0100 Subject: [PATCH 13/20] remove some file which were deleted on main --- .../Source/Animation/AttachmentComponent.cpp | 349 ------------------ .../Animation/EditorAttachmentComponent.cpp | 238 ------------ 2 files changed, 587 deletions(-) delete mode 100644 Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp delete mode 100644 Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp diff --git a/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp b/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp deleted file mode 100644 index efef5761bc..0000000000 --- a/Gems/LmbrCentral/Code/Source/Animation/AttachmentComponent.cpp +++ /dev/null @@ -1,349 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#include "LmbrCentral_precompiled.h" -#include "AttachmentComponent.h" -#include -#include -#include -#include -#include -#include - -namespace LmbrCentral -{ - /// Behavior Context handler for AttachmentComponentNotificationBus - class BehaviorAttachmentComponentNotificationBusHandler : public AttachmentComponentNotificationBus::Handler, public AZ::BehaviorEBusHandler - { - public: - AZ_EBUS_BEHAVIOR_BINDER(BehaviorAttachmentComponentNotificationBusHandler, "{636B95A0-5C7D-4EE7-8645-955665315451}", AZ::SystemAllocator - , OnAttached, OnDetached); - - void OnAttached(AZ::EntityId id) override - { - Call(FN_OnAttached, id); - } - - void OnDetached(AZ::EntityId id) override - { - Call(FN_OnDetached, id); - } - }; - - void AttachmentConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("Target ID", &AttachmentConfiguration::m_targetId) - ->Field("Target Bone Name", &AttachmentConfiguration::m_targetBoneName) - ->Field("Target Offset", &AttachmentConfiguration::m_targetOffset) - ->Field("Attached Initially", &AttachmentConfiguration::m_attachedInitially) - ->Field("Scale Source", &AttachmentConfiguration::m_scaleSource) - ; - } - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->EBus("AttachmentComponentRequestBus") - ->Event("Attach", &AttachmentComponentRequestBus::Events::Attach) - ->Event("Detach", &AttachmentComponentRequestBus::Events::Detach) - ->Event("SetAttachmentOffset", &AttachmentComponentRequestBus::Events::SetAttachmentOffset); - - behaviorContext->EBus("AttachmentComponentNotificationBus") - ->Handler(); - } - } - - void AttachmentComponent::Reflect(AZ::ReflectContext* context) - { - AttachmentConfiguration::Reflect(context); - - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("Configuration", &AttachmentComponent::m_initialConfiguration) - ; - } - } - - //========================================================================= - // BoneFollower - //========================================================================= - - void BoneFollower::Activate(AZ::Entity* owner, const AttachmentConfiguration& configuration, bool targetCanAnimate) - { - AZ_Assert(owner, "owner is required"); - AZ_Assert(!m_ownerId.IsValid(), "BoneFollower is already Activated"); - - m_ownerId = owner->GetId(); - m_targetCanAnimate = targetCanAnimate; - m_isUpdatingOwnerTransform = false; - m_scaleSource = configuration.m_scaleSource; - - m_cachedOwnerTransform = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(m_cachedOwnerTransform, m_ownerId, AZ::TransformBus, GetWorldTM); - - if (configuration.m_attachedInitially) - { - Attach(configuration.m_targetId, configuration.m_targetBoneName.c_str(), configuration.m_targetOffset); - } - - AttachmentComponentRequestBus::Handler::BusConnect(m_ownerId); - } - - void BoneFollower::Deactivate() - { - AZ_Assert(m_ownerId.IsValid(), "BoneFollower was never Activated"); - - AttachmentComponentRequestBus::Handler::BusDisconnect(); - Detach(); - m_ownerId.SetInvalid(); - } - - AZ::EntityId BoneFollower::GetTargetEntityId() - { - return m_targetId; - } - - AZ::Transform BoneFollower::GetOffset() - { - return m_targetOffset; - } - - void BoneFollower::Attach(AZ::EntityId targetId, const char* targetBoneName, const AZ::Transform& offset) - { - AZ_Assert(m_ownerId.IsValid(), "BoneFollower must be Activated to use.") - - // safe to try and detach, even if we weren't attached - Detach(); - - if (!targetId.IsValid()) - { - return; - } - - if (targetId == m_ownerId) - { - AZ_Error("Attachment Component", false, "AttachmentComponent cannot target itself"); - return; - } - - // Note: the target entity may not be activated yet. That's ok. - // When mesh is ready we are notified via MeshComponentEvents::OnMeshCreated - // When transform is ready we are notified via TransformNotificationBus::OnTransformChanged - - m_targetId = targetId; - m_targetBoneName = targetBoneName; - m_targetOffset = offset; - - BindTargetBone(); - - m_targetBoneTransform = AZ::Transform::Identity(); - - m_isTargetEntityTransformKnown = false; // target's transform may not be available yet - - AZ::TransformBus::EventResult(m_cachedOwnerTransform, m_ownerId, &AZ::TransformBus::Events::GetWorldTM); // owner query will always succeed - - MeshComponentNotificationBus::Handler::BusConnect(m_targetId); // fires OnMeshCreated if asset is already ready - AZ::TransformNotificationBus::Handler::BusConnect(m_targetId); - if (m_targetCanAnimate) - { - // Only register for per-frame updates when target can animate - AZ::TickBus::Handler::BusConnect(); - } - - // update owner's transform - UpdateOwnerTransformIfNecessary(); - - // alert others that we've attached - AttachmentComponentNotificationBus::Event(m_targetId, &AttachmentComponentNotificationBus::Events::OnAttached, m_ownerId); - } - - void BoneFollower::Detach() - { - AZ_Assert(m_ownerId.IsValid(), "BoneFollower must be Activated to use."); - - if (m_targetId.IsValid()) - { - // alert others that we're detaching - EBUS_EVENT_ID(m_targetId, AttachmentComponentNotificationBus, OnDetached, m_ownerId); - - MeshComponentNotificationBus::Handler::BusDisconnect(); - AZ::TransformNotificationBus::Handler::BusDisconnect(m_targetId); - AZ::TickBus::Handler::BusDisconnect(); - - m_targetId.SetInvalid(); - } - } - - const char* BoneFollower::GetJointName() - { - return m_targetBoneName.c_str(); - } - - void BoneFollower::SetAttachmentOffset(const AZ::Transform& offset) - { - AZ_Assert(m_ownerId.IsValid(), "BoneFollower must be Activated to use."); - - if (m_targetId.IsValid()) - { - m_targetOffset = offset; - UpdateOwnerTransformIfNecessary(); - } - } - - void BoneFollower::OnMeshCreated(const AZ::Data::Asset& asset) - { - (void)asset; - - // reset character values - BindTargetBone(); - m_targetBoneTransform = QueryBoneTransform(); - - // move owner if necessary - UpdateOwnerTransformIfNecessary(); - } - - void BoneFollower::BindTargetBone() - { - m_targetBoneId = -1; - SkeletalHierarchyRequestBus::EventResult(m_targetBoneId, m_targetId, &SkeletalHierarchyRequests::GetJointIndexByName, m_targetBoneName.c_str()); - } - - void BoneFollower::UpdateOwnerTransformIfNecessary() - { - // Can't update until target entity's transform is known - if (!m_isTargetEntityTransformKnown) - { - if (AZ::TransformBus::GetNumOfEventHandlers(m_targetId) == 0) - { - return; - } - - AZ::TransformBus::EventResult(m_targetEntityTransform, m_targetId, &AZ::TransformBus::Events::GetWorldTM); - m_isTargetEntityTransformKnown = true; - } - - AZ::Transform finalTransform; - if (m_scaleSource == AttachmentConfiguration::ScaleSource::WorldScale) - { - // apply offset in world-space - finalTransform = m_targetEntityTransform * m_targetBoneTransform; - finalTransform.SetUniformScale(1.0f); - finalTransform *= m_targetOffset; - } - else if (m_scaleSource == AttachmentConfiguration::ScaleSource::TargetEntityScale) - { - // apply offset in target-entity-space (ignoring bone scale) - AZ::Transform boneNoScale = m_targetBoneTransform; - boneNoScale.SetUniformScale(1.0f); - - finalTransform = m_targetEntityTransform * boneNoScale * m_targetOffset; - } - else // AttachmentConfiguration::ScaleSource::TargetEntityScale - { - // apply offset in target-bone-space - finalTransform = m_targetEntityTransform * m_targetBoneTransform * m_targetOffset; - } - - if (m_cachedOwnerTransform != finalTransform) - { - AZ_Warning("Attachment Component", !m_isUpdatingOwnerTransform, "AttachmentComponent detected a cycle when updating transform, do not target child entities."); - if (!m_isUpdatingOwnerTransform) - { - m_cachedOwnerTransform = finalTransform; - m_isUpdatingOwnerTransform = true; - EBUS_EVENT_ID(m_ownerId, AZ::TransformBus, SetWorldTM, finalTransform); - m_isUpdatingOwnerTransform = false; - } - } - } - - AZ::Transform BoneFollower::QueryBoneTransform() const - { - AZ::Transform boneTransform = AZ::Transform::CreateIdentity(); - - if (m_targetBoneId >= 0) - { - SkeletalHierarchyRequestBus::EventResult(boneTransform, m_targetId, &SkeletalHierarchyRequests::GetJointTransformCharacterRelative, m_targetBoneId); - } - - return boneTransform; - } - - // fires when target's transform changes - void BoneFollower::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& world) - { - m_targetEntityTransform = world; - m_isTargetEntityTransformKnown = true; - UpdateOwnerTransformIfNecessary(); - } - - void BoneFollower::OnTick(float /*deltaTime*/, AZ::ScriptTimePoint /*time*/) - { - m_targetBoneTransform = QueryBoneTransform(); - UpdateOwnerTransformIfNecessary(); - } - - int BoneFollower::GetTickOrder() - { - return AZ::TICK_ATTACHMENT; - } - - void BoneFollower::Reattach(bool detachFirst) - { -#ifdef AZ_ENABLE_TRACING - AZ::Entity* ownerEntity = nullptr; - AZ::Entity* targetEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(ownerEntity, &AZ::ComponentApplicationBus::Events::FindEntity, m_ownerId); - AZ::ComponentApplicationBus::BroadcastResult(targetEntity, &AZ::ComponentApplicationBus::Events::FindEntity, m_targetId); - AZ_TracePrintf("BoneFollower", "Reattaching entity '%s' to entity '%s'", ownerEntity ? ownerEntity->GetName().c_str() : "", - targetEntity ? targetEntity->GetName().c_str() : ""); -#endif - - if (m_targetId.IsValid() && detachFirst) - { - AttachmentComponentNotificationBus::Event(m_targetId, &AttachmentComponentNotificationBus::Events::OnDetached, m_ownerId); - } - - if (m_targetId != m_ownerId) - { - AttachmentComponentNotificationBus::Event(m_targetId, &AttachmentComponentNotificationBus::Events::OnAttached, m_ownerId); - } - } - - //========================================================================= - // AttachmentComponent - //========================================================================= - - void AttachmentComponent::Activate() - { -#ifdef AZ_ENABLE_TRACING - bool isStaticTransform = false; - AZ::TransformBus::EventResult(isStaticTransform, GetEntityId(), &AZ::TransformBus::Events::IsStaticTransform); - AZ_Warning("Attachment Component", !isStaticTransform, - "Attachment needs to move, but entity '%s' %s has a static transform.", GetEntity()->GetName().c_str(), GetEntityId().ToString().c_str()); -#endif - - m_boneFollower.Activate(GetEntity(), m_initialConfiguration, true); - } - - - void AttachmentComponent::Deactivate() - { - m_boneFollower.Deactivate(); - } -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp b/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp deleted file mode 100644 index 6190f976a0..0000000000 --- a/Gems/LmbrCentral/Code/Source/Animation/EditorAttachmentComponent.cpp +++ /dev/null @@ -1,238 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" -#include "EditorAttachmentComponent.h" -#include -#include -#include -#include - -namespace LmbrCentral -{ - void EditorAttachmentComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("Target ID", &EditorAttachmentComponent::m_targetId) - ->Field("Target Bone Name", &EditorAttachmentComponent::m_targetBoneName) - ->Field("Position Offset", &EditorAttachmentComponent::m_positionOffset) - ->Field("Rotation Offset", &EditorAttachmentComponent::m_rotationOffset) - ->Field("Scale Offset", &EditorAttachmentComponent::m_scaleOffset) - ->Field("Attached Initially", &EditorAttachmentComponent::m_attachedInitially) - ->Field("Scale Source", &EditorAttachmentComponent::m_scaleSource) - ; - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Attachment", "The Attachment component lets an entity attach to a bone on the skeleton of another entity") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Animation") - ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/Attachment.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/Attachment.png") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-attachment.html") - ->DataElement(0, &EditorAttachmentComponent::m_targetId, - "Target entity", "Attach to this entity.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnTargetIdChanged) - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorAttachmentComponent::m_targetBoneName, - "Joint name", "Attach to this joint on target entity.") - ->Attribute(AZ::Edit::Attributes::StringList, &EditorAttachmentComponent::GetTargetBoneOptions) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnTargetBoneChanged) - ->DataElement(0, &EditorAttachmentComponent::m_positionOffset, - "Position offset", "Local position offset from target bone") - ->Attribute(AZ::Edit::Attributes::Suffix, "m") - ->Attribute(AZ::Edit::Attributes::Step, 0.01f) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnTargetOffsetChanged) - ->DataElement(0, &EditorAttachmentComponent::m_rotationOffset, - "Rotation offset", "Local rotation offset from target bone") - ->Attribute(AZ::Edit::Attributes::Suffix, "deg") - ->Attribute(AZ::Edit::Attributes::Step, 0.01f) - ->Attribute(AZ::Edit::Attributes::Min, -AZ::RadToDeg(AZ::Constants::TwoPi)) - ->Attribute(AZ::Edit::Attributes::Max, AZ::RadToDeg(AZ::Constants::TwoPi)) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnTargetOffsetChanged) - ->DataElement(0, &EditorAttachmentComponent::m_scaleOffset, - "Scale offset", "Local scale offset from target entity") - ->Attribute(AZ::Edit::Attributes::Step, 0.1f) - ->Attribute(AZ::Edit::Attributes::Min, 0.001f) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnTargetOffsetChanged) - ->DataElement(0, &EditorAttachmentComponent::m_attachedInitially, - "Attached initially", "Whether to attach to target upon activation.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnAttachedInitiallyChanged) - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorAttachmentComponent::m_scaleSource, - "Scaling", "How object scale should be determined. " - "Use world scale = Attached object is scaled in world space, Use target entity scale = Attached object adopts scale of target entity., Use target bone scale = Attached object adopts scale of target entity/joint.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnScaleSourceChanged) - ->EnumAttribute(AttachmentConfiguration::ScaleSource::WorldScale, "Use world scale") - ->EnumAttribute(AttachmentConfiguration::ScaleSource::TargetEntityScale, "Use target entity scale") - ->EnumAttribute(AttachmentConfiguration::ScaleSource::TargetBoneScale, "Use target bone scale") - ; - } - } - } - - void EditorAttachmentComponent::Activate() - { - Base::Activate(); - m_boneFollower.Activate(GetEntity(), - CreateAttachmentConfiguration(), - false); // Entity's don't animate in Editor - } - - void EditorAttachmentComponent::Deactivate() - { - m_boneFollower.Deactivate(); - Base::Deactivate(); - } - - void EditorAttachmentComponent::BuildGameEntity(AZ::Entity* gameEntity) - { - AttachmentComponent* component = gameEntity->CreateComponent(); - if (component) - { - component->m_initialConfiguration = CreateAttachmentConfiguration(); - } - } - - AttachmentConfiguration EditorAttachmentComponent::CreateAttachmentConfiguration() const - { - AttachmentConfiguration configuration; - configuration.m_targetId = m_targetId; - configuration.m_targetBoneName = m_targetBoneName; - configuration.m_targetOffset = GetTargetOffset(); - configuration.m_attachedInitially = m_attachedInitially; - configuration.m_scaleSource = m_scaleSource; - return configuration; - } - - AZ::Transform EditorAttachmentComponent::GetTargetOffset() const - { - AZ::Transform offset = AZ::ConvertEulerDegreesToTransform(m_rotationOffset); - offset.SetTranslation(m_positionOffset); - offset.MultiplyByUniformScale(m_scaleOffset.GetMaxElement()); - return offset; - } - - AZStd::vector EditorAttachmentComponent::GetTargetBoneOptions() const - { - AZStd::vector names; - - // insert blank entry, so user may choose to bind to NO bone. - names.push_back(""); - - // track whether currently-set bone is found - bool currentTargetBoneFound = false; - - // Get character and iterate over bones - AZ::u32 jointCount = 0; - SkeletalHierarchyRequestBus::EventResult(jointCount, m_targetId, &SkeletalHierarchyRequests::GetJointCount); - for (AZ::u32 jointIndex = 0; jointIndex < jointCount; ++jointIndex) - { - const char* name = nullptr; - SkeletalHierarchyRequestBus::EventResult(name, m_targetId, &SkeletalHierarchyRequests::GetJointNameByIndex, jointIndex); - if (name) - { - names.push_back(name); - - if (!currentTargetBoneFound) - { - currentTargetBoneFound = (m_targetBoneName == names.back()); - } - } - } - - // If we never found currently-set bone name, - // stick it at top of list, just in case user wants to keep it anyway - if (!currentTargetBoneFound && !m_targetBoneName.empty()) - { - names.insert(names.begin(), m_targetBoneName); - } - - return names; - } - - AZ::u32 EditorAttachmentComponent::OnTargetIdChanged() - { - // Warn about bad setups (it won't crash, but it's nice to handle this early) - if (m_targetId == GetEntityId()) - { - AZ_Warning(GetEntity()->GetName().c_str(), false, "AttachmentComponent cannot target self.") - m_targetId.SetInvalid(); - } - - // Warn about children attaching to a parent - AZ::EntityId parentOfTarget; - AZ::TransformBus::EventResult(parentOfTarget, m_targetId, &AZ::TransformBus::Events::GetParentId); - while (parentOfTarget.IsValid()) - { - if (parentOfTarget == GetEntityId()) - { - AZ_Warning(GetEntity()->GetName().c_str(), parentOfTarget != GetEntityId(), "AttachmentComponent cannot target child entity"); - m_targetId.SetInvalid(); - break; - } - - AZ::EntityId currentParentId = parentOfTarget; - parentOfTarget.SetInvalid(); - AZ::TransformBus::EventResult(parentOfTarget, currentParentId, &AZ::TransformBus::Events::GetParentId); - } - - AttachOrDetachAsNecessary(); - - return AZ::Edit::PropertyRefreshLevels::AttributesAndValues; // refresh bone options - } - - AZ::u32 EditorAttachmentComponent::OnTargetBoneChanged() - { - AttachOrDetachAsNecessary(); - return AZ::Edit::PropertyRefreshLevels::None; - } - - AZ::u32 EditorAttachmentComponent::OnTargetOffsetChanged() - { - EBUS_EVENT_ID(GetEntityId(), AttachmentComponentRequestBus, SetAttachmentOffset, GetTargetOffset()); - return AZ::Edit::PropertyRefreshLevels::None; - } - - AZ::u32 EditorAttachmentComponent::OnAttachedInitiallyChanged() - { - AttachOrDetachAsNecessary(); - return AZ::Edit::PropertyRefreshLevels::None; - } - - AZ::u32 EditorAttachmentComponent::OnScaleSourceChanged() - { - m_boneFollower.Deactivate(); - m_boneFollower.Activate(GetEntity(), - CreateAttachmentConfiguration(), - false); - return AZ::Edit::PropertyRefreshLevels::None; - } - - void EditorAttachmentComponent::AttachOrDetachAsNecessary() - { - if (m_attachedInitially && m_targetId.IsValid()) - { - EBUS_EVENT_ID(GetEntityId(), AttachmentComponentRequestBus, Attach, m_targetId, m_targetBoneName.c_str(), GetTargetOffset()); - } - else - { - EBUS_EVENT_ID(GetEntityId(), AttachmentComponentRequestBus, Detach); - } - } -} // namespace LmbrCentral From a037062a077c33f59359a99e4d782398170ecf88 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 13:31:39 +0100 Subject: [PATCH 14/20] move trackview changes to another branch --- Code/CryEngine/CryCommon/IMovieSystem.h | 4 ++-- .../Editor/TrackView/TrackViewAnimNode.cpp | 18 +++++++++--------- .../Editor/TrackView/TrackViewAnimNode.h | 4 ++-- .../Editor/TrackView/TrackViewSequence.cpp | 6 +++--- .../Source/Cinematics/AnimAZEntityNode.cpp | 6 +++--- .../Code/Source/Cinematics/AnimAZEntityNode.h | 4 ++-- .../Source/Cinematics/AnimComponentNode.cpp | 17 +++++++++-------- .../Code/Source/Cinematics/AnimComponentNode.h | 6 +++--- Gems/Maestro/Code/Source/Cinematics/AnimNode.h | 4 ++-- 9 files changed, 35 insertions(+), 34 deletions(-) diff --git a/Code/CryEngine/CryCommon/IMovieSystem.h b/Code/CryEngine/CryCommon/IMovieSystem.h index 1f1e70b5f2..ce4e59d43c 100644 --- a/Code/CryEngine/CryCommon/IMovieSystem.h +++ b/Code/CryEngine/CryCommon/IMovieSystem.h @@ -695,7 +695,7 @@ public: //! Rotate entity node. virtual void SetRotate(float time, const Quat& quat) = 0; //! Scale entity node. - virtual void SetScale(float time, const float scale) = 0; + virtual void SetScale(float time, const Vec3& scale) = 0; //! Compute and return the offset which brings the current position to the given position virtual Vec3 GetOffsetPosition(const Vec3& position) { return position - GetPos(); } @@ -707,7 +707,7 @@ public: //! Get entity rotation at specified time. virtual Quat GetRotate(float time) = 0; //! Get current entity scale. - virtual float GetScale() = 0; + virtual Vec3 GetScale() = 0; // General Set param. // Set float/vec3/vec4 parameter at given time. diff --git a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp index b9814e66c1..ae7077b4fc 100644 --- a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp +++ b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.cpp @@ -1869,7 +1869,7 @@ void CTrackViewAnimNode::SetPos(const Vec3& position) } ////////////////////////////////////////////////////////////////////////// -void CTrackViewAnimNode::SetScale(float scale) +void CTrackViewAnimNode::SetScale(const Vec3& scale) { CTrackViewTrack* track = GetTrackForParameter(AnimParamType::Scale); @@ -2012,9 +2012,9 @@ void CTrackViewAnimNode::SetPosRotScaleTracksDefaultValues(bool positionAllowed, } if (scaleAllowed) { - float scale = 1.0f; - AZ::TransformBus::EventResult(scale, entityId, &AZ::TransformBus::Events::GetWorldUniformScale); - m_animNode->SetScale(time, scale); + AZ::Vector3 scale = AZ::Vector3::CreateOne(); + AZ::TransformBus::EventResult(scale, entityId, &AZ::TransformBus::Events::GetWorldScale); + m_animNode->SetScale(time, AZVec3ToLYVec3(scale)); } } } @@ -2482,11 +2482,11 @@ Quat CTrackViewAnimNode::GetTransformDelegateRotation(const Quat& baseRotation) ////////////////////////////////////////////////////////////////////////// Vec3 CTrackViewAnimNode::GetTransformDelegateScale(const Vec3& baseScale) const { - float scale = GetScale(); + const Vec3 scale = GetScale(); - return Vec3(CheckTrackAnimated(AnimParamType::ScaleX) ? scale : baseScale.x, - CheckTrackAnimated(AnimParamType::ScaleY) ? scale : baseScale.y, - CheckTrackAnimated(AnimParamType::ScaleZ) ? scale : baseScale.z); + return Vec3(CheckTrackAnimated(AnimParamType::ScaleX) ? scale.x : baseScale.x, + CheckTrackAnimated(AnimParamType::ScaleY) ? scale.y : baseScale.y, + CheckTrackAnimated(AnimParamType::ScaleZ) ? scale.z : baseScale.z); } ////////////////////////////////////////////////////////////////////////// @@ -2504,7 +2504,7 @@ void CTrackViewAnimNode::SetTransformDelegateRotation(const Quat& rotation) ////////////////////////////////////////////////////////////////////////// void CTrackViewAnimNode::SetTransformDelegateScale(const Vec3& scale) { - SetScale(scale.x); + SetScale(scale); } bool CTrackViewAnimNode::IsTransformAnimParamTypeDelegated(const AnimParamType animParamType) const diff --git a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h index 4435d0efc7..1e0cc2262a 100644 --- a/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h +++ b/Code/Sandbox/Editor/TrackView/TrackViewAnimNode.h @@ -182,8 +182,8 @@ public: // Rotation/Position & Scale void SetPos(const Vec3& position); Vec3 GetPos() const { return m_animNode->GetPos(); } - void SetScale(float scale); - float GetScale() const { return m_animNode->GetScale(); } + void SetScale(const Vec3& scale); + Vec3 GetScale() const { return m_animNode->GetScale(); } void SetRotation(const Quat& rotation); Quat GetRotation() const { return m_animNode->GetRotate(); } Quat GetRotation(float time) const { return m_animNode != nullptr ? m_animNode->GetRotate(time) : Quat(0,0,0,0); } diff --git a/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp b/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp index 3642f21da6..f915c804f8 100644 --- a/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp +++ b/Code/Sandbox/Editor/TrackView/TrackViewSequence.cpp @@ -825,10 +825,10 @@ void CTrackViewSequence::SyncSelectedTracksToBase() { const Vec3 position = pAnimNode->GetPos(); const Quat rotation = pAnimNode->GetRotation(); - const float scale = pAnimNode->GetScale(); + const Vec3 scale = pAnimNode->GetScale(); AZ::Transform transform = AZ::Transform::CreateIdentity(); - transform.SetUniformScale(scale); + transform.SetScale(LYVec3ToAZVec3(scale)); transform.SetRotation(LYQuaternionToAZQuaternion(rotation)); transform.SetTranslation(LYVec3ToAZVec3(position)); @@ -870,7 +870,7 @@ void CTrackViewSequence::SyncSelectedTracksFromBase() pAnimNode->SetPos(AZVec3ToLYVec3(transform.GetTranslation())); pAnimNode->SetRotation(AZQuaternionToLYQuaternion(transform.GetRotation())); - pAnimNode->SetScale(transform.GetUniformScale()); + pAnimNode->SetScale(AZVec3ToLYVec3(transform.GetScale())); bNothingWasSynced = false; } diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp index 54eeb1fcc9..b0ebb10b0e 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp +++ b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.cpp @@ -189,7 +189,7 @@ Quat CAnimAzEntityNode::GetRotate(float time) } ////////////////////////////////////////////////////////////////////////// -void CAnimAzEntityNode::SetScale(float time, float scale) +void CAnimAzEntityNode::SetScale(float time, const Vec3& scale) { CAnimComponentNode* transformComponent = GetTransformComponentNode(); if (transformComponent) @@ -198,7 +198,7 @@ void CAnimAzEntityNode::SetScale(float time, float scale) } } -float CAnimAzEntityNode::GetScale() +Vec3 CAnimAzEntityNode::GetScale() { CAnimComponentNode* transformComponent = GetTransformComponentNode(); if (transformComponent) @@ -206,7 +206,7 @@ float CAnimAzEntityNode::GetScale() return transformComponent->GetScale(); } - return 0.0f; + return Vec3(.0f, .0f, .0f); } Vec3 CAnimAzEntityNode::GetOffsetPosition(const Vec3& position) diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h index d5af311b70..863d0e927f 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimAZEntityNode.h @@ -57,14 +57,14 @@ public: void SetPos(float time, const Vec3& pos) override; void SetRotate(float time, const Quat& quat) override; - void SetScale(float time, float scale) override; + void SetScale(float time, const Vec3& scale) override; Vec3 GetOffsetPosition(const Vec3& position) override; Vec3 GetPos() override; Quat GetRotate() override; Quat GetRotate(float time) override; - float GetScale() override; + Vec3 GetScale() override; ////////////////////////////////////////////////////////////////////////// void Serialize(XmlNodeRef& xmlNode, bool bLoading, bool bLoadEmptyTracks); diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp index 13a5d4ed63..ea7322014c 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp +++ b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.cpp @@ -341,10 +341,10 @@ void CAnimComponentNode::ConvertBetweenWorldAndLocalRotation(Quat& rotation, ETr } ////////////////////////////////////////////////////////////////////////// -void CAnimComponentNode::ConvertBetweenWorldAndLocalScale(float& scale, ETransformSpaceConversionDirection conversionDirection) const +void CAnimComponentNode::ConvertBetweenWorldAndLocalScale(Vec3& scale, ETransformSpaceConversionDirection conversionDirection) const { AZ::Transform parentTransform = AZ::Transform::Identity(); - AZ::Transform scaleTransform = AZ::Transform::CreateUniformScale(scale); + AZ::Transform scaleTransform = AZ::Transform::CreateScale(AZ::Vector3(scale.x, scale.y, scale.z)); GetParentWorldTransform(parentTransform); if (conversionDirection == eTransformConverstionDirection_toLocalSpace) @@ -353,7 +353,8 @@ void CAnimComponentNode::ConvertBetweenWorldAndLocalScale(float& scale, ETransfo } scaleTransform = parentTransform * scaleTransform; - scale = scaleTransform.GetUniformScale(); + AZ::Vector3 vScale = scaleTransform.GetScale(); + scale.Set(vScale.GetX(), vScale.GetY(), vScale.GetZ()); } ////////////////////////////////////////////////////////////////////////// @@ -456,7 +457,7 @@ Quat CAnimComponentNode::GetRotate() } ////////////////////////////////////////////////////////////////////////// -void CAnimComponentNode::SetScale(float time, float scale) +void CAnimComponentNode::SetScale(float time, const Vec3& scale) { if (m_componentTypeId == AZ::Uuid(AZ::EditorTransformComponentTypeId) || m_componentTypeId == AzFramework::TransformComponent::TYPEINFO_Uuid()) { @@ -467,7 +468,7 @@ void CAnimComponentNode::SetScale(float time, float scale) { // Scale is in World space, even if the entity is parented - because Component Entity AZ::Transforms do not correctly set // CBaseObject parenting, so we convert it to Local space here. This should probably be fixed, but for now, we explicitly change from World to Local space here. - float localScale = scale; + Vec3 localScale(scale); ConvertBetweenWorldAndLocalScale(localScale, eTransformConverstionDirection_toLocalSpace); scaleTrack->SetValue(time, localScale, bDefault); } @@ -479,15 +480,15 @@ void CAnimComponentNode::SetScale(float time, float scale) } } -float CAnimComponentNode::GetScale() +Vec3 CAnimComponentNode::GetScale() { Maestro::SequenceComponentRequests::AnimatablePropertyAddress animatableAddress(m_componentId, "Scale"); - Maestro::SequenceComponentRequests::AnimatedFloatValue scaleValue(0.0f); + Maestro::SequenceComponentRequests::AnimatedVector3Value scaleValue(AZ::Vector3::CreateZero()); Maestro::SequenceComponentRequestBus::Event(m_pSequence->GetSequenceEntityId(), &Maestro::SequenceComponentRequestBus::Events::GetAnimatedPropertyValue, scaleValue, GetParentAzEntityId(), animatableAddress); // Always return World scale because Component Entity AZ::Transforms do not correctly set // CBaseObject parenting. This should probably be fixed, but for now, we explicitly change from Local to World space here. - float worldScale = scaleValue.GetFloatValue(); + Vec3 worldScale(scaleValue.GetVector3Value()); ConvertBetweenWorldAndLocalScale(worldScale, eTransformConverstionDirection_toWorldSpace); return worldScale; diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h index 48913e5b85..5d83f7ba0d 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimComponentNode.h @@ -71,12 +71,12 @@ public: void SetPos(float time, const Vec3& pos) override; void SetRotate(float time, const Quat& quat) override; - void SetScale(float time, float scale) override; + void SetScale(float time, const Vec3& scale) override; Vec3 GetPos() override; Quat GetRotate() override; Quat GetRotate(float time) override; - float GetScale() override; + Vec3 GetScale() override; void Activate(bool bActivate) override; ////////////////////////////////////////////////////////////////////////// @@ -128,7 +128,7 @@ private: void GetParentWorldTransform(AZ::Transform& retTransform) const; void ConvertBetweenWorldAndLocalPosition(Vec3& position, ETransformSpaceConversionDirection conversionDirection) const; void ConvertBetweenWorldAndLocalRotation(Quat& rotation, ETransformSpaceConversionDirection conversionDirection) const; - void ConvertBetweenWorldAndLocalScale(float& scale, ETransformSpaceConversionDirection conversionDirection) const; + void ConvertBetweenWorldAndLocalScale(Vec3& scale, ETransformSpaceConversionDirection conversionDirection) const; // Utility function to query the units for a track and set the track multiplier if needed. Returns true if track multiplier was set. bool SetTrackMultiplier(IAnimTrack* track) const; diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimNode.h b/Gems/Maestro/Code/Source/Cinematics/AnimNode.h index f29ba2eab0..0c52ac5a48 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimNode.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimNode.h @@ -79,12 +79,12 @@ public: ////////////////////////////////////////////////////////////////////////// void SetPos([[maybe_unused]] float time, [[maybe_unused]] const Vec3& pos) override {}; void SetRotate([[maybe_unused]] float time, [[maybe_unused]] const Quat& quat) override {}; - void SetScale([[maybe_unused]] float time, [[maybe_unused]] const float scale) override {}; + void SetScale([[maybe_unused]] float time, [[maybe_unused]] const Vec3& scale) override {}; Vec3 GetPos() override { return Vec3(0, 0, 0); }; Quat GetRotate() override { return Quat(0, 0, 0, 0); }; Quat GetRotate(float /*time*/) override { return Quat(0, 0, 0, 0); }; - float GetScale() override { return 0.0f; }; + Vec3 GetScale() override { return Vec3(0, 0, 0); }; virtual Matrix34 GetReferenceMatrix() const; From 6fe8b972a4d7ce24294cec005906451934f3a435 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 13:46:30 +0100 Subject: [PATCH 15/20] fix formatting --- Code/Framework/AzCore/AzCore/Component/TransformBus.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/TransformBus.h b/Code/Framework/AzCore/AzCore/Component/TransformBus.h index 95c8f6e719..be18593d54 100644 --- a/Code/Framework/AzCore/AzCore/Component/TransformBus.h +++ b/Code/Framework/AzCore/AzCore/Component/TransformBus.h @@ -299,15 +299,16 @@ namespace AZ //! @return The scale value in world space. virtual AZ::Vector3 GetWorldScale() { return AZ::Vector3(FLT_MAX); } - + //! Set the uniform scale value in local space. virtual void SetLocalUniformScale([[maybe_unused]] float scale) {} + //! Get the uniform scale value in local space. + //! @return The uniform scale value in local space. virtual float GetLocalUniformScale() { return FLT_MAX; } + //! Get the uniform scale value in world space. + //! @return The uniform scale value in world space. virtual float GetWorldUniformScale() { return FLT_MAX; } - - - //! @} //! Transform hierarchy From ccccfb2c5b87686ed08ad2e617aa9db4f1fa56f8 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 14:56:08 +0100 Subject: [PATCH 16/20] more tidying up --- .../GridMate/Serialize/CompressionMarshal.cpp | 15 +++++----- .../RowWidgets/TransformRowHandler.cpp | 10 +++---- .../SceneUI/RowWidgets/TransformRowWidget.cpp | 28 +++++++++++-------- .../SceneUI/RowWidgets/TransformRowWidget.h | 16 ++++------- .../RowWidgets/TransformRowWidgetTests.cpp | 20 +++++++------ Gems/PhysX/Code/Source/Utils.cpp | 6 ++-- .../Code/Include/ScriptCanvas/Core/Datum.cpp | 6 ++-- .../Libraries/Math/TransformNodes.h | 4 +-- 8 files changed, 53 insertions(+), 52 deletions(-) diff --git a/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp b/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp index 9dc7de1cf7..751e151ec6 100644 --- a/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp +++ b/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp @@ -488,17 +488,18 @@ void TransformCompressor::Marshal(WriteBuffer& wb, const AZ::Transform& value) c { AZ::u8 flags = 0; auto flagsMarker = wb.InsertMarker(flags); - float scale = value.GetUniformScale(); - AZ::Quaternion rot = value.GetRotation(); + AZ::Matrix3x3 m33 = AZ::Matrix3x3::CreateFromTransform(value); + AZ::Vector3 scale = m33.ExtractScale(); + AZ::Quaternion rot = AZ::Quaternion::CreateFromMatrix3x3(m33.GetOrthogonalized()); if (!rot.IsIdentity()) { flags |= HAS_ROT; wb.Write(rot, QuatCompMarshaler()); } - if (!AZ::IsClose(scale, 1.0f)) + if (!scale.IsClose(AZ::Vector3::CreateOne())) { flags |= HAS_SCALE; - wb.Write(scale, HalfMarshaler()); + wb.Write(scale, Vec3CompMarshaler()); } AZ::Vector3 pos = value.GetTranslation(); if (!pos.IsZero()) @@ -526,9 +527,9 @@ void TransformCompressor::Unmarshal(AZ::Transform& value, ReadBuffer& rb) const } if (flags & HAS_SCALE) { - float scale; - rb.Read(scale, HalfMarshaler()); - xform.MultiplyByUniformScale(scale); + AZ::Vector3 scale; + rb.Read(scale, Vec3CompMarshaler()); + xform.MultiplyByScale(scale); } if (flags & HAS_POS) { diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp index 640c092070..322aa9ac51 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowHandler.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include namespace AZ @@ -59,11 +58,10 @@ namespace AZ } else { - AzToolsFramework::Vector3PropertyHandler vector3Handler; - vector3Handler.ConsumeAttribute(widget->GetTranslationWidget(), attrib, attrValue, debugName); - vector3Handler.ConsumeAttribute(widget->GetRotationWidget(), attrib, attrValue, debugName); - AzToolsFramework::doublePropertySpinboxHandler spinboxHandler; - spinboxHandler.ConsumeAttribute(widget->GetScaleWidget(), attrib, attrValue, debugName); + AzToolsFramework::Vector3PropertyHandler handler; + handler.ConsumeAttribute(widget->GetTranslationWidget(), attrib, attrValue, debugName); + handler.ConsumeAttribute(widget->GetRotationWidget(), attrib, attrValue, debugName); + handler.ConsumeAttribute(widget->GetScaleWidget(), attrib, attrValue, debugName); } } diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp index e8ecaa0c27..10e0fd2a68 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -48,7 +47,7 @@ namespace AZ ExpandedTransform::ExpandedTransform() : m_translation(0, 0, 0) , m_rotation(0, 0, 0) - , m_scale(1) + , m_scale(1, 1, 1) { } @@ -61,14 +60,14 @@ namespace AZ { m_translation = transform.GetTranslation(); m_rotation = transform.GetEulerDegrees(); - m_scale = transform.GetUniformScale(); + m_scale = transform.GetScale(); } void ExpandedTransform::GetTransform(AZ::Transform& transform) const { transform = Transform::CreateTranslation(m_translation); transform *= AZ::ConvertEulerDegreesToTransform(m_rotation); - transform.MultiplyByUniformScale(m_scale); + transform.MultiplyByScale(m_scale); } const AZ::Vector3& ExpandedTransform::GetTranslation() const @@ -91,12 +90,12 @@ namespace AZ m_rotation = rotation; } - const float ExpandedTransform::GetScale() const + const AZ::Vector3& ExpandedTransform::GetScale() const { return m_scale; } - void ExpandedTransform::SetScale(const float scale) + void ExpandedTransform::SetScale(const AZ::Vector3& scale) { m_scale = scale; } @@ -132,7 +131,7 @@ namespace AZ m_rotationWidget->setMaximum(360); m_rotationWidget->setSuffix(" degrees"); - m_scaleWidget = new AzToolsFramework::PropertyDoubleSpinCtrl(this); + m_scaleWidget = new AzQtComponents::VectorInput(this, 3); m_scaleWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_scaleWidget->setMinimum(0); m_scaleWidget->setMaximum(10000); @@ -192,10 +191,13 @@ namespace AZ AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestWrite, this); }); - QObject::connect(m_scaleWidget, &AzToolsFramework::PropertyDoubleSpinCtrl::valueChanged, this, [this] + QObject::connect(m_scaleWidget, &AzQtComponents::VectorInput::valueChanged, this, [this] { - AzToolsFramework::PropertyDoubleSpinCtrl* widget = this->GetScaleWidget(); - float scale = aznumeric_cast(widget->value()); + AzQtComponents::VectorInput* widget = this->GetScaleWidget(); + AZ::Vector3 scale; + + PopulateVector3(widget, scale); + m_transform.SetScale(scale); AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestWrite, this); }); @@ -222,7 +224,9 @@ namespace AZ m_rotationWidget->setValuebyIndex(m_transform.GetRotation().GetY(), 1); m_rotationWidget->setValuebyIndex(m_transform.GetRotation().GetZ(), 2); - m_scaleWidget->setValue(m_transform.GetScale()); + m_scaleWidget->setValuebyIndex(m_transform.GetScale().GetX(), 0); + m_scaleWidget->setValuebyIndex(m_transform.GetScale().GetY(), 1); + m_scaleWidget->setValuebyIndex(m_transform.GetScale().GetZ(), 2); blockSignals(false); } @@ -247,7 +251,7 @@ namespace AZ return m_rotationWidget; } - AzToolsFramework::PropertyDoubleSpinCtrl* TransformRowWidget::GetScaleWidget() + AzQtComponents::VectorInput* TransformRowWidget::GetScaleWidget() { return m_scaleWidget; } diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h index 3977d26c7c..dc3286f80e 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/TransformRowWidget.h @@ -21,7 +21,6 @@ #include #include #include - #endif namespace AzQtComponents @@ -29,11 +28,6 @@ namespace AzQtComponents class VectorInput; } -namespace AzToolsFramework -{ - class PropertyDoubleSpinCtrl; -} - namespace AZ { namespace SceneAPI @@ -57,14 +51,14 @@ namespace AZ const AZ::Vector3& GetRotation() const; void SetRotation(const AZ::Vector3& translation); - const float GetScale() const; - void SetScale(const float scale); + const AZ::Vector3& GetScale() const; + void SetScale(const AZ::Vector3& scale); private: AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING AZ::Vector3 m_translation; AZ::Vector3 m_rotation; - float m_scale; + AZ::Vector3 m_scale; AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING }; @@ -84,7 +78,7 @@ namespace AZ AzQtComponents::VectorInput* GetTranslationWidget(); AzQtComponents::VectorInput* GetRotationWidget(); - AzToolsFramework::PropertyDoubleSpinCtrl* GetScaleWidget(); + AzQtComponents::VectorInput* GetScaleWidget(); protected: ExpandedTransform m_transform; @@ -93,7 +87,7 @@ namespace AZ AzQtComponents::VectorInput* m_translationWidget; AzQtComponents::VectorInput* m_rotationWidget; - AzToolsFramework::PropertyDoubleSpinCtrl* m_scaleWidget; + AzQtComponents::VectorInput* m_scaleWidget; }; } // namespace SceneUI } // namespace SceneAPI diff --git a/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp b/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp index cda6582e63..05082f29fb 100644 --- a/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp +++ b/Code/Tools/SceneAPI/SceneUI/Tests/RowWidgets/TransformRowWidgetTests.cpp @@ -30,7 +30,7 @@ namespace AZ Vector3 m_translation = Vector3(10.0f, 20.0f, 30.0f); Vector3 m_rotation = Vector3(30.0f, 45.0f, 60.0f); - float m_scale = 3.0f; + Vector3 m_scale = Vector3(2.0f, 3.0f, 4.0f); }; TEST_F(TransformRowWidgetTest, GetTranslation_TranslationInMatrix_TranslationCanBeRetrievedDirectly) @@ -83,22 +83,26 @@ namespace AZ TEST_F(TransformRowWidgetTest, GetScale_ScaleInMatrix_ScaleCanBeRetrievedDirectly) { - m_transform = Transform::CreateUniformScale(m_scale); + m_transform = Transform::CreateScale(m_scale); m_expanded.SetTransform(m_transform); - const float returned = m_expanded.GetScale(); - EXPECT_NEAR(m_scale, returned, 0.1f); + const Vector3& returned = m_expanded.GetScale(); + EXPECT_NEAR(m_scale.GetX(), returned.GetX(), 0.1f); + EXPECT_NEAR(m_scale.GetY(), returned.GetY(), 0.1f); + EXPECT_NEAR(m_scale.GetZ(), returned.GetZ(), 0.1f); } TEST_F(TransformRowWidgetTest, GetScale_ScaleInMatrix_ScaleCanBeRetrievedFromTransform) { - m_transform = Transform::CreateUniformScale(m_scale); + m_transform = Transform::CreateScale(m_scale); m_expanded.SetTransform(m_transform); Transform rebuild; m_expanded.GetTransform(rebuild); - float returned = rebuild.GetUniformScale(); - EXPECT_NEAR(m_scale, returned, 0.1f); + Vector3 returned = rebuild.GetScale(); + EXPECT_NEAR(m_scale.GetX(), returned.GetX(), 0.1f); + EXPECT_NEAR(m_scale.GetY(), returned.GetY(), 0.1f); + EXPECT_NEAR(m_scale.GetZ(), returned.GetZ(), 0.1f); } TEST_F(TransformRowWidgetTest, GetTransform_RotateAndTranslateInMatrix_ReconstructedTransformMatchesOriginal) @@ -117,7 +121,7 @@ namespace AZ { Quaternion quaternion = AZ::ConvertEulerDegreesToQuaternion(m_rotation); m_transform = Transform::CreateFromQuaternionAndTranslation(quaternion, m_translation); - m_transform.MultiplyByUniformScale(m_scale); + m_transform.MultiplyByScale(m_scale); m_expanded.SetTransform(m_transform); Transform rebuild; diff --git a/Gems/PhysX/Code/Source/Utils.cpp b/Gems/PhysX/Code/Source/Utils.cpp index 87cadcd929..a85426d532 100644 --- a/Gems/PhysX/Code/Source/Utils.cpp +++ b/Gems/PhysX/Code/Source/Utils.cpp @@ -920,9 +920,9 @@ namespace PhysX AZ::Vector3 GetTransformScale(AZ::EntityId entityId) { - float worldScale = 1.0f; - AZ::TransformBus::EventResult(worldScale, entityId, &AZ::TransformBus::Events::GetWorldUniformScale); - return AZ::Vector3(worldScale); + AZ::Vector3 worldScale = AZ::Vector3::CreateOne(); + AZ::TransformBus::EventResult(worldScale, entityId, &AZ::TransformBus::Events::GetWorldScale); + return worldScale; } AZ::Vector3 GetUniformScale(AZ::EntityId entityId) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp index 30e55cee49..a0db02c3a8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.cpp @@ -2527,15 +2527,15 @@ namespace ScriptCanvas { Data::TransformType copy(source); AZ::Vector3 pos = copy.GetTranslation(); - float scale = copy.ExtractUniformScale(); + AZ::Vector3 scale = copy.ExtractScale(); AZ::Vector3 rotation = AZ::ConvertTransformToEulerDegrees(copy); return AZStd::string::format ( "(Position: X: %f, Y: %f, Z: %f," " Rotation: X: %f, Y: %f, Z: %f," - " Scale: %f)" + " Scale: X: %f, Y: %f, Z: %f)" , static_cast(pos.GetX()), static_cast(pos.GetY()), static_cast(pos.GetZ()) , static_cast(rotation.GetX()), static_cast(rotation.GetY()), static_cast(rotation.GetZ()) - , scale); + , static_cast(scale.GetX()), static_cast(scale.GetY()), static_cast(scale.GetZ())); } AZStd::string Datum::ToStringVector2(const AZ::Vector2& source) const diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h index 7aafdf584e..6a0f082272 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/TransformNodes.h @@ -26,9 +26,9 @@ namespace ScriptCanvas using namespace MathNodeUtilities; static const char* k_categoryName = "Math/Transform"; - AZ_INLINE std::tuple ExtractScale(TransformType source) + AZ_INLINE std::tuple ExtractScale(TransformType source) { - auto scale(source.ExtractUniformScale()); + auto scale(source.ExtractScale()); return std::make_tuple( scale, source ); } SCRIPT_CANVAS_GENERIC_FUNCTION_MULTI_RESULTS_NODE(ExtractScale, k_categoryName, "{8DFE5247-0950-4CD1-87E6-0CAAD42F1637}", "returns a vector which is the length of the scale components, and a transform with the scale extracted ", "Source", "Scale", "Extracted"); From 92311ddf0dd091f665209d9f49b349bdc68477ca Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 15:43:04 +0100 Subject: [PATCH 17/20] more tidying up --- .../AzCore/AzCore/Math/Transform.cpp | 2 +- Code/Framework/AzCore/AzCore/Math/Transform.h | 4 ++-- .../AzCore/AzCore/Math/Transform.inl | 2 +- .../Json/TransformSerializerTests.cpp | 4 ++-- .../ToolsComponents/TransformComponent.cpp | 19 +++++++++---------- .../ToolsComponents/TransformComponentBus.h | 4 ++-- .../CoreLights/PolygonLightDelegate.cpp | 1 + 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.cpp b/Code/Framework/AzCore/AzCore/Math/Transform.cpp index 0bdfb3b318..9090a9e94e 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Transform.cpp @@ -250,7 +250,7 @@ namespace AZ Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> Attribute(Script::Attributes::Storage, Script::Attributes::StorageType::Value)-> Attribute(Script::Attributes::GenericConstructorOverride, &Internal::TransformDefaultConstructor)-> - Constructor()-> + Constructor()-> Method("GetBasis", &Transform::GetBasis)-> Method("GetBasisX", &Transform::GetBasisX)-> Method("GetBasisY", &Transform::GetBasisY)-> diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.h b/Code/Framework/AzCore/AzCore/Math/Transform.h index 6139c11ba5..7ae86edd89 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.h +++ b/Code/Framework/AzCore/AzCore/Math/Transform.h @@ -63,7 +63,7 @@ namespace AZ Transform() = default; //! Construct a transform from components. - Transform(const Vector3& translation, const Quaternion& rotation, const float scale); + Transform(const Vector3& translation, const Quaternion& rotation, const Vector3& scale); //! Creates an identity transform. static Transform CreateIdentity(); @@ -89,7 +89,7 @@ namespace AZ static Transform CreateFromMatrix3x4(const Matrix3x4& value); - //! Sets the transform to apply (uniform) scale only, no rotation or translation. + //! Sets the transform to apply scale only, no rotation or translation. static Transform CreateScale(const AZ::Vector3& scale); //! Sets the transform to apply (uniform) scale only, no rotation or translation. diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.inl b/Code/Framework/AzCore/AzCore/Math/Transform.inl index 1da103c45b..4c2a7798b5 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.inl +++ b/Code/Framework/AzCore/AzCore/Math/Transform.inl @@ -12,7 +12,7 @@ namespace AZ { - AZ_MATH_INLINE Transform::Transform(const Vector3& translation, const Quaternion& rotation, const float scale) + AZ_MATH_INLINE Transform::Transform(const Vector3& translation, const Quaternion& rotation, const Vector3& scale) : m_translation(translation) , m_rotation(rotation) , m_scale(scale) diff --git a/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp b/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp index 7febbbb5d9..e1e9bd237d 100644 --- a/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp +++ b/Code/Framework/AzCore/Tests/Serialization/Json/TransformSerializerTests.cpp @@ -44,7 +44,7 @@ namespace JsonSerializationTests AZStd::shared_ptr CreateFullySetInstance() override { return AZStd::make_shared( - AZ::Vector3(1.0f, 2.0f, 3.0f), AZ::Quaternion(0.25f, 0.5f, 0.75f, 1.0f), 9.0f); + AZ::Vector3(1.0f, 2.0f, 3.0f), AZ::Quaternion(0.25f, 0.5f, 0.75f, 1.0f), AZ::Vector3(9.0f)); } AZStd::string_view GetJsonForFullySetInstance() override @@ -95,7 +95,7 @@ namespace JsonSerializationTests AZ::Transform expectedTransform( AZ::Vector3(2.25f, 3.5f, 4.75f), AZ::Quaternion(0.25f, 0.5f, 0.75f, 1.0f), - 5.5f); + AZ::Vector3(5.5f)); rapidjson::Document json; json.Parse(R"({ "Translation": [ 2.25, 3.5, 4.75 ], "Rotation": [ 0.25, 0.5, 0.75, 1.0 ], "Scale": 5.5 })"); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp index 7f47699243..b73978c792 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponent.cpp @@ -51,9 +51,9 @@ namespace AzToolsFramework const AZ::u32 ParentEntityCRC = AZ_CRC("Parent Entity", 0x5b1b276c); // Decompose a transform into euler angles in degrees, scale (along basis, any shear will be dropped), and translation. - void DecomposeTransform(const AZ::Transform& transform, AZ::Vector3& translation, AZ::Vector3& rotation, float& scale) + void DecomposeTransform(const AZ::Transform& transform, AZ::Vector3& translation, AZ::Vector3& rotation, AZ::Vector3& scale) { - scale = transform.GetUniformScale(); + scale = transform.GetScale(); translation = transform.GetTranslation(); rotation = transform.GetRotation().GetEulerDegrees(); } @@ -357,7 +357,7 @@ namespace AzToolsFramework AZ::Transform TransformComponent::GetLocalScaleTM() const { - return AZ::Transform::CreateUniformScale(m_editorTransform.m_scale); + return AZ::Transform::CreateUniformScale(m_editorTransform.m_scale.GetMaxElement()); } const AZ::Transform& TransformComponent::GetLocalTM() @@ -374,8 +374,7 @@ namespace AzToolsFramework // given a local transform, update local transform. void TransformComponent::SetLocalTM(const AZ::Transform& finalTx) { - AZ::Vector3 tx, rot; - float scale; + AZ::Vector3 tx, rot, scale; Internal::DecomposeTransform(finalTx, tx, rot, scale); m_editorTransform.m_translate = tx; @@ -680,13 +679,13 @@ namespace AzToolsFramework void TransformComponent::SetLocalScale(const AZ::Vector3& scale) { - m_editorTransform.m_scale = scale.GetMaxElement(); + m_editorTransform.m_scale = scale; TransformChanged(); } AZ::Vector3 TransformComponent::GetLocalScale() { - return AZ::Vector3(m_editorTransform.m_scale); + return m_editorTransform.m_scale; } AZ::Vector3 TransformComponent::GetWorldScale() @@ -696,13 +695,13 @@ namespace AzToolsFramework void TransformComponent::SetLocalUniformScale(float scale) { - m_editorTransform.m_scale = scale; + m_editorTransform.m_scale = AZ::Vector3(scale); TransformChanged(); } float TransformComponent::GetLocalUniformScale() { - return m_editorTransform.m_scale; + return m_editorTransform.m_scale.GetMaxElement(); } float TransformComponent::GetWorldUniformScale() @@ -1309,7 +1308,7 @@ namespace AzToolsFramework { AzToolsFramework::ScopedUndoBatch undo("Reset transform values"); m_editorTransform.m_translate = AZ::Vector3::CreateZero(); - m_editorTransform.m_scale = 1.0f; + m_editorTransform.m_scale = AZ::Vector3::CreateOne(); m_editorTransform.m_rotate = AZ::Vector3::CreateZero(); OnTransformChanged(); SetDirty(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h index 6082bda4bd..437a39b1a0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/TransformComponentBus.h @@ -30,7 +30,7 @@ namespace AzToolsFramework EditorTransform() { m_translate = AZ::Vector3::CreateZero(); - m_scale = 1.0f; + m_scale = AZ::Vector3::CreateOne(); m_rotate = AZ::Vector3::CreateZero(); m_locked = false; } @@ -41,7 +41,7 @@ namespace AzToolsFramework } AZ::Vector3 m_translate; //! Translation in engine units (meters) - float m_scale; + AZ::Vector3 m_scale; AZ::Vector3 m_rotate; //! Rotation in degrees bool m_locked; }; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp index 6ec780c2ab..e01559041c 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/PolygonLightDelegate.cpp @@ -50,6 +50,7 @@ namespace AZ AZStd::vector vertices = m_shapeBus->GetPolygonPrism()->m_vertexContainer.GetVertices(); Transform transform = GetTransform(); + transform.SetUniformScale(transform.GetUniformScale()); // Poly Prism only supports uniform scale. AZStd::vector transformedVertices; transformedVertices.reserve(vertices.size()); From 4d75f0043672ffc9fca85caf6bbd530d0953bfa4 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 15:52:11 +0100 Subject: [PATCH 18/20] fix physx editor tests --- Gems/PhysX/Code/Tests/EditorTestUtilities.cpp | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/Gems/PhysX/Code/Tests/EditorTestUtilities.cpp b/Gems/PhysX/Code/Tests/EditorTestUtilities.cpp index 043bd60acd..c2e0bbbf5e 100644 --- a/Gems/PhysX/Code/Tests/EditorTestUtilities.cpp +++ b/Gems/PhysX/Code/Tests/EditorTestUtilities.cpp @@ -93,39 +93,43 @@ namespace PhysXEditorTests editorEntity->CreateComponent(); editorEntity->CreateComponent(LmbrCentral::EditorCylinderShapeComponentTypeId); editorEntity->Activate(); - + { - UnitTest::ErrorHandler warningHandler("Negative or zero cylinder dimensions are invalid"); + UnitTest::ErrorHandler dimensionWarningHandler("Negative or zero cylinder dimensions are invalid"); + UnitTest::ErrorHandler colliderWarningHandler("No Collider or Shape information found when creating Rigid body"); LmbrCentral::CylinderShapeComponentRequestsBus::Event(editorEntity->GetId(), &LmbrCentral::CylinderShapeComponentRequests::SetRadius, radius); // expect 2 warnings //1 if the radius is invalid //2 when re-creating the underlying simulated body - int expectedWarningCount = radius <= 0.f ? 2 : 0; - EXPECT_EQ(warningHandler.GetWarningCount(), expectedWarningCount); + int expectedWarningCount = radius <= 0.f ? 1 : 0; + EXPECT_EQ(dimensionWarningHandler.GetExpectedWarningCount(), expectedWarningCount); + EXPECT_EQ(colliderWarningHandler.GetExpectedWarningCount(), expectedWarningCount); } - + { - UnitTest::ErrorHandler warningHandler("Negative or zero cylinder dimensions are invalid"); + UnitTest::ErrorHandler dimensionWarningHandler("Negative or zero cylinder dimensions are invalid"); + UnitTest::ErrorHandler colliderWarningHandler("No Collider or Shape information found when creating Rigid body"); LmbrCentral::CylinderShapeComponentRequestsBus::Event(editorEntity->GetId(), &LmbrCentral::CylinderShapeComponentRequests::SetHeight, height); // expect 2 warnings //1 if the radius or height is invalid //2 when re-creating the underlying simulated body - int expectedWarningCount = radius <= 0.f || height <= 0.f ? 2 : 0; - EXPECT_EQ(warningHandler.GetWarningCount(), expectedWarningCount); + int expectedWarningCount = radius <= 0.f || height <= 0.f ? 1 : 0; + EXPECT_EQ(dimensionWarningHandler.GetExpectedWarningCount(), expectedWarningCount); + EXPECT_EQ(colliderWarningHandler.GetExpectedWarningCount(), expectedWarningCount); } EntityPtr gameEntity = CreateActiveGameEntityFromEditorEntity(editorEntity.get()); - + // since there was no editor rigid body component, the runtime entity should have a static rigid body const auto* staticBody = azdynamic_cast(gameEntity->FindComponent()->GetSimulatedBody()); const auto* pxRigidStatic = static_cast(staticBody->GetNativePointer()); - + PHYSX_SCENE_READ_LOCK(pxRigidStatic->getScene()); - + // there should be no shapes on the rigid body because the cylinder radius and/or height is invalid EXPECT_EQ(pxRigidStatic->getNbShapes(), 0); } From b9037df3e066c07fb0fa95f14c687d1d25238702 Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 15:53:12 +0100 Subject: [PATCH 19/20] make transform deprecation warnings less spammy --- Code/Framework/AzCore/AzCore/Math/Transform.inl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.inl b/Code/Framework/AzCore/AzCore/Math/Transform.inl index 4c2a7798b5..a7d5e72749 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.inl +++ b/Code/Framework/AzCore/AzCore/Math/Transform.inl @@ -65,7 +65,7 @@ namespace AZ AZ_MATH_INLINE Transform Transform::CreateScale(const Vector3& scale) { - AZ_Warning("Transform", false, "CreateScale is deprecated, please use CreateUniformScale instead."); + AZ_WarningOnce("Transform", false, "CreateScale is deprecated, please use CreateUniformScale instead."); Transform result; result.m_rotation = Quaternion::CreateIdentity(); result.m_scale = scale; @@ -162,7 +162,7 @@ namespace AZ AZ_MATH_INLINE Vector3 Transform::GetScale() const { - AZ_Warning("Transform", false, "GetScale is deprecated, please use GetUniformScale instead."); + AZ_WarningOnce("Transform", false, "GetScale is deprecated, please use GetUniformScale instead."); return m_scale; } @@ -173,7 +173,7 @@ namespace AZ AZ_MATH_INLINE void Transform::SetScale(const Vector3& scale) { - AZ_Warning("Transform", false, "SetScale is deprecated, please use SetUniformScale instead."); + AZ_WarningOnce("Transform", false, "SetScale is deprecated, please use SetUniformScale instead."); m_scale = scale; } @@ -184,7 +184,7 @@ namespace AZ AZ_MATH_INLINE Vector3 Transform::ExtractScale() { - AZ_Warning("Transform", false, "ExtractScale is deprecated, please use ExtractUniformScale instead."); + AZ_WarningOnce("Transform", false, "ExtractScale is deprecated, please use ExtractUniformScale instead."); const Vector3 scale = m_scale; m_scale = Vector3::CreateOne(); return scale; @@ -199,7 +199,7 @@ namespace AZ AZ_MATH_INLINE void Transform::MultiplyByScale(const Vector3& scale) { - AZ_Warning("Transform", false, "MultiplyByScale is deprecated, please use MultiplyByUniformScale instead."); + AZ_WarningOnce("Transform", false, "MultiplyByScale is deprecated, please use MultiplyByUniformScale instead."); m_scale *= scale; } From d2c982df986a54a727116b3db6e12c253f6f1bbc Mon Sep 17 00:00:00 2001 From: greerdv Date: Tue, 25 May 2021 19:21:04 +0100 Subject: [PATCH 20/20] address PR feedback --- Code/Framework/AzCore/AzCore/Math/Quaternion.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Quaternion.h b/Code/Framework/AzCore/AzCore/Math/Quaternion.h index be8ac3e841..4d3b6641db 100644 --- a/Code/Framework/AzCore/AzCore/Math/Quaternion.h +++ b/Code/Framework/AzCore/AzCore/Math/Quaternion.h @@ -83,10 +83,10 @@ namespace AZ static Quaternion CreateShortestArc(const Vector3& v1, const Vector3& v2); - /// Creates a quaternion using rotation in degrees about the axes. First rotated about the X axis, followed by the Y axis, then the Z axis. + //! Creates a quaternion using rotation in degrees about the axes. First rotated about the X axis, followed by the Y axis, then the Z axis. static const Quaternion CreateFromEulerAnglesDegrees(const Vector3& anglesInDegrees); - /// Creates a quaternion using rotation in radians about the axes. First rotated about the X axis, followed by the Y axis, then the Z axis. + //! Creates a quaternion using rotation in radians about the axes. First rotated about the X axis, followed by the Y axis, then the Z axis. static const Quaternion CreateFromEulerAnglesRadians(const Vector3& anglesInRadians); //! Stores the vector to an array of 4 floats. The floats need only be 4 byte aligned, 16 byte alignment is not required.