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

其他游戏

开发平台:

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. inline hkpEntity* hkpConstraintInstance::getEntityA() const
  9. {
  10. return m_entities[0];
  11. }
  12. inline hkpEntity* hkpConstraintInstance::getEntity( int index ) const
  13. {
  14. return m_entities[index];
  15. }
  16. inline hkpEntity* hkpConstraintInstance::getEntityB() const
  17. {
  18. return m_entities[1];
  19. }
  20. inline hkpRigidBody* hkpConstraintInstance::getRigidBodyA() const
  21. {
  22. return reinterpret_cast<hkpRigidBody*>(m_entities[0]);
  23. }
  24. inline hkpRigidBody* hkpConstraintInstance::getRigidBodyB() const
  25. {
  26. return reinterpret_cast<hkpRigidBody*>(m_entities[1]);
  27. }
  28. inline hkpEntity* hkConstraintInternal::getMasterEntity() const
  29. {
  30. return m_entities[m_whoIsMaster];
  31. }
  32. inline hkpEntity* hkConstraintInternal::getSlaveEntity() const
  33. {
  34. return m_entities[1-m_whoIsMaster];
  35. }
  36. inline hkpEntity* hkpConstraintInstance::getMasterEntity() const
  37. {
  38. HK_ASSERT2( 0xf056d145, m_internal, "You cannot access the master entity, this constraint is not added to the world yet" );
  39. return m_internal->getMasterEntity();
  40. }
  41. inline hkpEntity* hkpConstraintInstance::getSlaveEntity() const
  42. {
  43. HK_ASSERT2( 0xf056d145, m_internal, "You cannot access the slave entity, this constraint is not added to the world yet" );
  44. return m_internal->getSlaveEntity();
  45. }
  46. inline void hkpConstraintInstance::setWantRuntime( hkBool b )
  47. {
  48. HK_ASSERT2( 0xf03de567, HK_NULL == m_owner, "You cannot call setWantRuntime after you have added the constraint to the world" );
  49. m_wantRuntime = b;
  50. }
  51. inline hkBool hkpConstraintInstance::getWantRuntime() const
  52. {
  53. return m_wantRuntime;
  54. }
  55. inline hkpEntity* hkConstraintInternal::getOtherEntity( const hkpEntity* entity ) const
  56. {
  57. hkUlong a = hkUlong( m_entities[0] );
  58. hkUlong b = hkUlong( m_entities[1] );
  59. hkUlong c = hkUlong( entity );
  60. return reinterpret_cast<hkpEntity*>( a^b^c );
  61. }
  62. inline hkpConstraintOwner* hkpConstraintInstance::getOwner() const
  63. {
  64. return m_owner;
  65. }
  66. void hkpConstraintInstance::setOwner( hkpConstraintOwner* owner )
  67. {
  68. m_owner = owner;
  69. }
  70. inline const hkpConstraintData* hkpConstraintInstance::getData() const
  71. {
  72. return m_data;
  73. }
  74. inline hkpConstraintData* hkpConstraintInstance::getDataRw() const
  75. {
  76. return m_data;
  77. }
  78. inline hkConstraintInternal* hkpConstraintInstance::getInternal()
  79. {
  80. HK_ASSERT2( 0xf056d145, m_internal, "You cannot access internal, this constraint is not added to the world yet" );
  81. return m_internal;
  82. }
  83. inline hkpConstraintRuntime* hkpConstraintInstance::getRuntime() const
  84. {
  85. HK_ASSERT2( 0xf056d145, m_internal, "You cannot access internal, this constraint is not added to the world yet" );
  86. return m_internal->m_runtime;
  87. }
  88. inline hkUlong hkpConstraintInstance::getUserData() const
  89. {
  90. return m_userData;
  91. }
  92. inline void hkpConstraintInstance::setUserData( hkUlong data )
  93. {
  94. //HK_ACCESS_CHECK_WITH_PARENT( m_entities[0]->getWorld(), HK_ACCESS_IGNORE, this, HK_ACCESS_RW );
  95. m_userData = data;
  96. }
  97. inline const char* hkpConstraintInstance::getName() const
  98. {
  99. return m_name;
  100. }
  101. inline void hkpConstraintInstance::setName( const char* name )
  102. {
  103. m_name = name;
  104. }
  105. inline hkpConstraintInstance::ConstraintPriority hkpConstraintInstance::getPriority() const
  106. {
  107. return m_priority;
  108. }
  109. inline hkpEntity* hkpConstraintInstance::getOtherEntity( const hkpEntity* entity ) const
  110. {
  111. return hkSelectOther( const_cast<hkpEntity*>(entity), m_entities[0], m_entities[1]);
  112. }
  113. void hkConstraintInternal::getConstraintInfo( hkpConstraintInfo& info ) const
  114. {
  115. info.m_maxSizeOfSchema     = m_sizeOfSchemas;
  116. info.m_sizeOfSchemas       = m_sizeOfSchemas;
  117. info.m_numSolverResults    = m_numSolverResults;
  118. info.m_numSolverElemTemps  = m_numSolverElemTemps;
  119. }
  120. void hkConstraintInternal::clearConstraintInfo( )
  121. {
  122. this->m_numSolverResults = 0;
  123. this->m_numSolverElemTemps = 0;
  124. this->m_sizeOfSchemas    = 0;
  125. }
  126. void hkConstraintInternal::addConstraintInfo( const hkpConstraintInfo& delta)
  127. {
  128. const hkUint32 numSolverResults   = this->m_numSolverResults   + delta.m_numSolverResults;
  129. const hkUint32 numSolverElemTemps = this->m_numSolverElemTemps + delta.m_numSolverElemTemps;
  130. const hkUint32 sizeOfSchemas      = this->m_sizeOfSchemas      + delta.m_sizeOfSchemas;
  131. HK_ASSERT2( 0xf0ff3244, numSolverResults < 0x10000, "Constraint too big for system" );
  132. HK_ASSERT2( 0xf0ff3244, numSolverElemTemps < 0x10000, "Constraint too big for system" );
  133. HK_ASSERT2( 0xf0ff3246, sizeOfSchemas    < 0x10000, "Constraint too big for system" );
  134. this->m_numSolverResults   = hkUint16(numSolverResults);
  135. this->m_numSolverElemTemps = hkUint16(numSolverElemTemps);
  136. this->m_sizeOfSchemas      = hkUint16(sizeOfSchemas);
  137. }
  138. void hkConstraintInternal::subConstraintInfo( const hkpConstraintInfo& delta)
  139. {
  140. const hkUint32 numSolverResults   = this->m_numSolverResults   - delta.m_numSolverResults;
  141. const hkUint32 numSolverElemTemps = this->m_numSolverElemTemps - delta.m_numSolverElemTemps;
  142. const hkUint32 sizeOfSchemas      = this->m_sizeOfSchemas      - delta.m_sizeOfSchemas;
  143. HK_ASSERT2( 0xf0fe3244, numSolverResults < 0x10000, "Constraint internal inconsistency" );
  144. HK_ASSERT2( 0xf0fe3244, numSolverElemTemps < 0x10000, "Constraint internal inconsistency" );
  145. HK_ASSERT2( 0xf0fe3246, sizeOfSchemas    < 0x10000, "Constraint internal inconsistency" );
  146. this->m_numSolverResults = hkUint16(numSolverResults);
  147. this->m_numSolverElemTemps = hkUint16(numSolverElemTemps);
  148. this->m_sizeOfSchemas    = hkUint16(sizeOfSchemas);
  149. }
  150. /*
  151. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  152. * Confidential Information of Havok.  (C) Copyright 1999-2009
  153. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  154. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  155. * rights, and intellectual property rights in the Havok software remain in
  156. * Havok and/or its suppliers.
  157. * Use of this software for evaluation purposes is subject to and indicates
  158. * acceptance of the End User licence Agreement for this product. A copy of
  159. * the license is included with this software and is also available at www.havok.com/tryhavok.
  160. */