Ooops
November 28, 2020, 02:25:03 PM

Author Topic: [bmx] Tween/Easing by coffeedotbean [ 1+ years ago ]  (Read 574 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] Tween/Easing by coffeedotbean [ 1+ years ago ]
« on: June 29, 2017, 12:28:43 AM »
Title : Tween/Easing
Author : coffeedotbean
Posted : 1+ years ago

Description : Port of Skn3's Code from MonkeyX

Example on usage here -http://www.blitzbasic.com/Community/posts.php?topic=105550


Code :
Code: BlitzMax
  1. ' ===========================================================================================================================
  2. ' Date: 28/12/2015
  3. ' ===========================================================================================================================
  4. ' Original authorcode Skn3 (michael contento)
  5. ' Ported from his Monkey-x code <a href="https://github.com/michaelcontento/monkey/blob/master/bananas/skn3/tweening/tween.monkey" target="_blank">https://github.com/michaelcontento/monkey/blob/master/bananas/skn3/tweening/tween.monkey</a>
  6. ' All Credit to Skn3, BlitzMax port by Supertino A.K.A coffeedotbean
  7. '
  8. ' Usage - Simply 'Include' this .bmx file into your existing project and use the functions below
  9. ' Important - all Equations but Linear must use an EaseIn, EaseOut or EaseInOut Call
  10. ' ===========================================================================================================================
  11.  
  12. ' Example
  13. ' =======
  14. ' local x:Float
  15. ' local myTween:Tween
  16. ' myTween = CreateTween(Tween.Sine.EaseInOut,0,480,5000)
  17. ' StartTween(myTween)
  18. '
  19. ' While
  20. '    UpdateTween(myTween)
  21. '    x=TweenValue(myTween)
  22. '    DrawRect x,0,32,32
  23. ' Wend
  24.  
  25. ' ###########################################################################################################################
  26. ' #                                                             Required to Create & return a Tween object
  27. ' ###########################################################################################################################
  28. Function CreateTween:Tween(equation:TweenEquationCall, startValue:Float, endValue:Float, duration:Int)
  29.         Local a:Tween = New Tween; a.Init(equation, startValue, endValue, duration) ; Return a
  30. End Function
  31.  
  32. ' ###########################################################################################################################
  33. ' #   Functions - these just call methods in the Tween Class, class methods can also be called directly for that OOP goodness
  34. ' ###########################################################################################################################
  35.  
  36. '// Return Value
  37. Function TweenValue:Float(a:Tween) ; Return a.Value() ; End Function
  38.  
  39. '// Start
  40. Function TweenStart:Int(a:Tween) ; a.Start ; End Function
  41.  
  42. '// Stop (Pause)
  43. Function TweenStop:Int(a:Tween) ; a.Stop ; End Function
  44.  
  45. '// Resume from Stop
  46. Function TweenResume:Int(a:Tween) ; a.Resume ; End Function
  47.  
  48. '// Call to update
  49. Function TweenUpdate:Int(a:Tween) ; a.Update ; End Function
  50.  
  51. '// Set YoYo (back and forth)
  52. Function TweenSetYoYo:Int(a:Tween, flag:Int = True) ; a.SetYoYo(flag) ; End Function
  53.  
  54. '// Infinate looping
  55. Function TweenSetLooping:Int(a:Tween, flag:Int = True) ; a.SetLooping(flag) ; End Function
  56.  
  57. '// Force to start point
  58. Function TweenRewind:Int(a:Tween) ; a.Rewind ; End Function
  59.  
  60. '// Force to end point
  61. Function TweenFastForward:Int(a:Tween) ; a.FastForward ; End Function
  62.  
  63. '// Change end value, if 0 duration original duration is used
  64. Function TweenContinueTo:Int(a:Tween, endValue:Float, duration:Int = 0) ; a.ContinueTo(endValue, duration) ; End Function
  65.  
  66. '// Return if the Tween is running
  67. Function TweenIsActive:Int(a:Tween) ; Return a.isActive ; End Function
  68.  
  69. '// Set duration time - if changed since creation
  70. Function TweenSetDuration:Int(a:Tween, duration:Int) ; a.SetDuration(duration) ; End Function
  71.  
  72. '// Set Equation - if changed since creation
  73. Function TweenSetEquation:Int(a:Tween, equation:TweenEquationCall) ; a.SetEquation(equation:TweenEquationCall) ; End Function
  74.  
  75. '// Set Value - if changed since creation
  76. Function TweenSetValue:Int(a:Tween, startValue:Float, endValue:Float) ; a.SetValue(startValue:Float, endValue:Float) ; End Function
  77.  
  78.  
  79. ' ###########################################################################################################################
  80. ' ###########################################################################################################################
  81. ' ###########################################################################################################################
  82. ' #                                            Tween module contents - all credit to Skn3 for orginal code, 99% original code
  83. ' ###########################################################################################################################
  84. Type Tween
  85.    
  86.         Global Linear:TweenEquationCall = New TweenEquationCallLinear
  87.         Global Sine:TweenEquation = New TweenEquationSine
  88.     Global Quint:TweenEquation = New TweenEquationQuint
  89.         Global Quart:TweenEquation = New TweenEquationQuart
  90.         Global Quad:TweenEquation = New TweenEquationQuad
  91.         Global Back:TweenEquation = New TweenEquationBack
  92.     Global Bounce:TweenEquation = New TweenEquationBounce
  93.     Global Circ:TweenEquation = New TweenEquationCirc
  94.     Global Cubic:TweenEquation = New TweenEquationCubic
  95.     Global Elastic:TweenEquation = New TweenEquationElastic
  96.     Global Expo:TweenEquation = New TweenEquationExpo
  97.    
  98.         Field equation:TweenEquationCall
  99.  
  100.     Field startt:Float
  101.     Field change:Float
  102.     Field current:Float
  103.  
  104.     Field isActive:Int = False
  105.     Field isLooping:Int = False
  106.     Field isYoYo:Int = False
  107.  
  108.     Field duration:Int
  109.     Field loopCount:Int
  110.     Field timeStart:Int
  111.     Field timeCurrent:Int
  112.     Field timePrevious:Int
  113.         Field timePaused:Int
  114.  
  115.     ' --- constructors ---
  116.     Method Init(equation:TweenEquationCall, startValue:Float, endValue:Float, duration:Int)
  117.         SetEquation(equation)
  118.         SetDuration(duration)
  119.         SetValue(startValue,endValue)
  120.     End Method
  121.  
  122.     ' --- private methods ---
  123.     Method UpdateValue:Int()
  124.         Current = equation.Call(timeCurrent, startt, change, duration)
  125.     End Method
  126.  
  127.     ' --- value methods ---
  128.     Method Value:Float()
  129.         Return current
  130.     End Method
  131.  
  132.     ' --- setup methods methods ---
  133.     Method SetEquation:Int(equation:TweenEquationCall)
  134.         Self.equation = equation
  135.     End Method
  136.  
  137.     Method SetDuration:Int(duration:Int)
  138.         Self.duration = duration
  139.     End Method
  140.  
  141.     Method SetValue:Int(startValue:Float, endValue:Float)
  142.         startt = startValue
  143.         change = endValue - startValue
  144.     End Method
  145.  
  146.     Method SetYoYo:Int(flag:Int)
  147.         isYoYo = flag
  148.     End Method
  149.  
  150.     Method SetLooping:Int(flag:Int)
  151.         isLooping = flag
  152.         End Method
  153.  
  154.     ' --- control methods ---
  155.     Method Start:Int()
  156.         ' --- this will re-start the tween ---
  157.         Rewind()
  158.         isActive = True
  159.         loopCount = 0
  160.     End Method
  161.  
  162.     Method Stop:Int()
  163.         ' --- stop the tween from updating ---
  164.                 If isActive
  165.                 isActive = False
  166.                         timePaused = Millisecs()
  167.                 EndIf
  168.     End Method
  169.  
  170.         Method Resume:Int()
  171.                 ' --- resume the tween from a paused state ---
  172.                 If isActive = False
  173.                         isActive = True
  174.        
  175.                         'update the start timer!
  176.                         'get difference
  177.                         Local difference:Int = timePaused - timeStart
  178.                        
  179.                         'update timestamps
  180.                         timeCurrent = Millisecs()
  181.                         timeStart = timeCurrent - difference
  182.                         timePrevious = timeCurrent
  183.                         timePaused = 0
  184.                        
  185.                         Print "difference = " + difference
  186.                         Print "timeStart = " + timeStart
  187.                 EndIf
  188.         End Method
  189.  
  190.     Method Rewind:Int()
  191.         ' --- put the tween at the start of its tween ---
  192.         timeCurrent = 0
  193.                 timePaused = 0
  194.         timeStart = Millisecs()
  195.         UpdateValue()
  196.     End Method
  197.  
  198.     Method FastForward:Int()
  199.         ' --- set the tween at the end ---
  200.         timeCurrent = duration
  201.         UpdateValue()
  202.         Stop()
  203.     End Method
  204.  
  205.     Method ContinueTo:Int(endValue:Float, duration:Int = 0)
  206.         ' --- change the end target for teh value
  207.         startt = Current
  208.         SetValue(startt, endValue)
  209.  
  210.         If isActive
  211.             'isActive so need to continue operation
  212.             If duration = 0
  213.                 'no duration specified so use previous duration!
  214.                 Self.duration = duration - timeCurrent
  215.             Else
  216.                 'override duration
  217.                 Self.duration = duration
  218.             Endif
  219.  
  220.             timeStart = Millisecs()
  221.             timeCurrent = 0
  222.  
  223.             If duration <= 0
  224.                 duration = 0
  225.                 Stop()
  226.             Endif
  227.         Else
  228.             If duration > 0 SetDuration(duration)
  229.             Start()
  230.         EndIf          
  231.     End Method
  232.  
  233.     Method YoYo:Int()
  234.         ContinueTo(startt)
  235.     End Method
  236.  
  237.     ' --- class methods ---
  238.     Method Update:Int()
  239.         If isActive
  240.             'update the current time!
  241.             timePrevious = timeCurrent
  242.             Local time:Int = MilliSecs() - timeStart
  243.  
  244.             If time > duration
  245.                 'time is beyond length of tween
  246.                 If isLooping Or isYoYo
  247.                     'increase the loop count
  248.                     loopCount:+1
  249.  
  250.                     'look at yoyoing the values
  251.                     If isYoYo
  252.                         timeCurrent = duration
  253.                         Current = startt + change
  254.  
  255.                         If isLooping Or loopCount <= 1
  256.                             ContinueTo(startt, duration)
  257.                         Else
  258.                             Stop()
  259.                         Endif
  260.                     Else
  261.                         'wrap around the tween to the start
  262.                         timeCurrent = 0'
  263.                         timeStart = Millisecs()
  264.                     Endif
  265.                 Else
  266.                     'set the tween to the end
  267.                     timeCurrent = duration
  268.                     Current = startt + change
  269.                     Stop()
  270.                 Endif
  271.             Else If time < 0
  272.                 'time is before the start of the tween
  273.                 timeCurrent = 0
  274.                 timeStart = Millisecs()
  275.                 UpdateValue()
  276.             Else
  277.                 'time is within the tween
  278.                 timeCurrent = time
  279.                 UpdateValue()
  280.             Endif
  281.         Endif
  282.     End Method
  283. End Type
  284.  
  285. Type TweenEquation
  286.     ' --- really just a grouping class for user access ---
  287.     Field EaseIn:TweenEquationCall
  288.     Field EaseOut:TweenEquationCall
  289.     Field EaseInOut:TweenEquationCall
  290.  
  291. End Type
  292.  
  293. Type TweenEquationCall
  294.     ' --- base class to provide a call function pointer work around ---
  295.     Method Call:Float(t:Float, b:Float, c:Float, d:Float) Abstract
  296.        
  297.         Function Pow:Float(a:Float, b:Float)
  298.                 Return a ^ b
  299.         End Function
  300.        
  301. End Type
  302.  
  303. ' ###########################################################################################################################
  304. ' #                                                                                                                    Linear
  305. ' ###########################################################################################################################
  306. Type TweenEquationCallLinear Extends TweenEquationCall
  307.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  308.         Return c*t/d + b
  309.     End Method
  310. End Type
  311.  
  312. ' ###########################################################################################################################
  313. ' #                                                                                                                      Sine
  314. ' ###########################################################################################################################
  315. Type TweenEquationSine Extends TweenEquation
  316.     Method New()
  317.         EaseIn = New TweenEquationCallSineEaseIn
  318.         EaseOut = New TweenEquationCallSineEaseOut
  319.         EaseInOut = New TweenEquationCallSineEaseInOut
  320.     End Method
  321. End Type
  322.  
  323. Type TweenEquationCallSineEaseIn Extends TweenEquationCall
  324.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  325.         Return - c * Cos((t / d * (Pi / 2)) * 57.2957795) + c + b
  326.     End Method
  327. End Type
  328.  
  329. Type TweenEquationCallSineEaseOut Extends TweenEquationCall
  330.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  331.         Return c * Sin((t/d * (PI/2)) * 57.2957795) + b
  332.     End Method
  333. End Type
  334.  
  335. Type TweenEquationCallSineEaseInOut Extends TweenEquationCall
  336.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  337.         Return -c/2 * (Cos((PI*t/d) * 57.2957795) - 1) + b
  338.     End Method
  339. End Type
  340.  
  341. ' ###########################################################################################################################
  342. ' #                                                                                                                     Quint
  343. ' ###########################################################################################################################
  344. Type TweenEquationQuint Extends TweenEquation
  345.     Method New()
  346.         EaseIn = New TweenEquationCallQuintEaseIn
  347.         EaseOut = New TweenEquationCallQuintEaseOut
  348.         EaseInOut = New TweenEquationCallQuintEaseInOut
  349.     End Method
  350. End Type
  351.  
  352. Type TweenEquationCallQuintEaseIn Extends TweenEquationCall
  353.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  354.         t:/d
  355.         Return c * t * t * t * t * t + b
  356.     End Method
  357. End Type
  358.  
  359. Type TweenEquationCallQuintEaseOut Extends TweenEquationCall
  360.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  361.         t = t / d - 1
  362.         Return c * (t * t * t * t * t + 1) + b
  363.     End Method
  364. End Type
  365.  
  366. Type TweenEquationCallQuintEaseInOut Extends TweenEquationCall
  367.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  368.                 t:/d / 2
  369.                 If t < 1 Return c / 2 * t * t * t * t * t + b
  370.         t:-2
  371.                 Return c / 2 * (t * t * t * t * t + 2) + b
  372.     End Method
  373. End Type
  374.  
  375. ' ###########################################################################################################################
  376. ' #                                                                                                                     Quart
  377. ' ###########################################################################################################################
  378. Type TweenEquationQuart Extends TweenEquation
  379.     Method New()
  380.         EaseIn = New TweenEquationCallQuartEaseIn
  381.         EaseOut = New TweenEquationCallQuartEaseOut
  382.         EaseInOut = New TweenEquationCallQuartEaseInOut
  383.     End Method
  384. End Type
  385.  
  386. Type TweenEquationCallQuartEaseIn Extends TweenEquationCall
  387.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  388.         t:/d
  389.         Return c * t * t * t * t + b
  390.     End Method
  391. End Type
  392.  
  393. Type TweenEquationCallQuartEaseOut Extends TweenEquationCall
  394.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  395.         t = t / d - 1
  396.         Return -c * (t * t * t * t - 1) + b
  397.     End Method
  398. End Type
  399.  
  400. Type TweenEquationCallQuartEaseInOut Extends TweenEquationCall
  401.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  402.         t:/d / 2
  403.                 If t < 1 Return c / 2 * t * t * t * t + b
  404.         t:-2
  405.                 Return -c / 2 * (t * t * t * t - 2) + b
  406.     End Method
  407. End Type
  408.  
  409. ' ###########################################################################################################################
  410. ' #                                                                                                                      Quad
  411. ' ###########################################################################################################################
  412. Type TweenEquationQuad Extends TweenEquation
  413.     Method New()
  414.         EaseIn = New TweenEquationCallQuadEaseIn
  415.         EaseOut = New TweenEquationCallQuadEaseOut
  416.         EaseInOut = New TweenEquationCallQuadEaseInOut
  417.     End Method
  418. End Type
  419.  
  420. Type TweenEquationCallQuadEaseIn Extends TweenEquationCall
  421.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  422.         t:/d
  423.         Return c * t * t + b
  424.     End Method
  425. End Type
  426.  
  427. Type TweenEquationCallQuadEaseOut Extends TweenEquationCall
  428.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  429.         t:/d
  430.         Return -c * t * (t - 2) + b
  431.     End Method
  432. End Type
  433.  
  434. Type TweenEquationCallQuadEaseInOut Extends TweenEquationCall
  435.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  436.         t:/d / 2
  437.                 If t < 1 Return c / 2 * t * t + b
  438.                 t:-1
  439.                 Return -c / 2 * (t * (t - 2) - 1) + b
  440.     End Method
  441. End Type
  442.  
  443. ' ###########################################################################################################################
  444. ' #                                                                                                                   Explode
  445. ' ###########################################################################################################################
  446. Type TweenEquationExpo Extends TweenEquation
  447.     Method New()
  448.         EaseIn = New TweenEquationCallExpoEaseIn
  449.         EaseOut = New TweenEquationCallExpoEaseOut
  450.         EaseInOut = New TweenEquationCallExpoEaseInOut
  451.     End Method
  452. End Type
  453.  
  454. Type TweenEquationCallExpoEaseIn Extends TweenEquationCall
  455.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  456.         If t = 0 Return b
  457.         Return c * Pow(2, 10 * (t / d - 1)) + b
  458.     End Method
  459. End Type
  460.  
  461. Type TweenEquationCallExpoEaseOut Extends TweenEquationCall
  462.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  463.         If t = d Return b + c
  464.         Return c * (-Pow(2, -10 * t / d) + 1) + b
  465.     End Method
  466. End Type
  467.  
  468. Type TweenEquationCallExpoEaseInOut Extends TweenEquationCall
  469.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  470.                 If t =0 Return b
  471.                 If t = d Return b + c
  472.                 t:/d / 2
  473.                 If t < 1 Return c / 2 * Pow(2, 10 * (t - 1)) + b
  474.                 t:-1
  475.                 Return c / 2 * (-Pow(2, -10 * t) + 2) + b
  476.     End Method
  477. End Type
  478.  
  479. ' ###########################################################################################################################
  480. ' #                                                                                                                     Cubic
  481. ' ###########################################################################################################################
  482. Type TweenEquationCubic Extends TweenEquation
  483.     Method New()
  484.         EaseIn = New TweenEquationCallCubicEaseIn
  485.         EaseOut = New TweenEquationCallCubicEaseOut
  486.         EaseInOut = New TweenEquationCallCubicEaseInOut
  487.     End Method
  488. End Type
  489.  
  490. Type TweenEquationCallCubicEaseIn Extends TweenEquationCall
  491.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  492.         t:/d
  493.         Return c * t * t * t + b
  494.     End Method
  495. End Type
  496.  
  497. Type TweenEquationCallCubicEaseOut Extends TweenEquationCall
  498.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  499.         t = t / d - 1
  500.         Return c * (t * t * t + 1) + b
  501.     End Method
  502. End Type
  503.  
  504. Type TweenEquationCallCubicEaseInOut Extends TweenEquationCall
  505.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  506.         t:/d / 2
  507.                 If t < 1 Return c / 2 * t * t * t + b
  508.                 t:-2
  509.                 Return c / 2 *(t * t * t + 2) + b
  510.     End Method
  511. End Type
  512.  
  513. ' ###########################################################################################################################
  514. ' #                                                                                                                      Circ
  515. ' ###########################################################################################################################
  516. Type TweenEquationCirc Extends TweenEquation
  517.     Method New()
  518.         EaseIn = New TweenEquationCallCircEaseIn
  519.         EaseOut = New TweenEquationCallCircEaseOut
  520.         EaseInOut = New TweenEquationCallCircEaseInOut
  521.     End Method
  522. End Type
  523.  
  524. Type TweenEquationCallCircEaseIn Extends TweenEquationCall
  525.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  526.         t:/d
  527.         Return - c * (Sqr(1 - t * t) - 1) + b
  528.     End Method
  529. End Type
  530.  
  531. Type TweenEquationCallCircEaseOut Extends TweenEquationCall
  532.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  533.         t = t / d - 1
  534.         Return c * Sqr(1 - t * t) + b
  535.     End Method
  536. End Type
  537.  
  538. Type TweenEquationCallCircEaseInOut Extends TweenEquationCall
  539.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  540.         t:/d / 2
  541.                 If t < 1 Return - c / 2 * (Sqr(1 - t * t) - 1) + b
  542.                 t:-2
  543.                 Return c / 2 * (Sqr(1 - t * t) + 1) + b
  544.     End Method
  545. End Type
  546.  
  547. ' ###########################################################################################################################
  548. ' #                                                                                                                    Bounce
  549. ' ###########################################################################################################################
  550. Type TweenEquationBounce Extends TweenEquation
  551.     Method New()
  552.         EaseIn = New TweenEquationCallBounceEaseIn
  553.         EaseOut = New TweenEquationCallBounceEaseOut
  554.         EaseInOut = New TweenEquationCallBounceEaseInOut
  555.     End Method
  556. End Type
  557.  
  558. Type TweenEquationCallBounceEaseIn Extends TweenEquationCall
  559.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  560.         t = (d-t) / d
  561.                 If t < 0.3636363
  562.                         Return c - (c * (7.5625 * t * t)) + b
  563.                 Else If t < 0.7272727
  564.             t:-0.5454545
  565.                         Return c - (c * (7.5625 * t * t + 0.75)) + b
  566.                 Else If t < 0.9090909
  567.             t:-0.8181818
  568.                         Return c - (c * (7.5625 * t * t + 0.9375)) + b
  569.                 Else
  570.             t:-0.9636363
  571.                         Return c - (c * (7.5625 * t * t + 0.984375)) + b
  572.         Endif
  573.     End Method
  574. End Type
  575.  
  576. Type TweenEquationCallBounceEaseOut Extends TweenEquationCall
  577.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  578.         t:/d
  579.                 If t < 0.3636363
  580.                         Return c *(7.5625 * t * t) + b
  581.                 Else If t < 0.7272727
  582.             t:-0.5454545
  583.                         Return c * (7.5625 * t * t + 0.75) + b
  584.                 Else If t < 0.9090909
  585.             t:-0.8181818
  586.                         Return c * (7.5625 * t * t + 0.9375) + b
  587.                 Else
  588.             t:-0.9636363
  589.                         Return c * (7.5625 * t * t + 0.984375) + b
  590.         Endif
  591.     End Method
  592. End Type
  593.  
  594. Type TweenEquationCallBounceEaseInOut Extends TweenEquationCall
  595.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  596.                 If t < d/2
  597.             t = (d - t * 2) / d
  598.                 If t < 0.3636363
  599.                         Return (c - (c * (7.5625 * t * t))) * 0.5 + b
  600.                 Else If t < 0.7272727
  601.                 t:-0.5454545
  602.                         Return (c - (c * (7.5625 * t * t + 0.75))) * 0.5 + b
  603.                 Else If t < 0.9090909
  604.                 t:-0.8181818
  605.                         Return (c - (c * (7.5625 * t * t + 0.9375))) * 0.5 + b
  606.                 Else
  607.                 t:-0.9636363
  608.                         Return (c - (c * (7.5625 * t * t + 0.984375))) * 0.5 + b
  609.             Endif
  610.         Else
  611.             t = (t * 2 - d) / d
  612.                 If t < 0.3636363
  613.                         Return (c *(7.5625 * t * t)) * 0.5 + c * 0.5 + b
  614.                 Else If t < 0.7272727
  615.                 t:-0.5454545
  616.                         Return (c * (7.5625 * t * t + 0.75)) * 0.5 + c * 0.5 + b
  617.                 Else If t < 0.9090909
  618.                 t:-0.8181818
  619.                         Return (c * (7.5625 * t * t + 0.9375)) * 0.5 + c * 0.5 + b
  620.                 Else
  621.                 t:-0.9636363
  622.                         Return (c * (7.5625 * t * t + 0.984375)) * 0.5 + c * 0.5 + b
  623.             Endif
  624.         Endif
  625.     End Method
  626. End Type
  627.  
  628. ' ###########################################################################################################################
  629. ' #                                                                                                                   Elastic
  630. ' ###########################################################################################################################
  631. Type TweenEquationElastic Extends TweenEquation
  632.     Method New()
  633.         EaseIn = New TweenEquationCallElasticEaseIn
  634.         EaseOut = New TweenEquationCallElasticEaseOut
  635.         EaseInOut = New TweenEquationCallElasticEaseInOut
  636.     End Method
  637. End Type
  638.  
  639. Type TweenEquationCallElasticEaseIn Extends TweenEquationCall
  640.     Field p:Float
  641.     Field a:Float
  642.     Field s:Float
  643.  
  644.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  645.                 If t = 0 Return b
  646.                 t:/d
  647.         If t = 1 Return b+c
  648.         p = d *  0.3
  649.                 a = c
  650.         s = p / 4
  651.         t:-1
  652.                 Return -(a * Pow(2,10 * (t)) * Sin(((t * d - s) * (2 * PI) / p) * 57.2957795)) + b
  653.     End Method
  654. End Type
  655.  
  656. Type TweenEquationCallElasticEaseOut Extends TweenEquationCall
  657.     Field p:Float
  658.     Field a:Float
  659.     Field s:Float
  660.  
  661.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  662.                 If t = 0 Return b
  663.                 t:/d
  664.         If t = 1 Return b+c
  665.         p = d * 0.3
  666.                 a = c
  667.         s = p / 4
  668.                 Return (a * Pow(2,-10 * t) * Sin(((t * d - s) * (2 * PI) / p) * 57.2957795) + c + b)
  669.     End Method
  670. End Type
  671.  
  672. Type TweenEquationCallElasticEaseInOut Extends TweenEquationCall
  673.     Field p:Float
  674.     Field a:Float
  675.     Field s:Float
  676.  
  677.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  678.                 If t = 0 Return b
  679.                 t:/d / 2
  680.         If t = 2 Return b+c
  681.         p = d * (0.3 * 1.5)
  682.                 a = c
  683.         s = p / 4
  684.                 If t < 1
  685.             t:-1
  686.             Return -0.5 * (a * Pow(2,10 * t) * Sin(((t * d - s) * (2 * PI) / p) * 57.2957795)) + b
  687.         Endif
  688.         t:-1
  689.                 Return a * Pow(2,-10 * t) * Sin(((t * d - s) * (2 * PI) / p) * 57.2957795) * 0.5 + c + b
  690.     End Method
  691. End Type
  692.  
  693. ' ###########################################################################################################################
  694. ' #                                                                                                                      Back
  695. ' ###########################################################################################################################
  696. Type TweenEquationBack Extends TweenEquation
  697.     Method New()
  698.         EaseIn = New TweenEquationCallBackEaseIn
  699.         EaseOut = New TweenEquationCallBackEaseOut
  700.         EaseInOut = New TweenEquationCallBackEaseInOut
  701.     End Method
  702. End Type
  703.  
  704. Type TweenEquationCallBackEaseIn Extends TweenEquationCall
  705.     Field s:Float = 1.70158
  706.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  707.         t:/d
  708.                 Return c * t * t * ((s + 1) * t - s) + b
  709.     End Method
  710. End Type
  711.  
  712. Type TweenEquationCallBackEaseOut Extends TweenEquationCall
  713.     Field s:Float = 1.70158
  714.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  715.         t:/d - 1
  716.                 Return c * (t * t * ((s + 1) * t + s) + 1) + b
  717.     End Method
  718. End Type
  719.  
  720. Type TweenEquationCallBackEaseInOut Extends TweenEquationCall
  721.     Field s:Float = 1.70158
  722.     Field s2:Float
  723.     Method Call:Float(t:Float,b:Float,c:Float,d:Float)
  724.         s2 = s
  725.         t:/d / 2
  726.         s2:*1.525
  727.                 If t < 1
  728.             Return c / 2 * (t * t *((s2+1) * t - s2)) + b
  729.         Endif
  730.                 t:-2
  731.                 Return c / 2 * (t * t * ((s2 + 1) * t + s2) + 2) + b
  732.     End Method
  733. End Type


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal