forked from: Flat Preloader

by makc3d forked from Flat Preloader (diff: 3)
♥0 | Line 87 | Modified 2015-08-17 22:28:09 | MIT License
play

ActionScript3 source code

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

// 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();
		}
	}
	
}

Forked