hkaAnimationControl.h
上传用户: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. #ifndef HK_ANIMATION_CONTROL_H
  9. #define HK_ANIMATION_CONTROL_H
  10. #include <Common/Base/hkBase.h>
  11. class hkaAnimationBinding;
  12. class hkaAnimationControlListener;
  13. /// This abstract class is the base class for all animation controllers.
  14. /// It contains the local time and weight for a playing animation.
  15. class hkaAnimationControl : public hkReferencedObject
  16. {
  17. public:
  18. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ANIM_CONTROL);
  19. /// Constructor.
  20. hkaAnimationControl( const hkaAnimationBinding* binding );
  21. /// Destructor notifies listeners of the controls impending demise.
  22. virtual ~hkaAnimationControl();
  23. /// Advance the local clock by the specified delta time and return the new state
  24. virtual void update( hkReal stepDelta )= 0;
  25. /// Return the local time for the control
  26. inline hkReal getLocalTime() const;
  27. /// Set the local time for the animation
  28. inline void setLocalTime( hkReal lTime );
  29. /// Get the current weight this control
  30. inline hkReal getWeight() const;
  31. /// Returns the local time of the control in the future.
  32. /// Local time is guaranteed to lie in the range 0..duration.
  33. /// If the stepDelta overflows / underflows the end of the animation then loopsOut is positive / negative.
  34. virtual void getFutureTime( hkReal stepDelta, hkReal& localTimeOut, int& loopsOut) const = 0;
  35. /*
  36.  * Per track weighting / feathering
  37.  */ 
  38. /// Return the per track weight for this track
  39. /// If no track weight has been set this defaults to 1
  40. /// The weight is renormalized when used (0..255 -> 0..1)
  41. inline hkUint8 getTransformTrackWeight(hkUint32 track) const;
  42. /// Return the per track weight for this track
  43. /// If no track weight has been set this defaults to 1
  44. /// The weight is renormalized when used (0..255 -> 0..1)
  45. inline hkUint8 getFloatTrackWeight(hkUint32 track) const;
  46. /// Sets the per track weight for this track
  47. /// If no weights have already been set then a
  48. /// weight array in internally allocated and initialized to 1.0f
  49. /// The weight is renormalized when used (0..255 -> 0..1)
  50. inline void setTransformTrackWeight(hkUint32 track, hkUint8 weight);
  51. /// Sets the per track weight for this track
  52. /// If no weights have already been set then a
  53. /// weight array in internally allocated and initialized to 1.0f
  54. /// The weight is renormalized when used (0..255 -> 0..1)
  55. inline void setFloatTrackWeight(hkUint32 track, hkUint8 weight);
  56. /// Get the motion track weight for this control
  57. inline hkReal getMotionTrackWeight() const;
  58. /// Set the motion track weight for this control
  59. inline void setMotionTrackWeight(hkReal w);
  60. /// Get the weight values for all tracks (non-const access)
  61. inline const hkArray<hkUint8>& getTransformTracksWeights() const;
  62. /// Get the weight values for all tracks (non-const access)
  63. inline const hkArray<hkUint8>& getFloatTracksWeights() const;
  64. /// Const access to the original animation binding
  65. inline const hkaAnimationBinding* getAnimationBinding() const;
  66. /// Set the animation binding
  67. void setAnimationBinding( const hkaAnimationBinding* binding);
  68. /// Add a listener 
  69. void addAnimationControlListener(hkaAnimationControlListener* listener);
  70. /// Remove a listener
  71. void removeAnimationControlListener(hkaAnimationControlListener* listener);
  72. protected:
  73. /// The localtime used to sample the playing animation
  74. hkReal m_localTime;
  75. /// The current weight for this control
  76. hkReal m_weight;
  77. /// An array of bone track weights (in range 0 to 255 mapped to 0..1)
  78. hkArray<hkUint8> m_transformTrackWeights;
  79. /// An array of float track weights (in range 0 to 255 mapped to 0..1)
  80. hkArray<hkUint8> m_floatTrackWeights;
  81. /// The binding to the skeleton
  82. const hkaAnimationBinding* m_binding;
  83. /// Animation Control listeners
  84. hkArray<hkaAnimationControlListener*> m_listeners;
  85. /// The weight for the motion track
  86. hkReal m_motionTrackWeight;
  87. };
  88. #include <Animation/Animation/Playback/Control/hkaAnimationControl.inl>
  89. #endif // HK_ANIMATION_CONTROL_H
  90. /*
  91. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  92. * Confidential Information of Havok.  (C) Copyright 1999-2009
  93. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  94. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  95. * rights, and intellectual property rights in the Havok software remain in
  96. * Havok and/or its suppliers.
  97. * Use of this software for evaluation purposes is subject to and indicates
  98. * acceptance of the End User licence Agreement for this product. A copy of
  99. * the license is included with this software and is also available at www.havok.com/tryhavok.
  100. */