hkpRagdollLimitsData.inl
上传用户: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. /// Methods to set and get angle limits and friction
  9. ////////////////////////////////////////////////////////////////////////////////////////////////
  10. inline void hkpRagdollLimitsData::setTwistMinAngularLimit(hkReal rad)
  11. {
  12. m_atoms.m_twistLimit.m_minAngle = rad;
  13. }
  14. ////////////////////////////////////////////////////////////////////////////////////////////////
  15. inline void hkpRagdollLimitsData::setTwistMaxAngularLimit(hkReal rad)
  16. {
  17. m_atoms.m_twistLimit.m_maxAngle = rad;
  18. }
  19. ////////////////////////////////////////////////////////////////////////////////////////////////
  20. inline void hkpRagdollLimitsData::setPlaneMaxAngularLimit(hkReal rad)
  21. {
  22. m_atoms.m_planesLimit.m_maxAngle = rad;
  23. }
  24. ////////////////////////////////////////////////////////////////////////////////////////////////
  25. inline void hkpRagdollLimitsData::setPlaneMinAngularLimit(hkReal rad)
  26. {
  27. m_atoms.m_planesLimit.m_minAngle = rad;
  28. }
  29. ////////////////////////////////////////////////////////////////////////////////////////////////
  30. inline void hkpRagdollLimitsData::setConeAngularLimit(hkReal rad)
  31. {
  32. m_atoms.m_coneLimit.m_maxAngle = rad;
  33. }
  34. ///////////////////////////////////////////////////////////////////////////////////////////////
  35. inline hkReal hkpRagdollLimitsData::getTwistMinAngularLimit() const
  36. {
  37. return m_atoms.m_twistLimit.m_minAngle;
  38. }
  39. ////////////////////////////////////////////////////////////////////////////////////////////////
  40. inline hkReal hkpRagdollLimitsData::getTwistMaxAngularLimit() const
  41. {
  42. return m_atoms.m_twistLimit.m_maxAngle;
  43. }
  44. ////////////////////////////////////////////////////////////////////////////////////////////////
  45. inline hkReal hkpRagdollLimitsData::getPlaneMaxAngularLimit() const
  46. {
  47. return m_atoms.m_planesLimit.m_maxAngle;
  48. }
  49. ////////////////////////////////////////////////////////////////////////////////////////////////
  50. inline hkReal hkpRagdollLimitsData::getPlaneMinAngularLimit() const
  51. {
  52. return m_atoms.m_planesLimit.m_minAngle;
  53. }
  54. ////////////////////////////////////////////////////////////////////////////////////////////////
  55. inline hkReal hkpRagdollLimitsData::getConeAngularLimit() const
  56. {
  57. return m_atoms.m_coneLimit.m_maxAngle;
  58. }
  59. ////////////////////////////////////////////////////////////////////////////////////////////////
  60. inline hkBool hkpRagdollLimitsData::getConeLimitStabilization() const
  61. {
  62. return 0 != m_atoms.m_coneLimit.m_memOffsetToAngleOffset;
  63. }
  64. ////////////////////////////////////////////////////////////////////////////////////////////////
  65. inline void hkpRagdollLimitsData::setAsymmetricConeAngle( hkReal cone_min, hkReal cone_max )
  66. {
  67. hkReal center_cone = (cone_max + cone_min) * 0.5f;
  68. hkReal diff_cone   = (cone_max - cone_min) * 0.5f;
  69. hkRotation& baseB = m_atoms.m_rotations.m_rotationB;
  70. hkQuaternion baseModificationB( baseB.getColumn(Atoms::AXIS_PLANES), -center_cone );
  71. baseB.getColumn(Atoms::AXIS_TWIST).setRotatedDir( baseModificationB, baseB.getColumn(Atoms::AXIS_TWIST) );
  72. baseB.getColumn(Atoms::AXIS_CROSS_PRODUCT).setCross( baseB.getColumn(Atoms::AXIS_TWIST), baseB.getColumn(Atoms::AXIS_PLANES) );
  73. HK_ASSERT2(0xad67ddaa, baseB.isOrthonormal(), "Base B is not orthonormal");
  74. setConeAngularLimit( diff_cone );
  75. }
  76. ////////////////////////////////////////////////////////////////////////////////////////////////
  77. inline void hkpRagdollLimitsData::setAngularLimitsTauFactor( hkReal mag )
  78. {
  79. m_atoms.m_twistLimit.m_angularLimitsTauFactor  = mag;
  80. m_atoms.m_coneLimit.m_angularLimitsTauFactor   = mag;
  81. m_atoms.m_planesLimit.m_angularLimitsTauFactor = mag;
  82. }
  83. inline hkReal hkpRagdollLimitsData::getAngularLimitsTauFactor() const
  84. {
  85. if (m_atoms.m_twistLimit.m_angularLimitsTauFactor != m_atoms.m_coneLimit.m_angularLimitsTauFactor
  86. || m_atoms.m_twistLimit.m_angularLimitsTauFactor != m_atoms.m_planesLimit.m_angularLimitsTauFactor)
  87. {
  88. HK_WARN(0xad6ddbbe, "TauFactor for varies for individual limits of a hkpRagdollConstraintData");
  89. }
  90. return m_atoms.m_twistLimit.m_angularLimitsTauFactor;
  91. }
  92. hkpRagdollLimitsData::hkpRagdollLimitsData(hkFinishLoadedObjectFlag f) : hkpConstraintData(f), m_atoms(f) 
  93. {
  94. if (f.m_finishing && getConeLimitStabilization())
  95. {
  96. // Ensure the offset is correct
  97. setConeLimitStabilization(true);
  98. }
  99. }
  100. /*
  101. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  102. * Confidential Information of Havok.  (C) Copyright 1999-2009
  103. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  104. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  105. * rights, and intellectual property rights in the Havok software remain in
  106. * Havok and/or its suppliers.
  107. * Use of this software for evaluation purposes is subject to and indicates
  108. * acceptance of the End User licence Agreement for this product. A copy of
  109. * the license is included with this software and is also available at www.havok.com/tryhavok.
  110. */