import mx.transitions.*; import mx.transitions.easing.*; 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 __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) { 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; 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._xsections) { 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 tweenX = new Tween(mc, "_xscale", easeType, 0, 100, 30, false); var tweenY = new Tween(mc, "_yscale", easeType, 0, 100, 30, false); if (!random) { if (index == sections) { tweenX.onMotionFinished = function() { path['endOff'](target); }; } } else { if (ver_arr.length < 1) { tweenX.onMotionFinished = function() { 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'](); } }