Share your advanced knowledge/code with the community.
poshu
 
Posts: 58
Joined: Mon Feb 24, 2014 11:46 pm

Easing

by poshu Tue Jul 10, 2018 2:02 pm

Hey o/
Easing formulas are necessary to do games, animations and quite a lot of other stuff, so here we go with the basic Robert Penner's Easing formulas :
( /!\ I haven't tested all of them, some might be wrong! /!\ )

Code: Select all
DeclareModule Ease
   Declare.f linear(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InQuad(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutQuad(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutQuad(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InCubic(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutCubic(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutCubic(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InQuart(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutQuart(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutQuart(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InQuint(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutQuint(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutQuint(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InSine(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutSine(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutSine(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InExpo(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutExpo(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutExpo(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InCirc(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f OutCirc(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
   Declare.f InOutCirc(CurrentTime.f, InitialValue.f, TargetValue.f, Duration.f)
EndDeclareModule

Module Ease
   Procedure.f linear(t.f, b.f, c.f, d.f)
      ProcedureReturn c*t/d + b
   EndProcedure
   
   Procedure.f InQuad(t.f, b.f, c.f, d.f)
      t / d
      ProcedureReturn c*t*t + b
   EndProcedure
   
   Procedure.f OutQuad(t.f, b.f, c.f, d.f)
      t / d
      ProcedureReturn -c * t*(t-2) + b
   EndProcedure
   
   Procedure.f InOutQuad(t.f, b.f, c.f, d.f)
      t = t/(d/2)
      If (t < 1)
         ProcedureReturn c/2*t*t + b
      EndIf
      t - 1
      ProcedureReturn -c/2 * (t*(t-2) - 1) + b
      
   EndProcedure
   
   Procedure.f InCubic(t.f, b.f, c.f, d.f)
      t / d
      ProcedureReturn c*t*t*t + b
   EndProcedure
   
   Procedure.f OutCubic(t.f, b.f, c.f, d.f)
      t / d
      t - 1      
      ProcedureReturn c*(t*t*t + 1) + b
   EndProcedure
   
   Procedure.f InOutCubic(t.f, b.f, c.f, d.f)
      t = t / (d/2)
      If (t < 1)
         ProcedureReturn c/2*t*t*t + b
      EndIf
      t - 2                                                
      ProcedureReturn c/2*(t*t*t + 2) + b      
      
   EndProcedure
   
   Procedure.f InQuart(t.f, b.f, c.f, d.f)
      t / d
      ProcedureReturn c*t*t*t*t + b
   EndProcedure
   
   Procedure.f OutQuart(t.f, b.f, c.f, d.f)
      t / d
      t- 1      
      ProcedureReturn -c * (t*t*t*t - 1) + b
   EndProcedure
   
   Procedure.f InOutQuart(t.f, b.f, c.f, d.f)
      t = t / (d/2)
      If (t < 1)
         ProcedureReturn c/2*t*t*t*t + b
      EndIf
      t - 2                                                   
      ProcedureReturn -c/2 * (t*t*t*t - 2) + b
      
   EndProcedure
   
   Procedure.f InQuint(t.f, b.f, c.f, d.f)
      t / d
      ProcedureReturn c*t*t*t*t*t + b
   EndProcedure
   
   Procedure.f OutQuint(t.f, b.f, c.f, d.f)
      t / d
      t - 1      
      ProcedureReturn c*(t*t*t*t*t + 1) + b
   EndProcedure
   
   Procedure.f InOutQuint(t.f, b.f, c.f, d.f)
      t = t / (d/2)
      If (t < 1)
         ProcedureReturn c/2*t*t*t*t*t + b
      EndIf
      t - 2                                                      
      ProcedureReturn c/2*(t*t*t*t*t + 2) + b      
      
   EndProcedure
   
   Procedure.f InSine(t.f, b.f, c.f, d.f)
      ProcedureReturn -c * Cos(t/d * (#PI/2)) + c + b
   EndProcedure
   
   Procedure.f OutSine(t.f, b.f, c.f, d.f)
      ProcedureReturn c * Sin(t/d * (#PI/2)) + b
   EndProcedure
   
   Procedure.f InOutSine(t.f, b.f, c.f, d.f)
      ProcedureReturn -c/2 * (Cos(#PI*t/d) - 1) + b
   EndProcedure
   
   Procedure.f InExpo(t.f, b.f, c.f, d.f)
      ProcedureReturn c * Pow( 2, 10 * (t/d - 1) ) + b
   EndProcedure
   
   Procedure.f OutExpo(t.f, b.f, c.f, d.f)
      ProcedureReturn c * ( -Pow( 2, -10 * t/d ) + 1 ) + b
   EndProcedure
   
   Procedure.f InOutExpo(t.f, b.f, c.f, d.f)
      t =t / (d/2)
      If (t < 1)
         ProcedureReturn c/2 * Pow( 2, 10 * (t - 1) ) + b
      EndIf
      t-1                                                                                       
      ProcedureReturn c/2 * ( -Pow( 2, -10 * t) + 2 ) + b         
      
   EndProcedure
   
   Procedure.f InCirc(t.f, b.f, c.f, d.f)
      t / d
      ProcedureReturn -c * (Sqr(1 - t*t) - 1) + b
   EndProcedure
   
   Procedure.f OutCirc(t.f, b.f, c.f, d.f)
      t / d
      t-1
      ProcedureReturn c * Sqr(1 - t*t) + b
   EndProcedure
   
   Procedure.f InOutCirc(t.f, b.f, c.f, d.f)
      t = t /(d/2)
      If (t < 1)
         ProcedureReturn -c/2 * (Sqr(1 - t*t) - 1) + b
      EndIf
      t - 2                                                                                 
      ProcedureReturn c/2 * (Sqr(1 - t*t) + 1) + b               
      
   EndProcedure
   
EndModule
Return to Tricks 'n' Tips

Who is online

Users browsing this forum: No registered users and 0 guests