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

其他游戏

开发平台:

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_DYNAMICS2_KEYFRAMED_RIGID_MOTION
  9. #define HK_DYNAMICS2_KEYFRAMED_RIGID_MOTION
  10. #include <Physics/Dynamics/Motion/hkpMotion.h>
  11. extern const hkClass hkpKeyframedRigidMotionClass;
  12. /// This class is contained by the hkpRigidBody class.
  13. /// It should not be accessed directly by the user.
  14. class hkpKeyframedRigidMotion : public hkpMotion
  15. {
  16. public:
  17. HK_DECLARE_REFLECTION();
  18. /// Construct a keyframed rigid body motion object, given position and rotation.
  19. /// Set the mass and the inertia to be infinite to achieve the
  20. /// special behavior of the keyframed motion. This is a property
  21. /// of the keyframed motion and should not be changed.
  22. hkpKeyframedRigidMotion( const hkVector4& position, const hkQuaternion& rotation );
  23. virtual ~hkpKeyframedRigidMotion();
  24. /// Set the mass of the rigid body. (Note: it is better to use setMassInv if possible).
  25. virtual void setMass(hkReal m);
  26. /// Set the inverse mass of the rigid body. 
  27. virtual void setMassInv(hkReal mInv);
  28. /*
  29. ** INERTIA
  30. */
  31. /// Get the inertia tensor of the rigid body in local space.
  32. virtual void getInertiaLocal(hkMatrix3& inertia) const;
  33. /// Users should not set the inertia of a keyframed body.
  34. /// This will result in an ASSERT.  Inertia is infinite for keyframed bodies.
  35. virtual void setInertiaLocal(const hkMatrix3& inertia);
  36. /// Get the inertia tensor of the rigid body in world space.
  37. virtual void getInertiaWorld(hkMatrix3& inertiaOut) const;
  38. /// Users should not set the inertia inverse of a keyframed body.
  39. /// This will result in an ASSERT.  Inertia is infinite for keyframed bodies.
  40. virtual void setInertiaInvLocal(const hkMatrix3& inertiaInv);
  41. /// Get the inverse inertia tensor in local space.
  42. virtual void getInertiaInvLocal(hkMatrix3& inertiaInv) const;
  43. /// Get the inverse inertia tensor in local space.
  44. virtual void getInertiaInvWorld(hkMatrix3& inertiaInvOut) const;
  45. /*
  46. ** VELOCITY ACCESS
  47. */
  48. // Implements hkpMotion.
  49. virtual void getProjectedPointVelocity(const hkVector4& p, const hkVector4& normal, hkReal& velOut, hkReal& invVirtMassOut) const;
  50. /*
  51. ** IMPULSE APPLICATION
  52. */
  53. /// Users should not apply a linear impulse to a keyframed body. Try setting the velocity instead.
  54. /// Keyframed bodies are infinitely heavy so applying impulses doesn't have any effect.
  55. virtual void applyLinearImpulse(const hkVector4& imp);
  56. /// Users should not apply a point impulse to a keyframed body. Try setting the velocity instead.
  57. /// Keyframed bodies are infinitely heavy so applying impulses doesn't have any effect.
  58. virtual void applyPointImpulse(const hkVector4& imp, const hkVector4& p);
  59. /// Users should not apply an angular impulse to a keyframed body. Try setting the angular velocity instead.
  60. /// Keyframed bodies are infinitely heavy so applying angular impulses doesn't have any effect.
  61. virtual void applyAngularImpulse(const hkVector4& imp);
  62. /*
  63. ** FORCE AND TORQUE APPLICATION
  64. */
  65. /// Users should not apply a force to a keyframed body. Try setting the velocity instead.
  66. /// Keyframed bodies are infinitely heavy so applying forces doesn't have any effect.
  67. virtual void applyForce(const hkReal deltaTime, const hkVector4& force);
  68. /// Users should not apply a force to a keyframed body.  Try setting the velocity instead.
  69. /// Keyframed bodies are infinitely heavy so applying forces doesn't have any effect.
  70. virtual void applyForce(const hkReal deltaTime, const hkVector4& force, const hkVector4& p);
  71. /// Users should not apply a torque to a keyframed body.  Try setting the angular velocity instead.
  72. /// Keyframed bodies are infinitely heavy so applying torque doesn't have any effect.
  73. virtual void applyTorque(const hkReal deltaTime, const hkVector4& torque);
  74. protected:
  75. hkpKeyframedRigidMotion(): hkpMotion(hkFinishLoadedObjectFlag()){ m_savedMotion = HK_NULL; }
  76. public:
  77. public:
  78. // hkpMotion interface
  79. virtual void setStepPosition( hkReal position, hkReal timestep );
  80. virtual void setStoredMotion( hkpMaxSizeMotion* savedMotion );
  81. public:
  82. hkpKeyframedRigidMotion( class hkFinishLoadedObjectFlag flag ) : hkpMotion( flag ) {}
  83. };
  84. // This class is just used as a large-enough placeholder for all available motion classes
  85. class hkpMaxSizeMotion : public hkpKeyframedRigidMotion
  86. {
  87. public:
  88. //+vtable(1)
  89. HK_DECLARE_REFLECTION();
  90. hkpMaxSizeMotion() : hkpKeyframedRigidMotion( ) {}
  91. hkpMaxSizeMotion( class hkFinishLoadedObjectFlag flag ) : hkpKeyframedRigidMotion( flag ) {}
  92. private:
  93. void operator=(const hkpMaxSizeMotion& other);
  94. hkpMaxSizeMotion( const hkpMaxSizeMotion& other );
  95. };
  96. #endif //HK_DYNAMICS2_KEYFRAMED_RIGID_MOTION
  97. /*
  98. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  99. * Confidential Information of Havok.  (C) Copyright 1999-2009
  100. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  101. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  102. * rights, and intellectual property rights in the Havok software remain in
  103. * Havok and/or its suppliers.
  104. * Use of this software for evaluation purposes is subject to and indicates
  105. * acceptance of the End User licence Agreement for this product. A copy of
  106. * the license is included with this software and is also available at www.havok.com/tryhavok.
  107. */