diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/NonUniformMotionData.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/NonUniformMotionData.cpp index 6ced6152e1..50f3a1f73f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/NonUniformMotionData.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/NonUniformMotionData.cpp @@ -78,7 +78,6 @@ namespace EMotionFX { const Actor* actor = settings.m_actorInstance->GetActor(); const MotionLinkData* motionLinkData = FindMotionLinkData(actor); - const Skeleton* skeleton = actor->GetSkeleton(); const size_t jointDataIndex = motionLinkData->GetJointDataLinks()[jointSkeletonIndex]; if (m_additive && jointDataIndex == InvalidIndex) @@ -88,7 +87,7 @@ namespace EMotionFX // Sample the interpolated data. Transform result; - const bool inPlace = (settings.m_inPlace && skeleton->GetNode(jointSkeletonIndex)->GetIsRootNode()); + const bool inPlace = (settings.m_inPlace && jointSkeletonIndex == actor->GetMotionExtractionNodeIndex()); if (jointDataIndex != InvalidIndex && !inPlace) { const JointData& jointData = m_jointData[jointDataIndex]; @@ -139,14 +138,13 @@ namespace EMotionFX const MotionLinkData* motionLinkData = FindMotionLinkData(actor); const ActorInstance* actorInstance = settings.m_actorInstance; - const Skeleton* skeleton = actor->GetSkeleton(); const Pose* bindPose = actorInstance->GetTransformData()->GetBindPose(); const size_t numNodes = actorInstance->GetNumEnabledNodes(); for (size_t i = 0; i < numNodes; ++i) { const uint16 jointIndex = actorInstance->GetEnabledNode(i); const size_t jointDataIndex = motionLinkData->GetJointDataLinks()[jointIndex]; - const bool inPlace = (settings.m_inPlace && skeleton->GetNode(jointIndex)->GetIsRootNode()); + const bool inPlace = (settings.m_inPlace && jointIndex == actor->GetMotionExtractionNodeIndex()); // Sample the interpolated data. Transform result; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/UniformMotionData.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/UniformMotionData.cpp index c4451ff902..881604c7ff 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/UniformMotionData.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionData/UniformMotionData.cpp @@ -147,8 +147,7 @@ namespace EMotionFX size_t indexB; CalculateInterpolationIndicesUniform(settings.m_sampleTime, m_sampleSpacing, m_duration, m_numSamples, indexA, indexB, t); - const Skeleton* skeleton = actor->GetSkeleton(); - const bool inPlace = (settings.m_inPlace && skeleton->GetNode(jointSkeletonIndex)->GetIsRootNode()); + const bool inPlace = (settings.m_inPlace && jointSkeletonIndex == actor->GetMotionExtractionNodeIndex()); // Sample the interpolated data. Transform result; @@ -210,13 +209,12 @@ namespace EMotionFX const AZStd::vector& jointLinks = motionLinkData->GetJointDataLinks(); const ActorInstance* actorInstance = settings.m_actorInstance; - const Skeleton* skeleton = actor->GetSkeleton(); const Pose* bindPose = actorInstance->GetTransformData()->GetBindPose(); const size_t numNodes = actorInstance->GetNumEnabledNodes(); for (size_t i = 0; i < numNodes; ++i) { const size_t skeletonJointIndex = actorInstance->GetEnabledNode(i); - const bool inPlace = (settings.m_inPlace && skeleton->GetNode(skeletonJointIndex)->GetIsRootNode()); + const bool inPlace = (settings.m_inPlace && skeletonJointIndex == actor->GetMotionExtractionNodeIndex()); // Sample the interpolated data. Transform result; diff --git a/Gems/EMotionFX/Code/Tests/AnimGraphMotionNodeTests.cpp b/Gems/EMotionFX/Code/Tests/AnimGraphMotionNodeTests.cpp index a377495d6c..efff992564 100644 --- a/Gems/EMotionFX/Code/Tests/AnimGraphMotionNodeTests.cpp +++ b/Gems/EMotionFX/Code/Tests/AnimGraphMotionNodeTests.cpp @@ -161,6 +161,8 @@ namespace EMotionFX // Make sure all nodes exist. ASSERT_TRUE(rootNode && pelvisNode && lHandNode && lLoArmNode && lLoLegNode && lAnkleNode && rHandNode && rLoArmNode && rLoLegNode && rAnkleNode) << "All nodes used should exist."; + + m_actor->SetMotionExtractionNodeIndex(m_jackRootIndex); } void SetupMirrorNodes()