hkaRagdollRigidBodyController.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_RAGDOLL_RIGIDBODY_CONTROLLER_H
  9. #define HK_RAGDOLL_RIGIDBODY_CONTROLLER_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Animation/Ragdoll/Controller/RigidBody/hkaKeyFrameHierarchyUtility.h>
  12. class hkaRagdollInstance;
  13. /// This controller is useful when driving a set of constrained rigid bodies to a set of keyframes.
  14. /// It is often used to drive a ragdoll to a given animation pose. It is designed to work in model 
  15. /// or world space and is particularly useful for effects like hit reaction or following animation precisely.
  16. /// Note that this class replaces the hkRagdollBoneController.
  17. class hkaRagdollRigidBodyController 
  18. {
  19. public:
  20. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ANIMATION, hkaRagdollRigidBodyController);
  21. /// Constructor takes a ragdoll instance and keeps a reference to it
  22. hkaRagdollRigidBodyController ( hkaRagdollInstance* ragdoll );
  23. /// The constructor removes the references from the bodies
  24. ~hkaRagdollRigidBodyController();
  25. /// Applies the required velocities in order to drive the rigid bodies of this ragdoll to the desired pose.
  26. /// param output see hkaKeyFrameHierarchyUtility for parameter details
  27. void driveToPose ( hkReal deltaTime, const hkQsTransform* poseLocalSpace, const hkQsTransform& worldFromModel, hkaKeyFrameHierarchyUtility::Output* stressOut );
  28. /// The controller uses values from the current state and previous state of the bodies in its calculation
  29. /// The previous state is held in the m_internalData member.
  30. /// Call this to initialize the internal data with the current state of the bodies.
  31. /// e.g. If you are using this controller intermittently call reintialize() once before you start using the controller
  32. void reinitialize();
  33. /// Return the current ragdoll instance.
  34. const hkaRagdollInstance* getRagdollInstance() const;
  35. /// The input data for the controller
  36. /// See hkaKeyFrameHierarchyUtility for parameter details
  37. /// On initialisation only a single element is allocated. 
  38. /// Resize this and adjust the array below for per bone parameters.
  39. hkArray<hkaKeyFrameHierarchyUtility::ControlData> m_controlDataPalette;
  40. /// An array of indices into the palette above
  41. /// This array should be the same length as the number of bodies in the ragdoll
  42. /// If it is not then all bodes use the first element in the palette above.
  43. hkArray<int> m_bodyIndexToPaletteIndex;
  44. private:
  45. // Information about the rigid bodies and their hierarchy
  46. hkaKeyFrameHierarchyUtility::BodyData m_bodyData;
  47. hkArray<hkaKeyFrameHierarchyUtility::WorkElem> m_internalData;
  48. hkaRagdollInstance* m_ragdollInstance;
  49. hkArray<hkInt16> m_rbParentIndices;
  50. };
  51. #endif // HK_RAGDOLL_RIGIDBODY_CONTROLLER_H
  52. /*
  53. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  54. * Confidential Information of Havok.  (C) Copyright 1999-2009
  55. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  56. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  57. * rights, and intellectual property rights in the Havok software remain in
  58. * Havok and/or its suppliers.
  59. * Use of this software for evaluation purposes is subject to and indicates
  60. * acceptance of the End User licence Agreement for this product. A copy of
  61. * the license is included with this software and is also available at www.havok.com/tryhavok.
  62. */