hkpProcessCollisionOutput.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_PROCESS_COLLISION_OUTPUT_H
  9. #define HK_COLLIDE2_PROCESS_COLLISION_OUTPUT_H
  10. #include <Physics/Collide/Agent/hkpProcessCollisionData.h>
  11. class hkpContactMgr;
  12. // this is a copied version from the hkAgent3.h file
  13. # define HK_1N_MACHINE_SUPPORTS_WELDING 
  14. /// A structure used by the hkCollisionAgents to output their result
  15. struct hkpProcessCollisionOutput: public hkpProcessCollisionData
  16. {
  17. public:
  18. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_AGENT, hkpProcessCollisionOutput);
  19. inline hkpProcessCollisionOutput(hkCollisionConstraintOwner* owner): hkpProcessCollisionData(owner){}
  20. /// before calling a collision agent we have to reset all values
  21. inline void reset()
  22. {
  23. m_firstFreeContactPoint = &m_contactPoints[0];
  24. m_toi.m_time = HK_REAL_MAX;
  25. #if defined(HK_1N_MACHINE_SUPPORTS_WELDING)
  26. m_potentialContacts = HK_NULL;
  27. #endif
  28. }
  29. /// Reserve N contact points in this structure
  30. inline hkpProcessCdPoint* reserveContactPoints( int numberOfPoints=1 )
  31. {
  32. return m_firstFreeContactPoint;
  33. }
  34. /// If we want to make N reserved contact points permanent, we have to call 
  35. /// commitContactPoints(N) 
  36. inline void commitContactPoints( int numberOfPoints=1 )
  37. {
  38. m_firstFreeContactPoint= m_firstFreeContactPoint + numberOfPoints;
  39. HK_ASSERT2( 0xf0100101, m_firstFreeContactPoint < &m_contactPoints[HK_MAX_CONTACT_POINT], "ContactPoint Overflow in hkpProcessCollisionOutput");
  40. }
  41. /// If we want to discard N reserved contact points we have to call abortContactPoints(N)
  42. inline void abortContactPoints( int numberOfPoints=1 )
  43. {
  44. }
  45. //
  46. // For hkAgent3 welding technology
  47. //
  48. public:
  49. struct ContactRef 
  50. {
  51. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpProcessCollisionOutput::ContactRef );
  52. hkpProcessCdPoint* m_contactPoint;
  53. hkpAgentEntry* m_agentEntry;
  54. void*     m_agentData; // see hkAgent3.h
  55. };
  56. /// Internal welding data:<br>
  57. /// All agents have to report all existing and new point in the m_contactPoints array.
  58. /// If a contact point is new, an entry should be added to the m_potentialContacts array
  59. /// (and m_firstFreePotentialContact incremented).<br>
  60. /// If a contact point might to be useful as a reference point for welding, a pointer
  61. /// to this contact point should be added to the m_representativeContacts array 
  62. /// (and m_firstFreeRepresentativeContact incremented).
  63. struct PotentialInfo
  64. {
  65. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpProcessCollisionOutput::PotentialInfo );
  66. void reset()
  67. m_firstFreePotentialContact      = &m_potentialContacts[0];
  68. m_firstFreeRepresentativeContact = &m_representativeContacts[0];
  69. }
  70. /// A pointer pointing just past the last used element in m_potentialContacts
  71. ContactRef*        m_firstFreePotentialContact;
  72. /// A pointer pointing just past the last used element in m_representativeContacts
  73. hkpProcessCdPoint** m_firstFreeRepresentativeContact;
  74. /// A list of contact points which can be used as a reference contact points
  75. hkpProcessCdPoint*  m_representativeContacts[ HK_MAX_CONTACT_POINT ];
  76. /// A list of potential or new contacts, used for hkAgent3 welding technology
  77. ContactRef         m_potentialContacts[ HK_MAX_CONTACT_POINT ];
  78. };
  79. public:
  80. #if defined(HK_1N_MACHINE_SUPPORTS_WELDING)
  81. /// An optional pointer to a PotentialInfo welding information
  82. hkPadSpu<PotentialInfo*>    m_potentialContacts;
  83. #endif
  84. };
  85. #endif // HK_COLLIDE2_PROCESS_COLLISION_OUTPUT_H
  86. /*
  87. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  88. * Confidential Information of Havok.  (C) Copyright 1999-2009
  89. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  90. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  91. * rights, and intellectual property rights in the Havok software remain in
  92. * Havok and/or its suppliers.
  93. * Use of this software for evaluation purposes is subject to and indicates
  94. * acceptance of the End User licence Agreement for this product. A copy of
  95. * the license is included with this software and is also available at www.havok.com/tryhavok.
  96. */