hkpCharacterStateOnGround.h
上传用户: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. #ifndef HK_CHARACTER_STATE_ON_GROUND
  9. #define HK_CHARACTER_STATE_ON_GROUND
  10. #include <Physics/Utilities/CharacterControl/StateMachine/hkpCharacterState.h>
  11. /// This state controls character movement when on the ground.
  12. /// The implementation uses a feedback controller. The controller attempts
  13. /// to bring the velocity of the character to the walking speed. All measurements
  14. /// are taken in the coordinate frame specified by the character input - this
  15. /// means that the character will maintain the same speed when travelling up and down
  16. /// slopes as it will when running on the flat.
  17. class hkpCharacterStateOnGround : public hkpCharacterState
  18. {
  19. public:
  20. hkpCharacterStateOnGround();
  21. /// Returns the state type
  22. virtual hkpCharacterStateType getType() const;
  23. /// Process the user input - causes state actions.
  24. virtual void update(hkpCharacterContext& context, const hkpCharacterInput& input, hkpCharacterOutput& output);
  25. /// Process the user input - causes state transitions.
  26. virtual void change(hkpCharacterContext& context, const hkpCharacterInput& input, hkpCharacterOutput& output);
  27. /// Gets the gain for this feedback controller
  28. hkReal getGain() const;
  29. /// Sets the gain for this feedback controller
  30. void setGain(hkReal newGain);
  31. /// Gets the walking speed for this state
  32. hkReal getSpeed() const;
  33. /// Sets the walking speed for this state
  34. void setSpeed(hkReal newGain);
  35. /// Gets the maximal linear acceleration for this state
  36. hkReal getMaxLinearAcceleration() const;
  37. /// Set the maximal linear acceleration for this state
  38. void setMaxLinearAcceleration(hkReal newMaxAcceleration);
  39. /// Returns the state of the ground hugging flag. By default this is set to true.
  40. /// If this flag is set then the character will automatically clamp it's vertical velocity
  41. /// to zero when transitioning from onGround to inAir. As the state transition happens
  42. /// when the character is no longer supported, it cannot use the surface velocity, so this
  43. /// only works effectively on static or slow moving surfaces.
  44. hkBool getGroundHugging() const;
  45. /// Sets the state of the ground hugging flag.
  46. /// If this flag is set then the character will automatically clamp it's vertical velocity
  47. /// to zero when transitioning from onGround to inAir. As the state transition happens
  48. /// when the character is no longer supported, it cannot use the surface velocity, so this
  49. /// only works effectively on static or slow moving surfaces.
  50. void setGroundHugging(hkBool newVal);
  51. /// Returns the state of the limit downward velocity flag. By default this value is false.
  52. /// If this flag is set then vertical velocity of the character will be clamped to never
  53. /// exceed character gravity. This means that if you are running down a steep slope
  54. /// the vertical component of the character velocity will be clamped against gravity.
  55. /// Similarly if you are on an elevator moving downward you will move away from the elevator
  56. /// as its velocity exceeds gravity.
  57. hkBool getLimitDownwardVelocity() const;
  58. /// Sets the state of the limit downward velocity flag.
  59. /// If this flag is set then vertical velocity of the character will be clamped to never
  60. /// exceed character gravity. This means that if you are running down a steep slope
  61. /// the vertical component of the character velocity will be clamped against gravity.
  62. /// Similarly if you are on an elevator moving downward you will move away from the elevator
  63. /// as its velocity exceeds gravity.
  64. void setLimitDownwardVelocity(hkBool newVal);
  65. /// When the character is walking up a slope, a velocity is calculated on the surface
  66. /// of the slope that keeps the character moving as though it was on level ground. i.e
  67. /// the character does not slow down, or change direction as it walks up a slope.
  68. /// However this upwards velocity can cause the character to jitter in certain circumstances.
  69. /// For example when moving up a slope and hitting a wall, the character will rise slightly
  70. /// up the wall due to its upwards velocity. 
  71. /// The solution for this is to project this upwards velocity into the horizontal plane, which
  72. /// is done by default (new to 3.1). The behavior change should be imperceptable (apart from the
  73. /// removed jitter), however you can disable this projection if you wish to keep the 3.0 behavior
  74. /// using this flag.
  75. hkBool getDisableHorizontalProjection() const;
  76. /// When the character is walking up a slope, a velocity is calculated on the surface
  77. /// of the slope that keeps the character moving as though it was on level ground. i.e
  78. /// the character does not slow down, or change direction as it walks up a slope.
  79. /// However this upwards velocity can cause the character to jitter in certain circumstances.
  80. /// For example when moving up a slope and hitting a wall, the character will rise slightly
  81. /// up the wall due to its upwards velocity. 
  82. /// The solution for this is to project this upwards velocity into the horizontal plane, which
  83. /// is done by default (new to 3.1). The behavior change should be imperceptable (apart from the
  84. /// removed jitter), however you can disable this projection if you wish to keep the 3.0 behavior
  85. /// using this flag.
  86. void setDisableHorizontalProjection( hkBool newVal );
  87. protected:
  88. hkReal m_gain;
  89. hkReal m_walkSpeed;
  90. hkReal  m_maxLinearAcceleration;
  91. hkBool m_killVelocityOnLaunch;
  92. hkBool  m_limitVerticalVelocity;
  93. hkBool  m_disableHorizontalProjection;
  94. };
  95. #endif // HK_CHARACTER_STATE_ON_GROUND
  96. /*
  97. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  98. * Confidential Information of Havok.  (C) Copyright 1999-2009
  99. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  100. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  101. * rights, and intellectual property rights in the Havok software remain in
  102. * Havok and/or its suppliers.
  103. * Use of this software for evaluation purposes is subject to and indicates
  104. * acceptance of the End User licence Agreement for this product. A copy of
  105. * the license is included with this software and is also available at www.havok.com/tryhavok.
  106. */