package { import caurina.transitions.Tweener; import flash.display.*; public class UndefinedLoader extends Sprite { private const NCIRCLES: int = 25; private const MIN_DURATION: Number = 1; private const MAX_DURATION: Number = 2.5; private const MIN_RADIUS:int = 2; private const MAX_RADIUS:int = 5; private const TRANSITION: String = "linear"; private var w:Number; private var h:Number; private var colors:Array = [0xFFFFFF]; private var circles:Array = new Array(); public function UndefinedLoader(w:Number, h:Number, colors:Array = null) { this.w = w; this.h = h; this.visible = false; if (colors != null) this.colors = colors; } public function start(): void { if (this.visible) return; // animazione gia` partita! this.visible = true; if (circles.length == 0) for (var i:int = 0; i < NCIRCLES; i++) { circles[i] = new Sprite(); addChild(circles[i]); } for (i = 0; i < circles.length; i++) tween(circles[i]); } private function tween(c:Sprite): void { if (!this.visible) { return; // fermiamo l'animazione. } var color:int = (colors.length == 1) ? colors[0] : Math.random()*(Math.abs(colors[1]-colors[0])); var time:Number = Math.random()*(MAX_DURATION - MIN_DURATION); var radius:Number = Math.random()*(MAX_RADIUS - MIN_RADIUS); var beta:Number = Math.random()*(2*Math.PI); c.alpha = 1; c.x = 0; c.y = 0; c.graphics.clear(); c.graphics.lineStyle(1, color, 1); c.graphics.drawCircle(w/2, h/2, radius); Tweener.addTween(c, {x:w/2*Math.cos(beta), y:h/2*Math.sin(beta), alpha:0, time:time, transition:TRANSITION, onComplete: tween, onCompleteParams:[c]} ); } public function stop(): void { this.visible = false; } public function get loading(): Boolean { return this.visible; } } }