Frame.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Allocators.h>
  9. #include <Frame.h>
  10. #include <EMotionFX/Source/MotionData/MotionData.h>
  11. #include <EMotionFX/Source/TransformData.h>
  12. namespace EMotionFX::MotionMatching
  13. {
  14. AZ_CLASS_ALLOCATOR_IMPL(Frame, MotionMatchAllocator)
  15. Frame::Frame()
  16. : m_frameIndex(InvalidIndex)
  17. , m_sampleTime(0.0f)
  18. , m_sourceMotion(nullptr)
  19. , m_mirrored(false)
  20. {
  21. }
  22. Frame::Frame(size_t frameIndex, Motion* sourceMotion, float sampleTime, bool mirrored)
  23. : m_frameIndex(frameIndex)
  24. , m_sourceMotion(sourceMotion)
  25. , m_sampleTime(sampleTime)
  26. , m_mirrored(mirrored)
  27. {
  28. }
  29. void Frame::SamplePose(Pose* outputPose, float timeOffset) const
  30. {
  31. MotionDataSampleSettings sampleSettings;
  32. sampleSettings.m_actorInstance = outputPose->GetActorInstance();
  33. sampleSettings.m_inPlace = false;
  34. sampleSettings.m_mirror = m_mirrored;
  35. sampleSettings.m_retarget = false;
  36. sampleSettings.m_inputPose = sampleSettings.m_actorInstance->GetTransformData()->GetBindPose();
  37. sampleSettings.m_sampleTime = m_sampleTime + timeOffset;
  38. sampleSettings.m_sampleTime = AZ::GetClamp(m_sampleTime + timeOffset, 0.0f, m_sourceMotion->GetDuration());
  39. m_sourceMotion->SamplePose(outputPose, sampleSettings);
  40. }
  41. void Frame::SetFrameIndex(size_t frameIndex)
  42. {
  43. m_frameIndex = frameIndex;
  44. }
  45. Motion* Frame::GetSourceMotion() const
  46. {
  47. return m_sourceMotion;
  48. }
  49. float Frame::GetSampleTime() const
  50. {
  51. return m_sampleTime;
  52. }
  53. void Frame::SetSourceMotion(Motion* sourceMotion)
  54. {
  55. m_sourceMotion = sourceMotion;
  56. }
  57. void Frame::SetMirrored(bool enabled)
  58. {
  59. m_mirrored = enabled;
  60. }
  61. void Frame::SetSampleTime(float sampleTime)
  62. {
  63. m_sampleTime = sampleTime;
  64. }
  65. } // namespace EMotionFX::MotionMatching