hkaDefaultAnimationControl.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_DEFAULT_CONTROL_H
  9. #define HK_DEFAULT_CONTROL_H
  10. #include <Animation/Animation/Playback/Control/hkaAnimationControl.h>
  11. #include <Animation/Animation/Animation/hkaAnimationBinding.h>
  12. #include <Animation/Animation/Animation/hkaAnimation.h>
  13. class hkaDefaultAnimationControlListener;
  14. /// This class represents a simple animation control.
  15. /// It provides basic support for varying playback speed, fading and looping
  16. class hkaDefaultAnimationControl : public hkaAnimationControl
  17. {
  18. public:
  19. /// Create a new hkaDefaultAnimationControl.
  20. /// param binding The binding (which contains an hkaAnimation) to which this control is attached
  21. /// param startEasedIn True if the animation is to be started fully eased in, false if fully eased out
  22. /// param maxCycles Maximum number of cycles to play this animation (1,2, etc.).  Negative values signify infinite looping.
  23. hkaDefaultAnimationControl( const hkaAnimationBinding* binding, hkBool startEasedIn = true, hkInt32 maxCycles = -1 );
  24. hkaDefaultAnimationControl(const hkaDefaultAnimationControl& other);
  25. /*
  26.  * Control interface
  27.  */
  28. /// Advance the local clock by the specified delta time and return the new state
  29. void update( hkReal stepDelta );
  30. /// Returns the local time of the control in the future.
  31. /// Local time is guaranteed to lie in the range 0..duration.
  32. /// If the stepDelta overflows / underflows the end of the animation then loopsOut is positive / negative.
  33. virtual void getFutureTime( hkReal stepDelta, hkReal& localTimeOut, int& loopsOut) const;
  34. /*
  35.  * Basic Control
  36.  */
  37. /// Return the master weight for the control
  38. inline hkReal getMasterWeight() const;
  39. /// Set the master weight for this playing animation
  40. inline void setMasterWeight( hkReal weight );
  41. /// Return the current playback speed
  42. inline hkReal getPlaybackSpeed() const;
  43. /// Set the playback speed.
  44. /// If speed is set to a negative value the animation will run backwards.
  45. inline void setPlaybackSpeed( hkReal speed );
  46. /*
  47.  * Loop counting
  48.  */
  49. /// Return how many times this control has looped passed the end of the animation - never reset unless by user using setOverflowCount().
  50. inline hkUint32 getOverflowCount() const;
  51. /// Reset (to zero) how many times this control has looped passed the end of the animation.
  52. inline void setOverflowCount( hkUint32 count );
  53. /// Return how many times this control has looped passed the start of the animation - never reset unless by user using setUnderflowCount().
  54. inline hkUint32 getUnderflowCount() const;
  55. /// Reset (to zero) how many times this control has looped passed the start of the animation.
  56. inline void setUnderflowCount( hkUint32 count );
  57. /*
  58.  * Ease Curve Control
  59.  */
  60. /// Set the ease in curve. The curve is a Bezier defined by
  61. /// B(t) = t^3(-p0 + 3p1 - 3p2 + p3) + t^2(3p0 - 6p1 + 3p2) + t^1(-3p0 + 3p1) + t^0(p0)
  62. inline void setEaseInCurve(hkReal y0, hkReal y1, hkReal y2, hkReal y3);
  63. /// Set the ease out curve. The curve is a Bezier defined by
  64. /// B(t) = t^3(-p0 + 3p1 - 3p2 + p3) + t^2(3p0 - 6p1 + 3p2) + t^1(-3p0 + 3p1) + t^0(p0)
  65. inline void setEaseOutCurve(hkReal y0, hkReal y1, hkReal y2, hkReal y3);
  66. /// Ease in the control according to the curve.
  67. /// param duration The length of time to perform the ease
  68. /// return The time at which it will be fully eased in (may not be time specified if the control is already in the middle of easing).
  69. inline hkReal easeIn(hkReal duration);
  70. /// Ease out the control according to the curve.
  71. /// param duration The length of time to perform the ease
  72. /// return The time at which it will be fully eased out (may not be time specified if the control is already in the middle of easing).
  73. inline hkReal easeOut(hkReal duration);
  74. /// Ease status.
  75. enum EaseStatus
  76. {
  77. /// easeIn has been called, and ease is not yet complete
  78. EASING_IN,
  79. /// easeIn was called and ease has completed (or controller constructed in eased in state)
  80. EASED_IN,
  81. /// easeOut has been called, and ease is not yet complete
  82. EASING_OUT,
  83. /// easeOut was called and ease has completed (or controller constructed in eased out state)
  84. EASED_OUT
  85. };
  86. /// Returns the status of the easing for this control
  87. inline enum EaseStatus getEaseStatus() const;
  88. /*
  89.  * Listener interface
  90.  */
  91. /// Add a listener 
  92. void addDefaultControlListener(hkaDefaultAnimationControlListener* listener);
  93. /// Remove a listener
  94. void removeDefaultControlListener(hkaDefaultAnimationControlListener* listener);
  95. /*
  96.  * Cropping
  97.  */
  98. /// Set the amount (in local seconds) to crop the start of the animation.
  99. /// This number should always be between 0 and the duration of the animation
  100. inline void setCropStartAmountLocalTime( hkReal cropStartAmountLocalTime );
  101. /// Set the amount (in local seconds) to crop the end of the animation.
  102. /// This number should always be between 0 and the duration of the animation
  103. /// For example, to crop the last half second from an animation of any length, 
  104. /// pass in 0.5f.
  105. inline void setCropEndAmountLocalTime( hkReal cropEndAmountLocalTime );
  106. /// Get the amount (in local seconds) to crop the start of the animation.
  107. inline hkReal getCropStartAmountLocalTime();
  108. /// Get the amount (in local seconds) to crop the end of the animation.
  109. inline hkReal getCropEndAmountLocalTime();
  110. protected:
  111. // Master weight for this control
  112. hkReal m_masterWeight;
  113. // Speed Control
  114. hkReal m_playbackSpeed;
  115. // loop counters
  116. hkUint32 m_overflowCount;
  117. hkUint32 m_underflowCount;
  118. hkInt32 m_maxCycles;
  119. // Ease controls
  120. hkVector4 m_easeInCurve; // 4 control pts 
  121. hkVector4 m_easeOutCurve; // 4 control pts
  122. hkReal m_easeInvDuration; // 1/duration of the ease
  123. hkReal m_easeT; // Current parameterisation for the ease curve
  124. EaseStatus  m_easeStatus; // Direction in/out
  125. // cropping amounts (in positive local seconds from the respective endpoint of the clip)
  126. hkReal m_cropStartAmountLocalTime;
  127. hkReal m_cropEndAmountLocalTime;
  128. // Control listeners
  129. hkArray<hkaDefaultAnimationControlListener*> m_defaultListeners;
  130. };
  131. #include <Animation/Animation/Playback/Control/Default/hkaDefaultAnimationControl.inl>
  132. #endif // HK_DEFAULT_CONTROL_H
  133. /*
  134. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  135. * Confidential Information of Havok.  (C) Copyright 1999-2009
  136. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  137. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  138. * rights, and intellectual property rights in the Havok software remain in
  139. * Havok and/or its suppliers.
  140. * Use of this software for evaluation purposes is subject to and indicates
  141. * acceptance of the End User licence Agreement for this product. A copy of
  142. * the license is included with this software and is also available at www.havok.com/tryhavok.
  143. */