37 #define M_PI 3.14159265358979323846    51   explicit Tweener(TweenerType tweenerType = EASE_OUT) { m_tweenerType = tweenerType; }
    54   void SetEasing(TweenerType type) { m_tweenerType = type; }
    55   virtual float Tween(
float time, 
float start, 
float change, 
float duration)=0;
    56   virtual bool HasResumePoint()
 const { 
return m_tweenerType == EASE_INOUT; }
    58   TweenerType m_tweenerType;
    65   float Tween(
float time, 
float start, 
float change, 
float duration)
 override    67     return change * time / duration + start;
    69   bool HasResumePoint()
 const override { 
return false; }
    77   float Tween(
float time, 
float start, 
float change, 
float duration)
 override    79     switch (m_tweenerType)
    83         return change * time * (_a * time + 1 - _a) + start;
    88         return -change * time * (_a * time - 1 - _a) + start;
    94           return (change) * time * (_a * time + 1 - _a) + start;
    96         return (-change) * time * (_a * time - 1 - _a) + start;
    99     return change * time * time + start;
   109   float Tween(
float time, 
float start, 
float change, 
float duration)
 override   111     switch (m_tweenerType)
   115         return change * time * time * time + start;
   121         return change * (time * time * time + 1) + start;
   127           return (change/2) * time * time * time + start;
   129         return (change/2) * (time * time * time + 2) + start;
   132     return change * time * time + start;
   139   float Tween(
float time, 
float start, 
float change, 
float duration)
 override   141     switch (m_tweenerType)
   145         return (-change) * (sqrt(1 - time * time) - 1) + start;
   151         return change * sqrt(1 - time * time) + start;
   157           return (-change/2) * (sqrt(1 - time * time) - 1) + start;
   159         return change/2 * (sqrt(1 - time * time) + 1) + start;
   162     return change * sqrt(1 - time * time) + start;
   171   float Tween(
float time, 
float start, 
float change, 
float duration)
 override   174     switch (m_tweenerType)
   178         return change * time * time * ((s + 1) * time - s) + start;
   184         return change * (time * time * ((s + 1) * time + s) + 1) + start;
   192           return (change/2) * (time * time * ((s + 1) * time - s)) + start;
   195         return (change/2) * (time * time * ((s + 1) * time + s) + 2) + start;
   198     return change * ((time-1) * time * ((s + 1) * time + s) + 1) + start;
   209   float Tween(
float time, 
float start, 
float change, 
float duration)
 override   212     switch (m_tweenerType)
   215         return change * (1 - cos(time * static_cast<float>(M_PI) / 2.0f)) + start;
   219         return change * sin(time * static_cast<float>(M_PI) / 2.0f) + start;
   223         return change / 2 * (1 - cos(static_cast<float>(M_PI) * time)) + start;
   226       return (change / 2) * (1 - cos(static_cast<float>(M_PI) * time)) + start;
   234   float Tween(
float time, 
float start, 
float change, 
float duration)
 override   236     switch (m_tweenerType)
   239         return (change - easeOut(duration - time, 0, change, duration)) + start;
   243         return easeOut(time, start, change, duration);
   247         if (time < duration/2)
   248           return (change - easeOut (duration - (time * 2), 0, change, duration) + start) * .5f + start;
   250           return (easeOut (time * 2 - duration, 0, change, duration) * .5f + change * .5f) + start;
   254     return easeOut(time, start, change, duration);
   257   static float easeOut(
float time, 
float start, 
float change, 
float duration)
   260     if (time < (1 / 2.75f))
   262       return  change * (7.5625f * time * time) + start;
   264     else if (time < (2 / 2.75f))
   266       time -= (1.5f/2.75f);
   267       return change * (7.5625f * time * time + .75f) + start;
   269     else if (time < (2.5f / 2.75f))
   271       time -= (2.25f/2.75f);
   272       return change * (7.5625f * time * time + .9375f) + start;
   276       time -= (2.625f/2.75f);
   277       return change * (7.5625f * time * time + .984375f) + start;
   288   float Tween(
float time, 
float start, 
float change, 
float duration)
 override   290     switch (m_tweenerType)
   293         return easeIn(time, start, change, duration);
   297         return easeOut(time, start, change, duration);
   301         return easeInOut(time, start, change, duration);
   304     return easeOut(time, start, change, duration);
   310   float easeIn(
float time, 
float start, 
float change, 
float duration)
 const   320         return start + change;
   323     if (!a || a < fabs(change))
   330       s = p / (2 * 
static_cast<float>(M_PI)) * asin(change / a);
   333     return -(a * pow(2.0f, 10 * time) *
   334              sin((time * duration - s) * (2 * static_cast<float>(M_PI)) / p)) +
   338   float easeOut(
float time, 
float start, 
float change, 
float duration)
 const   348         return start + change;
   351     if (!a || a < fabs(change))
   358       s = p / (2 * 
static_cast<float>(M_PI)) * asin(change / a);
   360     return (a * pow(2.0f, -10 * time) *
   361             sin((time * duration - s) * (2 * static_cast<float>(M_PI)) / p)) +
   365   float easeInOut(
float time, 
float start, 
float change, 
float duration)
 const   375         return start + change;
   378     if (!a || a < fabs(change))
   385       s = p / (2 * 
static_cast<float>(M_PI)) * asin(change / a);
   391       return -.5f * (a * pow(2.0f, 10 * (time)) *
   392                      sin((time * duration - s) * (2 * static_cast<float>(M_PI)) / p)) +
   396     return a * pow(2.0f, -10 * (time)) *
   397                sin((time * duration - s) * (2 * static_cast<float>(M_PI)) / p) * .5f +