hkpCdBody.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_COLLIDE2_CD_BODY_H
  9. #define HK_COLLIDE2_CD_BODY_H
  10. #include <Physics/Collide/Shape/hkpShape.h>
  11. class hkpShape;
  12. class hkMotionState;
  13. class hkpCollidable;
  14. /// The hkpCdBody class is a helper class, which is used to traverse
  15. /// the shape hierarchy. It is used for all narrowphase collision detection queries.
  16. /// It contains a shape, and an associated transform. Given two hkpCdBody classes, you
  17. /// can query for the closest distance using the hkCollisionAgentInterface.
  18. /// Note: You do not instantiate this class directly. Use the hkpCollidable, which inherits from
  19. /// hkpCdBody instead.<br>
  20. /// This class is also created temporarily by the collision detector during queries.
  21. /// For example, when querying a shape against a landscape, hkpCdBody classes are created
  22. /// for each sub-shape in the landscape. When hkpCdBody classes are referenced in callbacks,
  23. /// their data may only be temporary, and you should not hold references to them.<br>
  24. /// This class holds either a pointer to a transform or a motionState.
  25. /// The motion state pointer is used only for the internal processCollision call hierarchy
  26. /// The transform pointer is used for all other collision detection queries
  27. class hkpCdBody
  28. {
  29. public:
  30. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_AGENT, hkpCdBody);
  31. // ( CdBody is auto reflected, but the XML has some extra settings in it too. )
  32. HK_DECLARE_REFLECTION();
  33. // Empty constructor; handle with care;
  34. HK_FORCE_INLINE hkpCdBody(  ){}
  35. friend class hkpCollidable;
  36. HK_FORCE_INLINE hkpCdBody( const hkpShape* shape, const hkMotionState* motionState );
  37. HK_FORCE_INLINE hkpCdBody( const hkpShape* shape, const hkTransform* t );
  38. HK_FORCE_INLINE hkpCdBody( const hkpCdBody& body ){} // private copy constructor
  39. ///  Get the transform for the current shape.
  40. ///  Note: this transform might be temporary, do not store pointers to this transform
  41. HK_FORCE_INLINE const hkTransform& getTransform() const;
  42. /// Get the current shape
  43. /// Note: this pointer might be temporary, do not store pointers to this
  44. HK_FORCE_INLINE const hkpShape* getShape() const;
  45. /// Get the root collidable. This is the root of the hkpCdBody tree.
  46. /// You can use this call in a callback to get back the collidable which was used to originate the collision query
  47. /// Note: collidables are persistent.
  48. HK_FORCE_INLINE const hkpCollidable* getRootCollidable() const;
  49. /// Returns the shape key of the current shape with respect to the parent shape.
  50. /// I.e. if it is not HK_INVALID_SHAPE_KEY then the hkpCdBody's parent implements hkpShapeContainer and
  51. /// this->getParent->getContainer()->getChildShape(key) will return the same shape as
  52. /// this->getShape() (possibly at a different address for temporary shapes).
  53. HK_FORCE_INLINE hkpShapeKey getShapeKey() const ;
  54. /// Returns the shape key of the topmost child (non-root) in the hierarchy.
  55. HK_FORCE_INLINE hkpShapeKey getTopLevelShapeKey() const;
  56. /// Return the parent hkpCdBody
  57. HK_FORCE_INLINE const hkpCdBody* getParent() const;
  58. //
  59. // Internal public section
  60. //
  61. public:
  62. // Constructor which copies parent and motionstate, does not set m_shape and m_shapeKey values
  63. // This function should only be called internally by a collision agent
  64. explicit HK_FORCE_INLINE hkpCdBody( const hkpCdBody* parent );
  65. // This constructor is used by collision agents to create temporary hkpCdBody objects
  66. // This function should only be called internally by a collision agent
  67. HK_FORCE_INLINE hkpCdBody( const hkpCdBody* parent, const hkMotionState* ms );
  68. // This constructor is used by collision agents to create temporary hkpCdBody objects
  69. // This function should only be called internally by a collision agent
  70. HK_FORCE_INLINE hkpCdBody( const hkpCdBody* parent, const hkTransform* t );
  71. // sets the shape and shapeKey 
  72. // IMPORTANT: Do not call this function directly if this collidable is in the physics world, 
  73. // because it is unsafe.
  74. // Use hkpRigidBody or hkpPhantom setShape() methods instead.
  75. // This call is only allowed if m_parent->getShape() implements hkpShapeContainer.
  76. // This function should only be called internally by a collision agent.
  77. HK_FORCE_INLINE void setShape( const hkpShape* shape, hkpShapeKey key );
  78. // Gets the motion state
  79. HK_FORCE_INLINE const hkMotionState* getMotionState() const;
  80. // Sets the motion state
  81. HK_FORCE_INLINE void setMotionState( const hkMotionState* state );
  82. // Sets the transform
  83. HK_FORCE_INLINE void setTransform( const hkTransform* t );
  84. public:
  85. const hkpShape*       m_shape;
  86. hkpShapeKey           m_shapeKey; //+overridetype(hkUint32)
  87. // This is either a hkTransform, or a hkMotionState, and is only accessible through the public get and set methods.
  88. // This is not serialized, but set upon addition to world etc., as sometimes
  89. // it is just an offset to a transform (offsets == int == could be serialized) 
  90. // but sometimes it is a hkMotionState that needs to be a typed ptr, so the two
  91. // can't coexist in a serialization friendly way. 
  92. const void* m_motion; //+nosave
  93. const hkpCdBody*  m_parent;
  94. };
  95. # include <Physics/Collide/Agent/Collidable/hkpCdBody.inl>
  96. #endif // HK_COLLIDE2_CD_BODY_H
  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. */