BVB Source Codes

CRYENGINE Show PoseAligner.h Source code

Return Download CRYENGINE: download PoseAligner.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef Animation_PoseAligner_h
  4. #define Animation_PoseAligner_h
  5.  
  6. #include <CryAnimation/ICryAnimation.h>
  7. #include <CryExtension/ClassWeaver.h>
  8.  
  9. namespace PoseAligner {
  10.  
  11. class CChain;
  12. class CPose;
  13.  
  14. class CVars
  15. {
  16. public:
  17.         static const CVars& GetInstance()
  18.         {
  19.                 static CVars instance;
  20.                 return instance;
  21.         }
  22.  
  23. public:
  24.         CVars();
  25.  
  26. public:
  27.         int m_enable;
  28.         int m_debugDraw;
  29.  
  30.         int m_forceTargetSmoothing;
  31.         int m_forceNoRootOffset;
  32.         int m_forceNoIntersections;
  33.         int m_forceWeightOne;
  34.         int m_forceLock;
  35. };
  36.  
  37. class CContactReporter :
  38.         public _i_reference_target<int>
  39. {
  40. public:
  41.         virtual bool Update(Vec3& position, Vec3& normal) = 0;
  42. };
  43. typedef _smart_ptr<CContactReporter> CContactReporterPtr;
  44.  
  45. class CContactRaycast :
  46.         public CContactReporter
  47. {
  48. public:
  49.         CContactRaycast(IEntity& entity);
  50.  
  51. public:
  52.         void SetLength(float length) { m_length = length; }
  53.  
  54.         // CContactReporter
  55. public:
  56.         virtual bool Update(Vec3& position, Vec3& normal);
  57.  
  58. private:
  59.         IEntity* m_pEntity;
  60.         float    m_length;
  61. };
  62. typedef _smart_ptr<CContactRaycast> CContactRaycastPtr;
  63.  
  64. struct SChainDesc
  65. {
  66. public:
  67.         const char*                       name;
  68.         IAnimationPoseAlignerChain::EType eType;
  69.         LimbIKDefinitionHandle            solver;
  70.         int                               targetBlendJointIndex;
  71.  
  72.         Vec3                              offsetMin;
  73.         Vec3                              offsetMax;
  74.  
  75.         bool                              bBlendProcedural;
  76.         bool                              bForceNoIntersection;
  77.         bool                              bTargetSmoothing;
  78.  
  79.         CContactReporterPtr               pContactReporter;
  80.         int                               contactJointIndex;
  81.  
  82. public:
  83.         SChainDesc() :
  84.                 name(NULL),
  85.                 eType(IAnimationPoseAlignerChain::eType_Limb),
  86.                 solver(NULL),
  87.                 targetBlendJointIndex(-1),
  88.                 offsetMin(ZERO),
  89.                 offsetMax(ZERO),
  90.                 bBlendProcedural(false),
  91.                 bForceNoIntersection(false),
  92.                 bTargetSmoothing(false),
  93.                 contactJointIndex(-1)
  94.         {
  95.         }
  96.  
  97. public:
  98.         ILINE bool IsValid() const
  99.         {
  100.                 if (!solver)
  101.                         return false;
  102.                 if (!pContactReporter)
  103.                         return false;
  104.                 if (contactJointIndex < 0)
  105.                         return false;
  106.                 return true;
  107.         }
  108. };
  109.  
  110. typedef _smart_ptr<CChain> CChainPtr;
  111. class CChain :
  112.         public _i_reference_target<int>
  113. {
  114. public:
  115.         static CChainPtr Create(const SChainDesc& desc);
  116.  
  117. private:
  118.         CChain();
  119.  
  120. public:
  121.         void        Reset();
  122.  
  123.         void        SetTargetForceWeightOne(bool bForce) { m_bTargetForceWeightOne = bForce; }
  124.  
  125.         const Vec3& GetTargetPosition() const            { return m_targetPosition; }
  126.         const Vec3& GetTargetPositionFiltered() const    { return m_targetPositionFiltered; }
  127.  
  128.         void        UpdateFromAnimations(ICharacterInstance& character, const QuatT& location, const float time);
  129.         void        FindContact(const QuatT& location);
  130.         void        FilterTargetLocation(const float time);
  131.         float       ComputeTargetBlendValue(ISkeletonPose& skeletonPose, const float time, const float weight);
  132.         bool        ComputeRootOffsetExtents(float& offsetMin, float& offsetMax);
  133.  
  134.         bool        SetupStoreOperators(IAnimationOperatorQueue& operatorQueue);
  135.         bool        SetupTargetPoseModifiers(const QuatT& location, const Vec3& limitOffset, ISkeletonAnim& skeletonAnim);
  136.  
  137.         void        DrawDebug(const QuatT& location);
  138.  
  139. private:
  140.         SChainDesc                    m_desc;
  141.  
  142.         Vec3                          m_targetPosition;
  143.         Vec3                          m_targetPositionFiltered;
  144.         Vec3                          m_targetPositionFilteredSmoothRate;
  145.  
  146.         Vec3                          m_targetNormal;
  147.         Vec3                          m_targetNormalFiltered;
  148.         Vec3                          m_targetNormalFilteredSmoothRate;
  149.  
  150.         float                         m_targetBlendWeight;
  151.         float                         m_targetBlendWeightAnimated;
  152.         float                         m_targetBlendWeightFiltered;
  153.         float                         m_targetBlendWeightFilteredSmoothRate;
  154.  
  155.         Vec3                          m_targetDelta;
  156.  
  157.         bool                          m_bTargetIntersecting;
  158.         bool                          m_bTargetLock;
  159.         bool                          m_bTargetForceWeightOne;
  160.  
  161.         IAnimationPoseAlignerChainPtr m_pPoseAlignerChain;
  162.         IAnimationPoseModifierPtr     m_pTargetLocation;
  163.         QuatT                         m_targetPositionAnimation;
  164.  
  165.         Vec3                          m_animationSlopeNormal;
  166.         Vec3                          m_animationSlopeNormalFiltered;
  167.         Vec3                          m_animationSlopeNormalFilteredSmoothRate;
  168. };
  169.  
  170. class CPose :
  171.         public IAnimationPoseAligner
  172. {
  173. public:
  174.         CRYINTERFACE_BEGIN()
  175.         CRYINTERFACE_ADD(IAnimationPoseAligner)
  176.         CRYINTERFACE_END()
  177.  
  178. public:
  179.         CPose();
  180.         virtual ~CPose();
  181.  
  182. public:
  183.         bool         Initialize(IEntity& entity, int rootJointIndex);
  184.         virtual bool Initialize(IEntity& entity) { return false; }
  185.         void         Reset();
  186.         void         Clear();
  187.  
  188.         CChainPtr    CreateChain(const SChainDesc& desc);
  189.         const uint   GetChainCount() const { return uint(m_chains.size()); }
  190.         CChainPtr    GetChain(uint index)  { return m_chains[index]; }
  191.         void         RemoveAllChains();
  192.  
  193.         void         SetRootOffsetEnable(bool bEnable)                     { m_bRootOffset = bEnable; }
  194.         void         SetRootOffsetMinMax(float offsetMin, float offsetMax) { m_rootOffsetMin = offsetMin; m_rootOffsetMax = offsetMax; }
  195.         void         SetRootOffsetAdditional(const Vec3& offset)           { m_rootOffsetAdditional = offset; }
  196.         void         SetRootOffsetAverage(bool bRootOffsetAverage)         { m_bRootOffsetAverage = bRootOffsetAverage; }
  197.  
  198.         void         SetBlendWeight(float weight)                          { m_blendWeight = weight; }
  199.  
  200.         void         Update(const QuatT& location, const float time);
  201.  
  202. private:
  203.         void SetupPoseModifiers(const QuatT& location);
  204.  
  205.         void DrawDebug(const QuatT& location, const Vec3& groundNormal);
  206.  
  207. public:
  208.         IEntity*                   m_pEntity;
  209.         ISkeletonAnim*             m_pSkeletonAnim;
  210.         ISkeletonPose*             m_pSkeletonPose;
  211.         IAnimationOperatorQueuePtr m_operatorQueue;
  212.  
  213.         int                        m_rootJointIndex;
  214.  
  215.         bool                       m_bRootOffset;
  216.         bool                       m_bRootOffsetAverage;
  217.         Vec3                       m_rootOffsetDirection;
  218.         Vec3                       m_rootOffsetAdditional;
  219.         float                      m_rootOffsetMin;
  220.         float                      m_rootOffsetMax;
  221.         float                      m_rootOffsetSmoothed;
  222.         float                      m_rootOffsetSmoothedRate;
  223.  
  224.         DynArray<CChainPtr>        m_chains;
  225.  
  226.         float                      m_blendWeight;
  227.  
  228.         // TEMP
  229.         bool m_bInitialized;
  230. };
  231.  
  232. } // namespace PoseAligner
  233.  
  234. #endif // Animation_PoseAligner_h
  235.  
downloadPoseAligner.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top