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

其他游戏

开发平台:

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 HKUTILITIES_CHARACTERCONTROL_CHARACTERPROXY_HKCHARACTERPROXYCINFO_XML_H
  9. #define HKUTILITIES_CHARACTERCONTROL_CHARACTERPROXY_HKCHARACTERPROXYCINFO_XML_H
  10. #include <Common/Base/hkBase.h>
  11. class hkpShapePhantom;
  12. /// This information is used to construct a character proxy object. 
  13. class hkpCharacterProxyCinfo
  14. {
  15. public:
  16. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_UTILITIES, hkpCharacterProxyCinfo );
  17. HK_DECLARE_REFLECTION();
  18. /// Default constructor
  19. hkpCharacterProxyCinfo()
  20. {
  21. m_position.set(0.0f, 0.0f, 0.0f);
  22. m_velocity.set(0.0f, 0.0f, 0.0f);
  23. m_dynamicFriction = 1.0f;
  24. m_staticFriction = 0.0f;
  25. m_keepContactTolerance = 0.1f;
  26. m_up.set(0.0f, 1.0f, 0.0f);
  27. m_extraUpStaticFriction = 0.0f;
  28. m_extraDownStaticFriction = 0.0f;
  29. m_shapePhantom = HK_NULL;
  30. m_keepDistance = 0.05f;
  31. m_contactAngleSensitivity = 10.0f;
  32. m_userPlanes = 4;
  33. m_maxCharacterSpeedForSolver = 10;
  34. m_characterStrength = HK_REAL_MAX;
  35. m_characterMass = 0;
  36. m_maxSlope = HK_REAL_PI * .5f;
  37. m_penetrationRecoverySpeed = 1.0f;
  38. m_maxCastIterations = 10;
  39. m_refreshManifoldInCheckSupport = false;
  40. }
  41. //
  42. // Members
  43. //
  44. public:
  45. /// The initial position for the proxy in world space. 
  46. hkVector4 m_position;
  47. /// The initial velocity for the proxy in world space. 
  48. hkVector4 m_velocity;
  49. /// Controls the default dynamic friction for surfaces hit. A value of 0
  50. /// maintains character momentum. A value of 1 clips all momentum against the normal
  51. /// of the surface hit. 
  52. hkReal m_dynamicFriction;
  53. /// Controls the default static friction for surfaces hit 
  54. hkReal m_staticFriction;
  55. /// This parameter is used to determine when a contact point should be considered
  56. /// as part of the character's contact manifold.  The default is 0.1f, which means
  57. /// that points .1 above the keep distance will be considered as part of the manifold.
  58. /// This value should be kept at the its default, as changing it from the default 
  59. /// value can have undesirable effects.
  60. hkReal m_keepContactTolerance;
  61. /// Friction is split into horizontal and vertical components. This vector is used
  62. /// to separate the components. In general it should be a normalized, negated version
  63. /// of gravity. 
  64. hkVector4 m_up;
  65. /// This parameter has been deprecated. It was intended to limit the maximum slope
  66. /// on which a character can walk. Now use m_maxSlope instead.
  67. hkReal m_extraUpStaticFriction;
  68. /// This parameter has been deprecated. It was intended to limit the maximum slope
  69. /// on which a character can walk. Now use m_maxSlope instead.
  70. hkReal m_extraDownStaticFriction;
  71. /// The collision detection representation for this entity.
  72. hkpShapePhantom * m_shapePhantom;
  73. /// Attempt to keep the character at least this distance from the surface. Used
  74. /// internally for numerical stability and performance reasons. 
  75. hkReal m_keepDistance;
  76. /// This value is used when deciding which contact points in the manifold are duplicates. 
  77. /// Precisely, it determines when two contact points are found, whether they
  78. /// are to be treated as the same based on the angle between the normals.
  79. /// For two contact points which are identical apart from the direction of the normals
  80. /// the threshold angle A can be calculated from A = acos(1 - (.1/(10* m_contactAngleSensitivity)))
  81. /// For the default value of 10, contact points with angles less then 2.56 degrees are considered as identical.
  82. /// If you decrease this to 1, contact points with angles less then 8.1 degrees are considered as identical.
  83. /// A larger value will increase the number of contact points considered in the manifold, and make for
  84. /// a more accurate simulation at slightly higher computational expense.
  85. hkReal m_contactAngleSensitivity; //+default(10)
  86. /// The maximum number of extra planes the user may add to the simplex input
  87. /// during a processConstraints callback. 
  88. hkUint32 m_userPlanes;
  89. /// This value is used  to clip the character's velocity when it is being "squeezed" by two
  90. /// moving planes. When two nearly parallel planes squeeze the character, the resultant velocity
  91. /// necessary to move the character so that both planes do not penetrate it can be extremely high,
  92. /// which can cause in the character controller to move at a very fast velocity.
  93. /// This value defaults to 10 (which is appropriate if your default walking speed is 10).
  94. /// If this velocity is exceeded by the character solver when solving parallel planes, the
  95. /// solver solves the planes independently. The result is that instead of moving at a high
  96. /// velocity, the character may penetrate one of the planes (based on plane priorities).
  97. hkReal m_maxCharacterSpeedForSolver;
  98. /// The maximum constant force that the character controller can impart onto
  99. /// moving objects. By default this is HK_REAL_MAX, i.e. the character controller
  100. /// is infinitely strong.
  101. hkReal m_characterStrength;
  102. /// The mass of the character. This value is only used to apply an extra downward force to dynamic
  103. /// rigid bodies that the character is standing on.  By default this value is 0, which means no additional
  104. /// downward force is applied.  It should only be set to a positive value if you do not apply gravity 
  105. /// from your state machine when the character is on the ground.
  106. hkReal m_characterMass;
  107. /// The maximum slope that the character can walk up. If the character is standing on a slope that
  108. /// is steeper than this, checkSupport() will return false, and an additional vertical plane will be
  109. /// added during integrate() that will block the character's movement in the direction of the slope.
  110. /// This angle is measured in radians from the horizontal.
  111. /// By default this value is set to PI / 2, i.e. vertical, which disables this feature.
  112. hkReal m_maxSlope;
  113. /// When a penetrating plane is added to the manifold we set its velocity so it will push 
  114. /// the character away from the point of penetration. This variable controls the speed
  115. /// at which this recovery takes place. The velocity applied is proportional to the penetration distance
  116. /// This values controls the proportion.
  117. /// By default this value is set to 1.0
  118. hkReal m_penetrationRecoverySpeed;
  119. /// The number of iterations the character controller will take to resolve an integrate() call.
  120. /// The character controller will iterate if it hits a surface, and needs to change direction to complete
  121. /// the integrate for that timestep.  The default is 10 iterations.
  122. int m_maxCastIterations; // +default(10)
  123. /// This flag determines whether the character controller refreshes the manifold when checkSupport is called.
  124. /// By default this is set to false, i.e. the manifold is not updated. This leads to a small inaccuracy when
  125. /// the character controller is hit by a rapidly accelerating body, however it is better to accept this
  126. /// inaccuracy, as the extra refresh manifold call can be computationally expensive.  
  127. bool m_refreshManifoldInCheckSupport; // +default(false)
  128. };
  129. #endif // HKUTILITIES_CHARACTERCONTROL_CHARACTERPROXY_HKCHARACTERPROXYCINFO_XML_H
  130. /*
  131. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  132. * Confidential Information of Havok.  (C) Copyright 1999-2009
  133. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  134. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  135. * rights, and intellectual property rights in the Havok software remain in
  136. * Havok and/or its suppliers.
  137. * Use of this software for evaluation purposes is subject to and indicates
  138. * acceptance of the End User licence Agreement for this product. A copy of
  139. * the license is included with this software and is also available at www.havok.com/tryhavok.
  140. */