hkpSimpleShapePhantom.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_SIMPLE_SHAPE_PHANTOM_H
  9. #define HK_DYNAMICS2_SIMPLE_SHAPE_PHANTOM_H
  10. #include <Physics/Dynamics/Phantom/hkpShapePhantom.h>
  11. class hkCollisionEnvironment;
  12. class hkpCollisionDispatcher;
  13. class hkpCollidable;
  14. class hkpCollisionAgent;
  15. struct hkpLinearCastCollisionInput;
  16. struct hkpCollisionInput;
  17. class hkpCdPointCollector;
  18. class hkpCdBodyPairCollector;
  19. extern const hkClass hkpSimpleShapePhantomClass;
  20. /// Please read hkpShapePhantom documentation first.<br>
  21. /// The hkpSimpleShapePhantom class implements an hkpShapePhantom with minimal memory overhead
  22. /// (all collision results are recalculated every time).
  23. /// Because hkpSimpleShapePhantom does not cache collision information
  24. /// you may wish to use it (in preference to the hkpCachingShapePhantom) if any of the following criteria apply:
  25. ///  - You are short of memory.
  26. ///  - Your shape is an hkpSphereShape or an hkpCapsuleShape (caches are usually not so important with spheres and capsules because they create full manifolds against triangles on a single call).
  27. ///  - You move the phantom a large distance every frame, so the caches are useless.
  28. class hkpSimpleShapePhantom : public hkpShapePhantom 
  29. {
  30. public:
  31. HK_DECLARE_REFLECTION();
  32. /// Constructor takes a shape, a transform, and an optional collision filter info
  33. hkpSimpleShapePhantom( const hkpShape* shape, const hkTransform& transform, hkUint32 m_collisionFilterInfo = 0 );
  34. ~hkpSimpleShapePhantom();
  35. /// Gets the hkpPhantom type. For this class the type is HK_PHANTOM_SIMPLE_SHAPE
  36. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RO] );
  37. virtual hkpPhantomType getType() const;
  38. // Implementation of hkpShapePhantom::setPositionAndLinearCast
  39. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RW] [this,HK_ACCESS_RW] );
  40. virtual void setPositionAndLinearCast( const hkVector4& position, const hkpLinearCastInput& input, hkpCdPointCollector& castCollector, hkpCdPointCollector* startCollector );
  41. // Implementation of hkpShapePhantom::setTransformAndLinearCast
  42. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RW] [this,HK_ACCESS_RW] );
  43. virtual void setTransformAndLinearCast( const hkTransform& transform, const hkpLinearCastInput& input, hkpCdPointCollector& castCollector, hkpCdPointCollector* startCollector );
  44. // Implementation of hkpShapePhantom::getClosestPoints
  45. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RO] );
  46. void getClosestPoints( hkpCdPointCollector& collector, const hkpCollisionInput* input = HK_NULL );
  47. // Implementation of hkpPhantom::ensureDeterministicOrder.
  48. virtual void ensureDeterministicOrder();
  49. // Implementation of hkpShapePhantom::getPenetrations
  50. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RO] );
  51. void getPenetrations( hkpCdBodyPairCollector& collector, const hkpCollisionInput* input = HK_NULL );
  52. /// hkpPhantom clone functionality
  53. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RO] );
  54. virtual hkpPhantom* clone() const; 
  55. public:
  56. //
  57. // hkpPhantom interface
  58. //
  59. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RW] );
  60. virtual void addOverlappingCollidable( hkpCollidable* collidable );
  61. // hkpPhantom interface implementation
  62. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RO] );
  63. virtual hkBool isOverlappingCollidableAdded( const hkpCollidable* collidable );
  64. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RW] );
  65. virtual void removeOverlappingCollidable( hkpCollidable* collidable );
  66. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RO] );
  67. void calcContentStatistics( hkStatisticsCollector* collector, const hkClass* cls ) const;
  68. public:
  69. struct CollisionDetail
  70. {
  71. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpSimpleShapePhantom::CollisionDetail );
  72. HK_DECLARE_REFLECTION();
  73. class hkpCollidable* m_collidable;
  74. };
  75. /// This method does not guarantee that the returned hkpCollisionDetails structure 
  76. /// is in deterministic order. To ensure determinism, proceed a call to this method 
  77. /// by ensureDeterministicOrder().
  78. inline hkArray<struct CollisionDetail>& getCollisionDetails();
  79. protected:
  80. hkArray<struct CollisionDetail> m_collisionDetails; //+nosave
  81. public:
  82. hkpSimpleShapePhantom( class hkFinishLoadedObjectFlag flag ) : hkpShapePhantom( flag ) {}
  83. //
  84. // INTERNAL USE ONLY
  85. //
  86. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RW] );
  87. virtual void deallocateInternalArrays();
  88. public:
  89. /// False if the array of collisionDetails has changed since we last sorted it.
  90. hkBool m_orderDirty; //+nosave
  91. /// Order relation on m_collisionDetails.
  92. class OrderByUid;
  93. };
  94. #include <Physics/Dynamics/Phantom/hkpSimpleShapePhantom.inl>
  95. #endif //HK_DYNAMICS2_SIMPLE_SHAPE_PHANTOM_H
  96. /*
  97. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  98. * Confidential Information of Havok.  (C) Copyright 1999-2009
  99. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  100. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  101. * rights, and intellectual property rights in the Havok software remain in
  102. * Havok and/or its suppliers.
  103. * Use of this software for evaluation purposes is subject to and indicates
  104. * acceptance of the End User licence Agreement for this product. A copy of
  105. * the license is included with this software and is also available at www.havok.com/tryhavok.
  106. */