hkpContactMgr.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_CONTACT_MGR_H
  9. #define HK_COLLIDE2_CONTACT_MGR_H
  10. struct hkpProcessCdPoint;
  11. struct hkpProcessCollisionData;
  12. class hkpCdBody;
  13. struct hkpProcessCollisionInput;
  14. struct hkpProcessCollisionOutput;
  15. class hkpCollidable;
  16. class hkpGskCache;
  17. #ifndef hkCollisionConstraintOwner
  18. class hkpConstraintOwner;
  19. # define hkCollisionConstraintOwner hkpConstraintOwner
  20. #endif
  21. #include <Common/Base/Types/Physics/ContactPoint/hkContactPoint.h>
  22. #include <Physics/ConstraintSolver/Constraint/Contact/hkpContactPointProperties.h>
  23. /// The hkpContactMgr is an interface used by a collision agent to report its results. 
  24. /// This class is used internally by hkdynamics
  25. class hkpContactMgr: public hkReferencedObject
  26. {
  27. public:
  28. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONTACT );
  29. enum Type
  30. {
  31. TYPE_SIMPLE_CONSTRAINT_CONTACT_MGR,
  32. TYPE_REPORT_CONTACT_MGR,
  33. TYPE_CONVEX_LIST_CONTACT_MGR,
  34. TYPE_NULL_CONTACT_MGR,
  35. TYPE_USER_CONTACT_MGR,
  36. TYPE_MAX
  37. };
  38. enum ToiAccept
  39. {
  40. TOI_ACCEPT = 0,
  41. TOI_REJECT = 1
  42. };
  43. hkpContactMgr( Type type ): m_type(type){}
  44. /// Add a new contact point. This should return an unique and persistent id for that point
  45. /// See hkpCollisionListener for further details.
  46. HK_FORCE_INLINE hkContactPointId addContactPoint( const hkpCdBody& a, const hkpCdBody& b, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& output, const hkpGskCache* contactCache, hkContactPoint& cp );
  47. /// reserve a number of contact points, if you want to release those reserve
  48. /// contact points, just call this function with a negative parameter
  49. /// Note: if this function fails, no contact points have been reserved.
  50. /// See hkpCollisionListener for further details.
  51. HK_FORCE_INLINE hkResult reserveContactPoints( int numPoints );
  52. /// Removes a contact point with a given id (given by addContactPoint)
  53. /// See hkpCollisionListener for further details.
  54. HK_FORCE_INLINE void removeContactPoint( hkContactPointId cpId, hkCollisionConstraintOwner& constraintOwner );
  55. /// After all agents between a given pair of hkCollidables are called, all information
  56. /// is passed to process contact. See hkpCollisionListener for further details.
  57. HK_FORCE_INLINE void processContact( const hkpCollidable& a, const hkpCollidable& b, const hkpProcessCollisionInput& input, hkpProcessCollisionData& collisionData );
  58. /// Adds a potential toi and returns what to do with this toi.
  59. /// This is the only reasonable place to reject tois
  60. /// See hkpCollisionListener for further details.
  61. HK_FORCE_INLINE ToiAccept addToi( const hkpCdBody& a, const hkpCdBody& b, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& output, hkTime toi, hkContactPoint& cp, const hkpGskCache* gskCache, hkReal& projectedVelocity, hkpContactPointProperties& propertiesOut );
  62. /// Fire callbacks about a removed toi
  63. HK_FORCE_INLINE void removeToi( class hkCollisionConstraintOwner& constraintOwner, hkpContactPointProperties& properties );
  64. //
  65. // Hand coded vtable for spu
  66. //
  67. public:
  68. // we cannot define those functions to be virtual on an spu because:
  69. // - when we build the jump table, we need the address to the actual function implementation and not to the vtable call
  70. // - sadly, the compiler always takes the address to the vtable call as soon as the function is virtual (so we have make those functions non virtual)
  71. virtual hkContactPointId addContactPointImpl( const hkpCdBody& a, const hkpCdBody& b, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& output, const hkpGskCache* contactCache, hkContactPoint& cp ) = 0;
  72. virtual hkResult reserveContactPointsImpl( int numPoints ) = 0;
  73. virtual void removeContactPointImpl( hkContactPointId cpId, hkCollisionConstraintOwner& constraintOwner ) = 0;
  74. virtual void processContactImpl( const hkpCollidable& a, const hkpCollidable& b, const hkpProcessCollisionInput& input, hkpProcessCollisionData& collisionData ) = 0;
  75. virtual ToiAccept addToiImpl( const hkpCdBody& a, const hkpCdBody& b, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& output, hkTime toi, hkContactPoint& cp, const hkpGskCache* gskCache, hkReal& projectedVelocity, hkpContactPointProperties& propertiesOut ) = 0;
  76. virtual void removeToiImpl( class hkCollisionConstraintOwner& constraintOwner, hkpContactPointProperties& properties ) = 0;
  77. /// delete yourself
  78. virtual void cleanup(){}
  79. public:
  80. Type m_type;
  81. };
  82. // on spus we have to include this inl file after we include hkSimpleContactConstraintMgr.h
  83. # include <Physics/Collide/Agent/ContactMgr/hkpContactMgr.inl>
  84. #endif // HK_COLLIDE2_CONTACT_MGR_H
  85. /*
  86. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  87. * Confidential Information of Havok.  (C) Copyright 1999-2009
  88. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  89. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  90. * rights, and intellectual property rights in the Havok software remain in
  91. * Havok and/or its suppliers.
  92. * Use of this software for evaluation purposes is subject to and indicates
  93. * acceptance of the End User licence Agreement for this product. A copy of
  94. * the license is included with this software and is also available at www.havok.com/tryhavok.
  95. */