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

其他游戏

开发平台:

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. #include <Common/Base/Types/Geometry/Aabb/hkAabb.h>
  9. inline hkpCollidable::hkpCollidable(const hkpShape* shape, const hkMotionState* ms, int type)
  10. : hkpCdBody(shape, ms), m_ownerOffset(0), 
  11. m_broadPhaseHandle(type),
  12. m_allowedPenetrationDepth(-1.0f)
  13. {
  14. m_broadPhaseHandle.setOwner(this); // 'this' valid here.
  15. m_forceCollideOntoPpu = 0;
  16. m_shapeSizeOnSpu = 0;
  17. #ifdef HK_DEBUG
  18. checkPerformance();
  19. #endif
  20. }
  21. inline hkpCollidable::hkpCollidable(const hkpShape* shape, const hkTransform* t, int type)
  22. : hkpCdBody(shape, t) , m_ownerOffset(0),
  23. m_broadPhaseHandle(type),
  24. m_allowedPenetrationDepth(-1.0f)
  25. {
  26. m_broadPhaseHandle.setOwner(this); // 'this' valid here.
  27. m_forceCollideOntoPpu = 0;
  28. m_shapeSizeOnSpu = 0;
  29. #ifdef HK_DEBUG
  30. checkPerformance();
  31. #endif
  32. }
  33. inline hkpCollidable::hkpCollidable( class hkFinishLoadedObjectFlag flag )
  34. : m_broadPhaseHandle(flag), m_boundingVolumeData(flag)
  35. {
  36. if( flag.m_finishing )
  37. {
  38. m_broadPhaseHandle.setOwner(this);
  39. }
  40. }
  41. inline hkpCollidable::BoundingVolumeData::BoundingVolumeData( class hkFinishLoadedObjectFlag flag )
  42. {
  43. if( flag.m_finishing )
  44. {
  45. if (m_numChildShapeAabbs != 0 || m_capacityChildShapeAabbs != 0 || m_childShapeAabbs != HK_NULL || m_childShapeKeys != HK_NULL)
  46. {
  47. HK_WARN_ONCE(0xad836432, "Cached aabb's were saved in a packfile!?");
  48. }
  49. m_numChildShapeAabbs = 0;
  50. m_capacityChildShapeAabbs = 0;
  51. m_childShapeAabbs = HK_NULL;
  52. m_childShapeKeys = HK_NULL;
  53. invalidate();
  54. }
  55. }
  56. HK_FORCE_INLINE bool hkpCollidable::BoundingVolumeData::hasAllocations() const 
  57. {
  58. HK_ASSERT2(0xad808121, ((m_childShapeAabbs != HK_NULL) == (m_childShapeKeys != HK_NULL)) && ((m_childShapeAabbs != HK_NULL) == (m_capacityChildShapeAabbs != 0)), "BoundingVolumeData sub-allocations incorrect");
  59. return HK_NULL != m_childShapeAabbs;
  60. }
  61. HK_FORCE_INLINE hkpCollidable::~hkpCollidable()
  62. {
  63. }
  64. HK_FORCE_INLINE void hkpCollidable::setShape(const hkpShape* shape)
  65. m_shape  = shape;
  66. // Just duplicating the constructor behavior, checking if the new m_shape might cause
  67. // performance loss.
  68. #if defined HK_DEBUG && !defined(HK_PLATFORM_HAS_SPU)
  69. checkPerformance();
  70. #endif
  71. }
  72. HK_FORCE_INLINE const hkpShape* hkpCollidable::getShape() const
  73. return m_shape; 
  74. }
  75. // HK_FORCE_INLINE void* hkpCollidable::getOwner() const
  76. // { 
  77. //  return const_cast<char*>( reinterpret_cast<const char*>(this) + m_ownerOffset ); 
  78. // }
  79. HK_FORCE_INLINE void hkpCollidable::setOwner( void* owner )
  80. {
  81. int ownerOffset = hkGetByteOffsetInt( this, owner ); // should be within int8 range even on 64 bit as a member
  82. HK_ASSERT( 0xf0232323, ownerOffset > -128 && ownerOffset<127);
  83. m_ownerOffset = hkInt8(ownerOffset);
  84. }
  85. inline const hkpTypedBroadPhaseHandle* hkpCollidable::getBroadPhaseHandle() const
  86. {
  87. return &m_broadPhaseHandle;
  88. }
  89. inline hkpTypedBroadPhaseHandle* hkpCollidable::getBroadPhaseHandle()
  90. {
  91. return &m_broadPhaseHandle;
  92. }
  93. int hkpCollidable::getType() const
  94. {
  95. return m_broadPhaseHandle.getType();
  96. }
  97. HK_FORCE_INLINE hkpCollidableQualityType hkpCollidable::getQualityType() const
  98. {
  99. return hkpCollidableQualityType( m_broadPhaseHandle.m_objectQualityType );
  100. }
  101. HK_FORCE_INLINE void hkpCollidable::setQualityType(hkpCollidableQualityType type)
  102. {
  103. m_broadPhaseHandle.m_objectQualityType = hkInt8(type);
  104. }
  105. hkUint32 hkpCollidable::getCollisionFilterInfo() const
  106. {
  107. return m_broadPhaseHandle.getCollisionFilterInfo();
  108. }
  109. void hkpCollidable::setCollisionFilterInfo( hkUint32 info )
  110. {
  111. m_broadPhaseHandle.setCollisionFilterInfo(info);
  112. }
  113. HK_FORCE_INLINE hkReal hkpCollidable::getAllowedPenetrationDepth() const
  114. {
  115. return m_allowedPenetrationDepth;
  116. }
  117. HK_FORCE_INLINE void hkpCollidable::setAllowedPenetrationDepth( hkReal val )
  118. {
  119. HK_ASSERT2(0xad45bd3d, val > HK_REAL_EPSILON, "Must use a non-zero ( > epsilon ) value when setting allowed penetration depth of bodies.");
  120. m_allowedPenetrationDepth = val;
  121. }
  122. /*
  123. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  124. * Confidential Information of Havok.  (C) Copyright 1999-2009
  125. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  126. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  127. * rights, and intellectual property rights in the Havok software remain in
  128. * Havok and/or its suppliers.
  129. * Use of this software for evaluation purposes is subject to and indicates
  130. * acceptance of the End User licence Agreement for this product. A copy of
  131. * the license is included with this software and is also available at www.havok.com/tryhavok.
  132. */