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

其他游戏

开发平台:

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. /***
  9.  *** INLINE FUNCTION DEFINITIONS
  10.  ***/
  11. template<typename AGENT>
  12. void hkpSymmetricAgentLinearCast<AGENT>::processCollision( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& result)
  13. {
  14. hkpProcessCdPoint* pp = result.m_firstFreeContactPoint;
  15. hkTime oldToi = result.m_toi.m_time;
  16. AGENT::processCollision(bodyB, bodyA, input, result);
  17. //
  18. // Flip all new normals
  19. //
  20. for ( ; pp < result.m_firstFreeContactPoint; pp++)
  21. {
  22. pp->m_contact.setFlipped( pp->m_contact );
  23. }
  24. // Flip the toi normal, if a new a toi was reported by this processCollision call
  25. if( oldToi != result.m_toi.m_time )
  26. {
  27. result.m_toi.flip();
  28. }
  29. }
  30. template<typename AGENT>
  31. void hkpSymmetricAgentLinearCast<AGENT>::getClosestPoints( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, class hkpCdPointCollector& collector ) 
  32. {
  33. hkpSymmetricAgentFlipCollector flip( collector );
  34. AGENT::getClosestPoints(bodyB , bodyA , input, flip );
  35. }
  36. template<typename AGENT>
  37. void hkpSymmetricAgentLinearCast<AGENT>::staticGetClosestPoints( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, class hkpCdPointCollector& collector ) 
  38. {
  39. hkpSymmetricAgentFlipCollector flip( collector );
  40. AGENT::staticGetClosestPoints(bodyB , bodyA , input, flip );
  41. }
  42. template<typename AGENT>
  43. void hkpSymmetricAgentLinearCast<AGENT>::getPenetrations( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, hkpCdBodyPairCollector& collector)
  44. {
  45. hkpSymmetricAgentFlipBodyCollector flip(collector);
  46. AGENT::getPenetrations(bodyB, bodyA, input, flip);
  47. }
  48. template<typename AGENT>
  49. void hkpSymmetricAgentLinearCast<AGENT>::staticGetPenetrations( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, hkpCdBodyPairCollector& collector)
  50. {
  51. hkpSymmetricAgentFlipBodyCollector flip(collector);
  52. AGENT::staticGetPenetrations(bodyB, bodyA, input, flip);
  53. }
  54. template<typename AGENT>
  55. inline hkpSymmetricAgentLinearCast<AGENT>::hkpSymmetricAgentLinearCast( const hkpCdBody& A, const hkpCdBody& B, const hkpCollisionInput& input, hkpContactMgr* mgr ) 
  56. : AGENT( B, A, input, mgr )
  57. {
  58. }
  59. template<typename AGENT>
  60. void hkpSymmetricAgentLinearCast<AGENT>::staticLinearCast( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpLinearCastCollisionInput& input, hkpCdPointCollector& collector, hkpCdPointCollector* startCollector )
  61. {
  62. hkpLinearCastCollisionInput flippedInput = input;
  63. flippedInput.m_path.setNeg4( input.m_path );
  64. hkpSymmetricAgentFlipCastCollector flip( input.m_path, collector );
  65. if ( startCollector )
  66. {
  67. hkpSymmetricAgentFlipCastCollector startFlip( input.m_path, *startCollector );
  68. AGENT::staticLinearCast(bodyB, bodyA, flippedInput, flip, &startFlip );
  69. }
  70. else
  71. {
  72. AGENT::staticLinearCast(bodyB , bodyA , flippedInput, flip, HK_NULL );
  73. }
  74. }
  75. template<typename AGENT>
  76. void hkpSymmetricAgentLinearCast<AGENT>::updateShapeCollectionFilter( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, hkCollisionConstraintOwner& constraintOwner )
  77. {
  78. AGENT::updateShapeCollectionFilter( bodyB, bodyA, input, constraintOwner );
  79. }
  80. /*
  81. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  82. * Confidential Information of Havok.  (C) Copyright 1999-2009
  83. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  84. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  85. * rights, and intellectual property rights in the Havok software remain in
  86. * Havok and/or its suppliers.
  87. * Use of this software for evaluation purposes is subject to and indicates
  88. * acceptance of the End User licence Agreement for this product. A copy of
  89. * the license is included with this software and is also available at www.havok.com/tryhavok.
  90. */