hkpSymmetricAgentLinearCast.h
上传用户: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. #ifndef HK_COLLIDE2_SYMMETRIC_AGENT_LINEAR_CAST_H
  9. #define HK_COLLIDE2_SYMMETRIC_AGENT_LINEAR_CAST_H
  10. #include <Physics/Collide/Agent/hkpProcessCollisionOutput.h>
  11. #include <Physics/Collide/Agent/Query/hkpCdPointCollector.h>
  12. #include <Physics/Collide/Agent/Query/hkpCdBodyPairCollector.h>
  13. class hkpCdBody;
  14. struct hkpCollisionInput;
  15. class hkpContactMgr;
  16. /// A special symmetric agent, which should be used instead of the hkpSymmetricAgent if you derive
  17. /// the agent from the hkpIterativeLinearCastAgent
  18. template<typename AGENT>
  19. class hkpSymmetricAgentLinearCast : public AGENT
  20. {
  21. public:
  22. HK_FORCE_INLINE hkpSymmetricAgentLinearCast( hkpContactMgr* mgr ): AGENT(mgr){}
  23. /// Called by the appropriate createAgent() function.
  24. HK_FORCE_INLINE hkpSymmetricAgentLinearCast( const hkpCdBody& A, const hkpCdBody& B, const hkpCollisionInput& input, hkpContactMgr* mgr );
  25. // hkpCollisionAgent interface implementation.
  26. virtual void getPenetrations( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, hkpCdBodyPairCollector& collector );
  27. // hkpCollisionAgent interface implementation.
  28. static void HK_CALL staticGetPenetrations( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, hkpCdBodyPairCollector& collector );
  29. // hkpCollisionAgent interface implementation.
  30. virtual void getClosestPoints( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, class hkpCdPointCollector& collector  ) ;
  31. // hkpCollisionAgent interface implementation.
  32. static void HK_CALL staticGetClosestPoints( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, class hkpCdPointCollector& collector  ) ;
  33. // hkpCollisionAgent interface implementation.
  34. static void HK_CALL staticLinearCast( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpLinearCastCollisionInput& input, hkpCdPointCollector& collector, hkpCdPointCollector* startCollector ); 
  35. // hkpCollisionAgent interface forward call.
  36. virtual void processCollision( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& result);
  37. // hkpCollisionAgent interface forward call.
  38. virtual void updateShapeCollectionFilter( const hkpCdBody& bodyA, const hkpCdBody& bodyB, const hkpCollisionInput& input, hkCollisionConstraintOwner& constraintOwner );
  39. };
  40. /// a private class to hkpSymmetricAgent, declared outside, as this class is not templated
  41. class hkpSymmetricAgentFlipCollector: public hkpCdPointCollector
  42. {
  43. public:
  44. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_AGENT, hkpCdPointCollector);
  45. hkpCdPointCollector& m_collector;
  46. hkpSymmetricAgentFlipCollector( hkpCdPointCollector& c): m_collector(c){}
  47. virtual void addCdPoint( const hkpCdPoint& point );
  48. };
  49. /// a private class to hkpSymmetricAgent, declared outside, as this class is not templated
  50. class hkpSymmetricAgentFlipCastCollector: public hkpCdPointCollector
  51. {
  52. public:
  53. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_AGENT, hkpSymmetricAgentFlipCastCollector);
  54. hkVector4 m_path;
  55. hkpCdPointCollector& m_collector;
  56. hkpSymmetricAgentFlipCastCollector( const hkVector4& path, hkpCdPointCollector& c): m_path(path), m_collector(c){}
  57. virtual void addCdPoint( const hkpCdPoint& point );
  58. };
  59. /// a private class to hkpSymmetricAgent, declared outside, as this class is not templated
  60. class hkpSymmetricAgentFlipBodyCollector: public hkpCdBodyPairCollector
  61. {
  62. public:
  63. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_AGENT, hkpSymmetricAgentFlipBodyCollector);
  64. hkpCdBodyPairCollector& m_collector;
  65. hkpSymmetricAgentFlipBodyCollector( hkpCdBodyPairCollector& c): m_collector(c){}
  66. virtual void addCdBodyPair( const hkpCdBody& bodyA, const hkpCdBody& bodyB);
  67. };
  68. #include <Physics/Collide/Agent/Util/Symmetric/hkpSymmetricAgentLinearCast.inl>
  69. #endif // HK_COLLIDE2_SYMMETRIC_AGENT_LINEAR_CAST_H
  70. /*
  71. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  72. * Confidential Information of Havok.  (C) Copyright 1999-2009
  73. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  74. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  75. * rights, and intellectual property rights in the Havok software remain in
  76. * Havok and/or its suppliers.
  77. * Use of this software for evaluation purposes is subject to and indicates
  78. * acceptance of the End User licence Agreement for this product. A copy of
  79. * the license is included with this software and is also available at www.havok.com/tryhavok.
  80. */