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

其他游戏

开发平台:

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_AGENT3_COLLECTION_MACHINE_H
  9. #define HK_COLLIDE2_AGENT3_COLLECTION_MACHINE_H
  10. #include <Physics/Internal/Collide/Agent3/hkpAgent3.h>
  11. #include <Physics/Collide/Dispatch/Agent3Bridge/hkpAgent3Bridge.h>
  12. #include <Physics/Internal/Collide/Agent3/Machine/Nn/hkpAgentNnTrack.h>
  13. class hkpLinkedCollidable;
  14. struct hkpAgentNnMachinePaddedEntry: hkpAgentNnEntry
  15. {
  16. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CDINFO, hkpAgentNnMachinePaddedEntry );
  17. #if HK_POINTER_SIZE == 4
  18. hkUint32 m_padOutTo16BytesAlignment[2];
  19. #else // HK_POINTER_SIZE == 8
  20. hkUint32 m_padOutTo16BytesAlignment[2];
  21. #endif
  22. };
  23. struct hkpAgentNnMachineTimEntry: hkpAgentNnEntry
  24. {
  25. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CDINFO, hkpAgentNnMachineTimEntry );
  26. hkTime     m_timeOfSeparatingNormal; // only used if tims are enabled
  27. hkVector4  m_separatingNormal;
  28. };
  29. # define HK_FOR_ALL_AGENT_ENTRIES_BEGIN( TRACK, ENTRY )
  30. {
  31. for (int HKLOOP_sectorIndex = 0; HKLOOP_sectorIndex < TRACK.m_sectors.getSize(); )
  32.     {
  33.     hkpAgentNnSector* HKLOOP_currentSector = TRACK.m_sectors[HKLOOP_sectorIndex];
  34.     hkpAgentNnEntry* ENTRY = HKLOOP_currentSector->getBegin();
  35.     HKLOOP_sectorIndex++;
  36.     hkpAgentNnEntry* HKLOOP_endEntry =  (HKLOOP_sectorIndex == TRACK.m_sectors.getSize()) ?
  37.     hkAddByteOffset(ENTRY, TRACK.m_bytesUsedInLastSector) : HKLOOP_currentSector->getEnd();
  38.     for( ; ENTRY < HKLOOP_endEntry; ENTRY = hkAddByteOffset( ENTRY, ENTRY->m_size ) )
  39.      {
  40. #define HK_FOR_ALL_AGENT_ENTRIES_END } } }
  41. extern "C"
  42. {
  43. void HK_CALL hkAgentNnMachine_DestroyTrack( hkpAgentNnTrack& track, hkpCollisionDispatcher* dispatch );
  44. void HK_CALL hkAgentNnMachine_GetAgentType( const hkpCdBody* cdBodyA, const hkpCdBody* cdBodyB, const hkpProcessCollisionInput& input, int& agentTypeOut, int& isFlippedOut );
  45. hkpAgentNnEntry* HK_CALL hkAgentNnMachine_CreateAgent( hkpAgentNnTrack& track, hkpLinkedCollidable* collA, const hkpCdBody* firstNonTransformBodyA, hkpLinkedCollidable* collB, const hkpCdBody* firstNonTransformBodyB, hkUchar cdBodyHasTransformFlag, int agentType, const hkpProcessCollisionInput& input, hkpContactMgr* mgr );
  46. void HK_CALL hkAgentNnMachine_DestroyAgent( hkpAgentNnTrack& track, hkpAgentNnEntry* entry, hkpCollisionDispatcher* dispatch, hkCollisionConstraintOwner& constraintOwner );
  47. void HK_CALL hkAgentNnMachine_AppendTrack( hkpAgentNnTrack& track, hkpAgentNnTrack& appendee);
  48. void HK_CALL hkAgentNnMachine_UpdateShapeCollectionFilter( hkpAgentNnEntry* entry, const hkpCollisionInput& input, hkCollisionConstraintOwner& constraintOwner );
  49. //
  50. // processing
  51. //
  52. void HK_CALL hkAgentNnMachine_ProcessAgent( hkpAgentNnEntry* entry, const hkpProcessCollisionInput& input, hkpProcessCollisionOutput& output, hkpContactMgr* mgr );
  53. // process a track, stops if out of memory
  54. void HK_CALL hkAgentNnMachine_ProcessTrack( class hkpConstraintOwner* owner, hkpAgentNnTrack& track, const hkpProcessCollisionInput& input );
  55. void HK_CALL hkAgentNnMachine_InternalDeallocateEntry(hkpAgentNnTrack& track, hkpAgentNnEntry* entry);
  56. // ALSO FOR EXTERNAL USE
  57. /// Makes a copy of the entry in the destTrack and redirects all pointers to entry to the new copy.
  58. /// Does not touch the entry. In the end, no pointers will point to the original entry
  59. hkpAgentNnEntry* HK_CALL hkAgentNnMachine_CopyAndRelinkAgentEntry( hkpAgentNnTrack& destTrack, hkpAgentNnEntry* entry );
  60. hkpAgentNnEntry* HK_CALL hkAgentNnMachine_FindAgent( const hkpLinkedCollidable* collA, const hkpLinkedCollidable* collB );
  61. // activation/deactiation/setPositionOnEntity
  62. void HK_CALL hkAgentNnMachine_InvalidateTimInAgent( hkpAgentNnEntry* entry, const hkpCollisionInput& input );
  63. void HK_CALL hkAgentNnMachine_WarpTimeInAgent( hkpAgentNnEntry* entry, hkTime oldTime, hkTime newTime, const hkpCollisionInput& input );
  64. //
  65. // Debugging
  66. //
  67. void HK_CALL hkAgentNnMachine_AssertTrackValidity( hkpAgentNnTrack& track );
  68. //
  69. // UNDONE
  70. //
  71. void HK_CALL hkAgentNnMachine_TouchAgent( hkpAgentEntry* entry, const hkpProcessCollisionInput& input );
  72. const hkpCdBody* HK_CALL hkAgentMachine_processTransformedShapes(const hkpCdBody* cdBody, hkpCdBody* newCdBodies, class hkMotionState* newMotionStates, int numSlots, hkPadSpu<hkUchar>& cdBodyHasTransformFlag);
  73. }
  74. #endif // HK_COLLIDE2_AGENT3_COLLECTION_MACHINE_H
  75. /*
  76. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  77. * Confidential Information of Havok.  (C) Copyright 1999-2009
  78. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  79. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  80. * rights, and intellectual property rights in the Havok software remain in
  81. * Havok and/or its suppliers.
  82. * Use of this software for evaluation purposes is subject to and indicates
  83. * acceptance of the End User licence Agreement for this product. A copy of
  84. * the license is included with this software and is also available at www.havok.com/tryhavok.
  85. */