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

其他游戏

开发平台:

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_CONTACT_COLLECTOR
  9. #define HK_CONTACT_COLLECTOR
  10. #include <Common/Base/hkBase.h>
  11. #include <Physics/Dynamics/Collide/hkpCollisionListener.h>
  12. #include <Physics/Dynamics/Entity/hkpEntityListener.h>
  13. class hkpRigidBody;
  14. /// This class collects all contact points for a specified entity.n
  15. /// For this class to work successfully, hkpEntity::m_processContactCallbackDelay (or
  16. /// hkpRigidBodyCinfo::m_processContactCallbackDelay) should be set to 0.
  17. class hkpEntityContactCollector : private hkpCollisionListener, private hkpEntityListener
  18. {
  19. public:
  20. /*
  21. ** public classes
  22. */
  23. struct ContactPoint
  24. {
  25. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_UTILITIES, hkpEntityContactCollector::ContactPoint );
  26. hkContactPoint m_point;
  27. hkpRigidBody* m_bodyA;
  28. hkpRigidBody* m_bodyB;
  29. };
  30. public:
  31. virtual ~hkpEntityContactCollector();
  32. /// Gets all contact points
  33. const hkArray<ContactPoint>& getContactPoints(){ return m_contactPoints; }
  34. /// Flips contact points (normal and bodies), so that bodyA is always refBody
  35. void flipContactPoints( hkpRigidBody* refBody );
  36. /// Resets all contact points
  37. void reset();
  38. /// Adds the contact collector as a listener to an entity. This also stores a reference to the entity
  39. /// to allow it to remove itself as a listener on destruction.
  40. void addToEntity( hkpEntity* entity );
  41. /// Removes the contact collector from the entity. 
  42. void removeFromEntity( hkpEntity* entity );
  43. protected:
  44. // the hkpCollisionListener interface implementation
  45. virtual void contactPointAddedCallback(   hkpContactPointAddedEvent& event);
  46. // the hkpCollisionListener interface implementation
  47. virtual void contactPointRemovedCallback( hkpContactPointRemovedEvent& event);
  48. // the hkpCollisionListener interface implementation
  49. virtual void contactPointConfirmedCallback( hkpContactPointConfirmedEvent& event);
  50. // the hkpCollisionListener interface implementation
  51. virtual void contactProcessCallback( hkpContactProcessEvent& event);
  52. // hkpEntityListener interface implementation
  53. virtual void entityDeletedCallback( hkpEntity* entity );
  54. protected:
  55. hkArray<ContactPoint> m_contactPoints;
  56. hkInplaceArray<hkpEntity*, 1> m_entities;
  57. };
  58. #endif // HK_CONTACT_COLLECTOR
  59. /*
  60. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  61. * Confidential Information of Havok.  (C) Copyright 1999-2009
  62. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  63. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  64. * rights, and intellectual property rights in the Havok software remain in
  65. * Havok and/or its suppliers.
  66. * Use of this software for evaluation purposes is subject to and indicates
  67. * acceptance of the End User licence Agreement for this product. A copy of
  68. * the license is included with this software and is also available at www.havok.com/tryhavok.
  69. */