All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scaffold.libs_as.starling.animation.Transitions.as Maven / Gradle / Ivy

// =================================================================================================
//
//	Starling Framework
//	Copyright 2011-2015 Gamua. All Rights Reserved.
//
//	This program is free software. You can redistribute and/or modify it
//	in accordance with the terms of the accompanying license agreement.
//
// =================================================================================================
//
// easing functions thankfully taken from http://dojotoolkit.org
//                                    and http://www.robertpenner.com/easing
//

package starling.animation
{
    import flash.utils.Dictionary;

    import starling.errors.AbstractClassError;

    /** The Transitions class contains static methods that define easing functions.
     *  Those functions are used by the Tween class to execute animations.
     * 
     *  

Here is a visual representation of the available transitions:

* * *

You can define your own transitions through the "registerTransition" function. A * transition function must have the following signature, where ratio is * in the range 0-1:

* *
function myTransition(ratio:Number):Number
*/ public class Transitions { public static const LINEAR:String = "linear"; public static const EASE_IN:String = "easeIn"; public static const EASE_OUT:String = "easeOut"; public static const EASE_IN_OUT:String = "easeInOut"; public static const EASE_OUT_IN:String = "easeOutIn"; public static const EASE_IN_BACK:String = "easeInBack"; public static const EASE_OUT_BACK:String = "easeOutBack"; public static const EASE_IN_OUT_BACK:String = "easeInOutBack"; public static const EASE_OUT_IN_BACK:String = "easeOutInBack"; public static const EASE_IN_ELASTIC:String = "easeInElastic"; public static const EASE_OUT_ELASTIC:String = "easeOutElastic"; public static const EASE_IN_OUT_ELASTIC:String = "easeInOutElastic"; public static const EASE_OUT_IN_ELASTIC:String = "easeOutInElastic"; public static const EASE_IN_BOUNCE:String = "easeInBounce"; public static const EASE_OUT_BOUNCE:String = "easeOutBounce"; public static const EASE_IN_OUT_BOUNCE:String = "easeInOutBounce"; public static const EASE_OUT_IN_BOUNCE:String = "easeOutInBounce"; private static var sTransitions:Dictionary; /** @private */ public function Transitions() { throw new AbstractClassError(); } /** Returns the transition function that was registered under a certain name. */ public static function getTransition(name:String):Function { if (sTransitions == null) registerDefaults(); return sTransitions[name]; } /** Registers a new transition function under a certain name. */ public static function register(name:String, func:Function):void { if (sTransitions == null) registerDefaults(); sTransitions[name] = func; } private static function registerDefaults():void { sTransitions = new Dictionary(); register(LINEAR, linear); register(EASE_IN, easeIn); register(EASE_OUT, easeOut); register(EASE_IN_OUT, easeInOut); register(EASE_OUT_IN, easeOutIn); register(EASE_IN_BACK, easeInBack); register(EASE_OUT_BACK, easeOutBack); register(EASE_IN_OUT_BACK, easeInOutBack); register(EASE_OUT_IN_BACK, easeOutInBack); register(EASE_IN_ELASTIC, easeInElastic); register(EASE_OUT_ELASTIC, easeOutElastic); register(EASE_IN_OUT_ELASTIC, easeInOutElastic); register(EASE_OUT_IN_ELASTIC, easeOutInElastic); register(EASE_IN_BOUNCE, easeInBounce); register(EASE_OUT_BOUNCE, easeOutBounce); register(EASE_IN_OUT_BOUNCE, easeInOutBounce); register(EASE_OUT_IN_BOUNCE, easeOutInBounce); } // transition functions protected static function linear(ratio:Number):Number { return ratio; } protected static function easeIn(ratio:Number):Number { return ratio * ratio * ratio; } protected static function easeOut(ratio:Number):Number { var invRatio:Number = ratio - 1.0; return invRatio * invRatio * invRatio + 1; } protected static function easeInOut(ratio:Number):Number { return easeCombined(easeIn, easeOut, ratio); } protected static function easeOutIn(ratio:Number):Number { return easeCombined(easeOut, easeIn, ratio); } protected static function easeInBack(ratio:Number):Number { var s:Number = 1.70158; return Math.pow(ratio, 2) * ((s + 1.0)*ratio - s); } protected static function easeOutBack(ratio:Number):Number { var invRatio:Number = ratio - 1.0; var s:Number = 1.70158; return Math.pow(invRatio, 2) * ((s + 1.0)*invRatio + s) + 1.0; } protected static function easeInOutBack(ratio:Number):Number { return easeCombined(easeInBack, easeOutBack, ratio); } protected static function easeOutInBack(ratio:Number):Number { return easeCombined(easeOutBack, easeInBack, ratio); } protected static function easeInElastic(ratio:Number):Number { if (ratio == 0 || ratio == 1) return ratio; else { var p:Number = 0.3; var s:Number = p/4.0; var invRatio:Number = ratio - 1; return -1.0 * Math.pow(2.0, 10.0*invRatio) * Math.sin((invRatio-s)*(2.0*Math.PI)/p); } } protected static function easeOutElastic(ratio:Number):Number { if (ratio == 0 || ratio == 1) return ratio; else { var p:Number = 0.3; var s:Number = p/4.0; return Math.pow(2.0, -10.0*ratio) * Math.sin((ratio-s)*(2.0*Math.PI)/p) + 1; } } protected static function easeInOutElastic(ratio:Number):Number { return easeCombined(easeInElastic, easeOutElastic, ratio); } protected static function easeOutInElastic(ratio:Number):Number { return easeCombined(easeOutElastic, easeInElastic, ratio); } protected static function easeInBounce(ratio:Number):Number { return 1.0 - easeOutBounce(1.0 - ratio); } protected static function easeOutBounce(ratio:Number):Number { var s:Number = 7.5625; var p:Number = 2.75; var l:Number; if (ratio < (1.0/p)) { l = s * Math.pow(ratio, 2); } else { if (ratio < (2.0/p)) { ratio -= 1.5/p; l = s * Math.pow(ratio, 2) + 0.75; } else { if (ratio < 2.5/p) { ratio -= 2.25/p; l = s * Math.pow(ratio, 2) + 0.9375; } else { ratio -= 2.625/p; l = s * Math.pow(ratio, 2) + 0.984375; } } } return l; } protected static function easeInOutBounce(ratio:Number):Number { return easeCombined(easeInBounce, easeOutBounce, ratio); } protected static function easeOutInBounce(ratio:Number):Number { return easeCombined(easeOutBounce, easeInBounce, ratio); } protected static function easeCombined(startFunc:Function, endFunc:Function, ratio:Number):Number { if (ratio < 0.5) return 0.5 * startFunc(ratio*2.0); else return 0.5 * endFunc((ratio-0.5)*2.0) + 0.5; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy