Anim.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. GWEN
  3. Copyright (c) 2010 Facepunch Studios
  4. See license in Gwen.h
  5. */
  6. #pragma once
  7. #ifndef GWEN_ANIM_H
  8. #define GWEN_ANIM_H
  9. #include "Gwen/Gwen.h"
  10. #include "Gwen/Controls/Base.h"
  11. #include "Gwen/Platform.h"
  12. #ifndef GWEN_NO_ANIMATION
  13. namespace Gwen
  14. {
  15. namespace Anim
  16. {
  17. class GWEN_EXPORT Animation
  18. {
  19. public:
  20. typedef std::list<Animation*> ChildList;
  21. typedef std::map< Gwen::Controls::Base *, ChildList > List;
  22. virtual void Think() = 0;
  23. virtual bool Finished() = 0;
  24. virtual ~Animation() {}
  25. Gwen::Controls::Base* m_Control;
  26. };
  27. GWEN_EXPORT void Add( Gwen::Controls::Base* control, Animation* animation );
  28. GWEN_EXPORT void Cancel( Gwen::Controls::Base* control );
  29. GWEN_EXPORT void Think();
  30. //
  31. // Timed animation. Provides a useful base for animations.
  32. //
  33. class GWEN_EXPORT TimedAnimation : public Animation
  34. {
  35. public:
  36. TimedAnimation( float fLength, float fDelay = 0.0f, float fEase = 1.0f );
  37. virtual void Think();
  38. virtual bool Finished();
  39. //
  40. // These are the magic functions you should be overriding
  41. //
  42. virtual void OnStart(){}
  43. virtual void Run( float /*delta*/ ){}
  44. virtual void OnFinish(){}
  45. protected:
  46. bool m_bStarted;
  47. bool m_bFinished;
  48. float m_fStart;
  49. float m_fEnd;
  50. float m_fEase;
  51. };
  52. namespace Size
  53. {
  54. class GWEN_EXPORT Height : public TimedAnimation
  55. {
  56. public:
  57. Height( int iStartSize, int iEndSize, float fLength, bool bHide = false, float fDelay = 0.0f, float fEase = 1.0f ) : TimedAnimation( fLength, fDelay, fEase )
  58. {
  59. m_iStartSize = iStartSize;
  60. m_iDelta = iEndSize - m_iStartSize;
  61. m_bHide = bHide;
  62. }
  63. virtual void OnStart(){ m_Control->SetHeight( m_iStartSize ); }
  64. virtual void Run( float delta ){ m_Control->SetHeight( m_iStartSize + (((float)m_iDelta) * delta) ); }
  65. virtual void OnFinish(){ m_Control->SetHeight( m_iStartSize + m_iDelta ); m_Control->SetHidden( m_bHide ); }
  66. protected:
  67. int m_iStartSize;
  68. int m_iDelta;
  69. bool m_bHide;
  70. };
  71. class Width : public TimedAnimation
  72. {
  73. public:
  74. Width( int iStartSize, int iEndSize, float fLength, bool bHide = false, float fDelay = 0.0f, float fEase = 1.0f ) : TimedAnimation( fLength, fDelay, fEase )
  75. {
  76. m_iStartSize = iStartSize;
  77. m_iDelta = iEndSize - m_iStartSize;
  78. m_bHide = bHide;
  79. }
  80. virtual void OnStart(){ m_Control->SetWidth( m_iStartSize ); }
  81. virtual void Run( float delta ){ m_Control->SetWidth( m_iStartSize + (((float)m_iDelta) * delta) ); }
  82. virtual void OnFinish(){ m_Control->SetWidth( m_iStartSize + m_iDelta ); m_Control->SetHidden( m_bHide ); }
  83. protected:
  84. int m_iStartSize;
  85. int m_iDelta;
  86. bool m_bHide;
  87. };
  88. }
  89. namespace Tools
  90. {
  91. class Remove : public TimedAnimation
  92. {
  93. public:
  94. Remove( float fDelay = 0.0f ) : TimedAnimation( 0.0f, fDelay ){}
  95. virtual void OnFinish(){ m_Control->DelayedDelete(); }
  96. };
  97. }
  98. }
  99. }
  100. #endif
  101. #endif