hkpDynamicsCpIdMgr.inl
上传用户: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. # define M_VALUE_GET_SIZE() m_values.getSize()
  9. # define M_VALUE_GET_VALUE(IDX) m_values[IDX]
  10. # define M_VALUE_PUSH_BACK(VALUE) m_values.pushBack(VALUE)
  11. inline hkpDynamicsCpIdMgr::hkpDynamicsCpIdMgr()
  12. {
  13. }
  14. // Returns an index into m_values[] and sets m_values[id] = value.
  15. inline int hkpDynamicsCpIdMgr::newId( int value )
  16. {
  17. for ( int i = M_VALUE_GET_SIZE()-1; i >= 0 ; i-- )
  18. {
  19. if ( M_VALUE_GET_VALUE(i) == FREE_VALUE )
  20. {
  21. M_VALUE_GET_VALUE(i) = hkpValueType(value);
  22. return i;
  23. }
  24. }
  25. M_VALUE_PUSH_BACK( hkpValueType(value) );
  26. return M_VALUE_GET_SIZE()-1;
  27. }
  28. // Finds the index of an value.
  29. inline int hkpDynamicsCpIdMgr::indexOf( int value ) const
  30. {
  31. int i;
  32. for ( i = M_VALUE_GET_SIZE()-1; i >= 0 ; i-- )
  33. {
  34. if ( M_VALUE_GET_VALUE(i) == value )
  35. {
  36. return i;
  37. }
  38. }
  39. return i;
  40. }
  41. // Adds this->m_ids[ id ] to the freelist.
  42. inline void hkpDynamicsCpIdMgr::freeId( int id )
  43. {
  44. HK_ASSERT2(0x1fd4eea3, M_VALUE_GET_VALUE(id) != FREE_VALUE, "Too many contact points in a single collision pair. The system only handles 255 contact points or less between two objects.
  45. This is probably the result of creating bad collision geometries (i.e. meshes with many triangles in the same place) or having a too large collision tolerance. 
  46. It can also result from not creating a hkpBvTreeShape about your mesh shape.");
  47. M_VALUE_GET_VALUE(id) = FREE_VALUE;
  48. }
  49. inline void hkpDynamicsCpIdMgr::decrementValuesGreater( int relIndex )
  50. {
  51. for ( int i = M_VALUE_GET_SIZE()-1; i >= 0 ; i-- )
  52. {
  53. if ( M_VALUE_GET_VALUE(i) == FREE_VALUE )
  54. {
  55. continue;
  56. }
  57. if ( M_VALUE_GET_VALUE(i) > relIndex )
  58. {
  59. M_VALUE_GET_VALUE(i) --;
  60. }
  61. }
  62. }
  63. inline void hkpDynamicsCpIdMgr::getAllUsedIds( hkArray<hkContactPointId>& ids ) const 
  64. {
  65. for ( int i = 0; i < M_VALUE_GET_SIZE(); ++i )
  66. {
  67. if ( M_VALUE_GET_VALUE(i) != FREE_VALUE )
  68. {
  69. ids.pushBack(  hkContactPointId(i)  );
  70. }
  71. }
  72. }
  73. inline hkpDynamicsCpIdMgr::hkpValueType hkpDynamicsCpIdMgr::getValueAt(int id) const
  74. {
  75. return M_VALUE_GET_VALUE(id);
  76. }
  77. /*
  78. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  79. * Confidential Information of Havok.  (C) Copyright 1999-2009
  80. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  81. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  82. * rights, and intellectual property rights in the Havok software remain in
  83. * Havok and/or its suppliers.
  84. * Use of this software for evaluation purposes is subject to and indicates
  85. * acceptance of the End User licence Agreement for this product. A copy of
  86. * the license is included with this software and is also available at www.havok.com/tryhavok.
  87. */