hkpCachingShapePhantom.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_CACHING_SHAPE_PHANTOM_H
  9. #define HK_DYNAMICS2_CACHING_SHAPE_PHANTOM_H
  10. #include <Physics/Dynamics/Phantom/hkpShapePhantom.h>
  11. class hkCollisionEnvironment;
  12. class hkpCollisionDispatcher;
  13. class hkpCollidable;
  14. class hkpCollisionAgent;
  15. class hkCachingShapePhantomCinfo;
  16. struct hkpLinearCastCollisionInput;
  17. struct hkpCollisionInput;
  18. class hkpCdPointCollector;
  19. class hkpCdBodyPairCollector;
  20. extern const hkClass hkpCachingShapePhantomClass;
  21. /// This class represents a phantom with an arbitrary shape for query purposes.
  22. /// Please read hkpShapePhantom and the hkpGskBaseAgent documentation first.<br>
  23. /// This implementation of hkpShapePhantom creates collision agents for all potential colliding pairs.
  24. /// It therefore uses more memory than the uncached version (hkpSimpleShapePhantom), but can perform
  25. /// collision detection functions up to 40% faster when lots of GJK/GSK agents are involved.<br>
  26. /// Note: In landscapes, caching the linear cast means converting the cast into an extended aabb
  27. /// (the original aabb of the shape plus the path).
  28. /// Therefore long linear casts can result in a huge cached aabb and many many potential triangles as
  29. /// collision partners. The hkpSimpleShapePhantom can actually use an optimized direct linear cast for mopp
  30. /// objects.
  31. class hkpCachingShapePhantom : public hkpShapePhantom 
  32. {
  33. public:
  34. HK_DECLARE_REFLECTION();
  35. /// Constructor takes a shape, a transform, and an optional collision filter info
  36. hkpCachingShapePhantom( const hkpShape* shape, const hkTransform& transform, hkUint32 m_collisionFilterInfo = 0 );
  37. ~hkpCachingShapePhantom();
  38. /// Gets the hkpPhantom type. For this class the type is HK_PHANTOM_CACHING_SHAPE
  39. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RO] );
  40. virtual hkpPhantomType getType() const;
  41. /// Implementation of hkpShapePhantom::setPositionAndLinearCast
  42. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RW] [this,HK_ACCESS_RW] );
  43. virtual void setPositionAndLinearCast( const hkVector4& position, const hkpLinearCastInput& input, hkpCdPointCollector& castCollector, hkpCdPointCollector* startCollector );
  44. /// Implementation of hkpShapePhantom::setTransformAndLinearCast
  45. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RW] [this,HK_ACCESS_RW] );
  46. virtual void setTransformAndLinearCast( const hkTransform& transform, const hkpLinearCastInput& input, hkpCdPointCollector& castCollector, hkpCdPointCollector* startCollector );
  47. /// hkpPhantom clone functionality
  48. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RO] );
  49. virtual hkpPhantom* clone() const;
  50. /// Implementation of hkpShapePhantom::getClosestPoints
  51. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RW] );
  52. void getClosestPoints( hkpCdPointCollector& collector, const hkpCollisionInput* input = HK_NULL );
  53. // Implementation of hkpShapePhantom::ensureDeterministicOrder.
  54. virtual void ensureDeterministicOrder();
  55. /// Implementation of hkpShapePhantom::getPenetrations
  56. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RW] );
  57. void getPenetrations( hkpCdBodyPairCollector& collector, const hkpCollisionInput* input = HK_NULL );
  58. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RO] );
  59. void calcContentStatistics( hkStatisticsCollector* collector, const hkClass* cls ) const;
  60. public:
  61. struct hkpCollisionDetail
  62. {
  63. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpCachingShapePhantom::hkpCollisionDetail );
  64. hkpCollisionAgent* m_agent;
  65. hkpCollidable*     m_collidable;
  66. };
  67. /// This method does not guarantee that the returned hkpCollisionDetails structure 
  68. /// is in deterministic order. To ensure determinism, proceed a call to this method
  69. /// by ensureDeterministicOrder().
  70. inline hkArray<struct hkpCollisionDetail>& getCollisionDetails();
  71. //
  72. // hkpPhantom interface
  73. //
  74. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RW] );
  75. virtual void addOverlappingCollidable( hkpCollidable* collidable );
  76. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RW] );
  77. virtual void removeOverlappingCollidable( hkpCollidable* collidable );
  78. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_IGNORE] [this,HK_ACCESS_RO] );
  79. virtual hkBool isOverlappingCollidableAdded( const hkpCollidable* collidable );
  80. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RW] );
  81. virtual void updateShapeCollectionFilter();
  82. protected:
  83. hkArray<struct hkpCollisionDetail> m_collisionDetails; //+nosave
  84. public:
  85. hkpCachingShapePhantom( class hkFinishLoadedObjectFlag flag ) : hkpShapePhantom( flag ) {}
  86. //
  87. // INTERNAL USE ONLY
  88. //
  89. /// ###ACCESS_CHECKS###( [m_world,HK_ACCESS_RO] [this,HK_ACCESS_RW] );
  90. virtual void deallocateInternalArrays();
  91. public:
  92. /// False if the array of collisionDetails has changed since we last sorted it.
  93. hkBool m_orderDirty; //+nosave
  94. /// Order relation on m_collisionDetails.
  95. class OrderByUid;
  96. };
  97. #include <Physics/Dynamics/Phantom/hkpCachingShapePhantom.inl>
  98. #endif //HK_DYNAMICS2_CACHING_SHAPE_PHANTOM_H
  99. /*
  100. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  101. * Confidential Information of Havok.  (C) Copyright 1999-2009
  102. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  103. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  104. * rights, and intellectual property rights in the Havok software remain in
  105. * Havok and/or its suppliers.
  106. * Use of this software for evaluation purposes is subject to and indicates
  107. * acceptance of the End User licence Agreement for this product. A copy of
  108. * the license is included with this software and is also available at www.havok.com/tryhavok.
  109. */