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

其他游戏

开发平台:

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_MOTORACTION_H
  9. #define HK_MOTORACTION_H
  10. #include <Physics/Dynamics/Action/hkpUnaryAction.h>
  11. extern const hkClass hkpMotorActionClass;
  12. class hkpRigidBody;
  13. class hkpRigidBody;
  14. /// This action applies torque to the rigid body passed as a parameter until it 
  15. /// reaches the desired angular velocity. The motor acts on 'body' spinning about 
  16. /// 'axis' at 'spin_rate' [radians/sec]. 'gain' specifies the rate at  which the 
  17. /// desired velocity is attained [(angular - current) * gain].
  18. class hkpMotorAction: public hkpUnaryAction
  19. {
  20. public:
  21. HK_DECLARE_REFLECTION();
  22. /// This is a very basic motor to test actions. An appropriate torque is applied to the
  23. /// identified rigid body at each step.
  24. ///
  25. /// param body The body the action is applied to.
  26. /// param axis The axis of rotation of the body.
  27. /// param spinRate The desired angular velocity we want to reach [rad/s].
  28. /// param gain Specified how fast do we want to reach the desired angular velocity range[>0] default == 2.0f.
  29. inline hkpMotorAction();
  30. /// Creates a new hkpMotorAction.
  31. hkpMotorAction(hkpRigidBody* body, const hkVector4& axis, hkReal spinRate, hkReal gain = 2.0f);
  32. /// Apply the action to the rigid body. Called every simulation step.
  33. void applyAction(const hkStepInfo& stepInfo);
  34. /// Gets the spin rate (angular velocity) the action is trying to reach.
  35. /// This value is set on construction and can be changed by calling setSpinRate().
  36. inline hkReal getSpinRate() const;
  37. /// Sets the new desired spin rate the motor action will try to reach.
  38. /// param new_rate The new desired spin rate.
  39. inline void setSpinRate(hkReal new_rate);
  40. /// Gets the current gain.
  41. /// This is the gain that the action is currently using to reach the desired spin speed.
  42. /// The gain is set on construction and can be modified by the function setGain().
  43. inline hkReal getGain() const;
  44. /// Sets the a new gain rate for the action.
  45. /// The gain is the rate at which the action will try to reach the desired angular velocity.
  46. ///
  47. /// param new_gain The new gain. Range [>0].
  48. inline void setGain(hkReal new_rate);
  49. /// Gets the axis around which the object should spin, in local space.
  50. /// This axis is specified on construction.
  51. inline const hkVector4& getAxis() const;
  52. /// Sets the axis around which the object should spin, in local space.
  53. inline void setAxis(const hkVector4& axis);
  54. /// Gets the current activation state for this motor
  55. inline hkBool isActive() const;
  56. /// Activate/deactivate
  57. inline void setActivation(hkBool b);
  58. /// hkpAction clone interface.
  59. virtual hkpAction* clone( const hkArray<hkpEntity*>& newEntities, const hkArray<hkpPhantom*>& newPhantoms ) const;
  60. protected:
  61. hkVector4 m_axis;
  62. hkReal m_spinRate;
  63. hkReal m_gain;
  64. hkBool m_active;
  65. public:
  66. hkpMotorAction( class hkFinishLoadedObjectFlag flag ) : hkpUnaryAction(flag) {}
  67. };
  68. #include <Physics/Utilities/Actions/Motor/hkpMotorAction.inl>
  69. #endif // HK_MOTOR_ACTION_H
  70. /*
  71. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  72. * Confidential Information of Havok.  (C) Copyright 1999-2009
  73. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  74. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  75. * rights, and intellectual property rights in the Havok software remain in
  76. * Havok and/or its suppliers.
  77. * Use of this software for evaluation purposes is subject to and indicates
  78. * acceptance of the End User licence Agreement for this product. A copy of
  79. * the license is included with this software and is also available at www.havok.com/tryhavok.
  80. */