codice:
import mx.transitions.*;
import mx.transitions.easing.*;
import gs.TweenLite;
class ScaleSquare {
private var __target:MovieClip;
private var __width:Number;
private var __height:Number;
private var __xSections:Number;
private var __ySections:Number;
private var __sections:Number;
private var __time:Number;
private var __singleTime:Number;
private var __random:Boolean;
private var __easeType;
private var __intv:Number;
public var onMotionFinished:Function;
function ScaleSquare(target:MovieClip, xSections:Number, ySections:Number, width:Number, height:Number, random:Boolean, easeType:Function, duration:Number, singleTime:Number) {
var path = this;
if (target != undefined) {
__target = target;
path['endOff'](__target);
__width = width;
__height = height;
__xSections = xSections;
__ySections = ySections;
__sections = __xSections*__ySections;
__random = random;
__easeType = easeType;
__time = (duration != undefined) ? (duration*1000)/__sections : 1000/__sections;
__singleTime = (singleTime==undefined) ? 1: singleTime;
drawMask(__target, __xSections, __ySections, __sections, __width, __height, __random, __easeType);
}
}
private function drawSquare(target:MovieClip, name:String, level:Number, wdt:Number, hgt:Number, col:Number, x:Number, y:Number) {
target.createEmptyMovieClip(name, level);
with (target[name]) {
lineStyle(0, col, 0);
moveTo(0, 0);
beginFill(col);
lineTo(wdt, 0);
lineTo(wdt, hgt);
lineTo(0, hgt);
lineTo(0, 0);
endFill();
_x = x;
_y = y;
}
}
private function drawMask(target:MovieClip, xSections:Number, ySections:Number, sections:Number, width:Number, height:Number, random:Boolean, easeType:Function) {
target._parent.createEmptyMovieClip("masch"+target._name, target._parent.getNextHighestDepth());
var sec_wdt:Number = Math.ceil(width/xSections);
var sec_hgt:Number = Math.ceil(height/ySections);
target._parent["masch"+target._name]._x = target._x+sec_wdt/2;
target._parent["masch"+target._name]._y = target._y+sec_hgt/2;
for (var i = 1; i<=sections; i++) {
target._parent["masch"+target._name].createEmptyMovieClip("square"+i, i);
var square:MovieClip = target._parent["masch"+target._name]["square"+i];
square._xscale = square._yscale=0;
drawSquare(square, "sq", 1, sec_wdt, sec_hgt, 0x00, -sec_wdt/2, -sec_hgt/2);
if (i != 1) {
var squareP:MovieClip = target._parent["masch"+target._name]["square"+Number(i-1)];
if (squareP._x<width-sec_wdt) {
square._x = squareP._x+sec_wdt;
square._y = squareP._y;
} else {
square._x = 0;
square._y = squareP._y+sec_hgt;
}
}
}
target.setMask(target._parent["masch"+target._name]);
var path:Object = this;
path['sec_arr'] = new Array();
for (var r = 0; r<sections; r++) {
path['sec_arr'][r] = r+1;
}
if (!random) {
var index:Number = 1;
path['__intv'] = setInterval(function () {
path['animateMask'](target, random, path['sec_arr'], index, sections, target._parent["masch"+target._name]["square"+index], easeType);
index++;
if (index>sections) {
clearInterval(path['__intv']);
}
}, __time);
} else {
path['__intv'] = setInterval(function () {
var impr:Number = Math.floor(Math.random()*path['sec_arr'].length);
var index = path['sec_arr'][impr]
path['sec_arr'].splice(impr, 1);
path['animateMask'](target, random, path['sec_arr'], index, sections, target._parent["masch"+target._name]["square"+index], easeType);
if (path['sec_arr'].length<1) {
clearInterval(path['__intv']);
}
}, __time);
}
}
private function animateMask(target:MovieClip, random:Boolean, ver_arr:Array, index:Number, sections:Number, mc:MovieClip, easeType:Function) {
var path = this;
var oggTween:Object=new Object()
oggTween._xscale=100
oggTween._yscale=100
oggTween.ease=easeType
if (!random) {
if (index == sections) {
oggTween.onCompleteParams=[target, path]
oggTween.onComplete=chiudi
}
} else {
if (ver_arr.length < 1) {
oggTween.onCompleteParams=[target, path]
oggTween.onComplete=chiudi
}
}
TweenLite.to(mc, __singleTime, oggTween)
}
private function chiudi(target, path){
path['endOff'](target);
}
private function endOff(target:MovieClip) {
target.setMask(null);
for (var prop in target._parent["masch"+target._name]) {
if (typeof (target._parent["masch"+target._name][prop]) == "movieclip") {
target._parent["masch"+target._name][prop].removeMovieClip();
}
}
target._parent["masch"+target._name].removeMovieClip();
this['onMotionFinished']();
}
}