forked from: forked from: Flat Preloader

by raa forked from forked from: Flat Preloader (diff: 1)
♥0 | Line 87 | Modified 2016-02-11 02:04:07 | MIT License
play

ActionScript3 source code

/**
 * Copyright raa ( http://wonderfl.net/user/raa )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/SCfQ
 */

// forked from makc3d's forked from: Flat Preloader
// forked from WLAD's Flat Preloader
package {
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        [SWF(frameRate="60", backgroundColor="#000000")]
        public function FlashTest() {
            
            graphics.beginFill(0);
            graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
            graphics.endFill();
            
            // write as3 code here..
            
            var p:PreloaderAnimation = new PreloaderAnimation();
            
        addChild( p );
            
        p.x = ( stage.stageWidth >> 1 ) - 64;
        p.y = ( stage.stageHeight >> 1 ) - 64;
        }
    }
}



import com.greensock.easing.Cubic;
import com.greensock.TweenNano;
import flash.display.Shape;
    
class PreloaderAnimation extends Shape 
{
    public static var SIZE:Number = 126;
    public static var COLORS:Array = [ 0x04E152, 0xD8C90E, 0xE60000, 0x0A7DDC ];
    public static var DURATION:Number = 0.5;
    public static var DELAY:Number = 0.15;
    public static var RADIUS_RATIO:Number = 1 / 5;
    public static var RADIUS_MIN:Number = 0.6;
    
    public var value:Number = 0;
    
    private var t:Number;
    private var b:Number;
    private var c:Array;
    private var d:Number;
    private var s:Number;
    private var r:Number;
    private var m:Number;
    
    public function PreloaderAnimation() 
    {
        m = RADIUS_MIN;
        t = DURATION;
        d = DELAY;
        c = COLORS.slice();
        s = SIZE;
        r = s * RADIUS_RATIO;
        b = s - r;
        
        tween();
    }
    
    public function dispose():void
    {
        TweenNano.killTweensOf( this );
        graphics.clear();
        if ( parent ) parent.removeChild( this );
    }
    
    private function tween():void
    {
        // Reset tween 
        value = 0;
        
        // Cycle colors 
        c.unshift( c.pop() );
        
        // Tween 
        TweenNano.to( this, t, { 
            
            ease: Cubic.easeInOut,
            value : 1,
            onUpdate: render,
            onComplete: tween,
            delay: d
        });
    }
    
    private function render():void
    {
        graphics.clear();
        
        var x1:Number;
        var y1:Number;
        var x2:Number;
        var y2:Number;
        
        var f:Number = Math.abs( ( value - .5 ) * 2 );  
        
        for ( var i:int = 0; i < 4; i++ ) 
        {
            graphics.beginFill( c[i] );
            
            x1 = i == 0 || i == 3 ? r : b;
            y1 = i > 1 ? b : r;
            x2 = i > 1 ? r : b;
            y2 = x1;
            
            graphics.drawCircle(
                (x2-x1) * value + x1,
                (y2-y1) * value + y1,
                                // I couldn't quite get to the feel I had in my mind here
                r * m + ( (f + (i - 1) * 3 * (0.25 - (value - 0.5)*(value - 0.5))) * (1-m) * r )
            );
            
            graphics.endFill();
        }
    }
    
}