hkpCollisionQueryUtil.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. HK_FORCE_INLINE hkpWorldRayCastOutputPpu* hkpShapeRayCastJobUtil::getNextFreeResult(hkpShapeRayCastCommand* command, hkpWorldRayCastOutputPpu* resultsArray, hkpWorldRayCastOutputPpu*& nextFreeResult, hkReal hitFraction)
  9. {
  10. hkpWorldRayCastOutputPpu* resultToReturn = HK_NULL;
  11. // check if there's still room left in the array for the new results or if we have to evict the furthest hit
  12. if ( command->m_numResultsOut < command->m_resultsCapacity )
  13. {
  14. resultToReturn = nextFreeResult;
  15. command->m_numResultsOut++;
  16. nextFreeResult = nextFreeResult + 1;
  17. }
  18. else
  19. {
  20. hkpWorldRayCastOutputPpu* furthestHit = resultsArray;
  21. hkpWorldRayCastOutputPpu* currentHitInArray = resultsArray + 1;
  22. //
  23. // search for the furthest hit
  24. //
  25. {
  26. for (int i = 1; i < command->m_numResultsOut; i++)
  27. {
  28. if ( currentHitInArray->m_hitFraction > furthestHit->m_hitFraction )
  29. {
  30. furthestHit = currentHitInArray;
  31. }
  32. currentHitInArray++;
  33. }
  34. }
  35. if ( hitFraction < furthestHit->m_hitFraction )
  36. {
  37. resultToReturn = furthestHit;
  38. }
  39. }
  40. return resultToReturn;
  41. }
  42. HK_FORCE_INLINE hkpWorldRayCastOutputPpu* hkpWorldRayCastJobUtil::getNextFreeResult(hkpWorldRayCastCommand* command, hkpWorldRayCastOutputPpu* resultsArray, hkPadSpu<hkpWorldRayCastOutputPpu*>& nextFreeResult, hkReal hitFraction)
  43. {
  44. hkpWorldRayCastOutputPpu* resultToReturn = HK_NULL;
  45. // check if there's still room left in the array for the new results or if we have to evict the furthest hit
  46. if ( command->m_numResultsOut < command->m_resultsCapacity )
  47. {
  48. resultToReturn = nextFreeResult;
  49. command->m_numResultsOut++;
  50. nextFreeResult = nextFreeResult + 1;
  51. }
  52. else
  53. {
  54. hkpWorldRayCastOutputPpu* furthestHit = resultsArray;
  55. hkpWorldRayCastOutputPpu* currentHitInArray = resultsArray + 1;
  56. //
  57. // search for the furthest hit
  58. //
  59. {
  60. for (int i = 1; i < command->m_numResultsOut; i++)
  61. {
  62. if ( currentHitInArray->m_hitFraction > furthestHit->m_hitFraction )
  63. {
  64. furthestHit = currentHitInArray;
  65. }
  66. currentHitInArray++;
  67. }
  68. }
  69. if ( hitFraction < furthestHit->m_hitFraction )
  70. {
  71. resultToReturn = furthestHit;
  72. }
  73. }
  74. return resultToReturn;
  75. }
  76. /*
  77. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  78. * Confidential Information of Havok.  (C) Copyright 1999-2009
  79. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  80. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  81. * rights, and intellectual property rights in the Havok software remain in
  82. * Havok and/or its suppliers.
  83. * Use of this software for evaluation purposes is subject to and indicates
  84. * acceptance of the End User licence Agreement for this product. A copy of
  85. * the license is included with this software and is also available at www.havok.com/tryhavok.
  86. */