/* VERSION: 1.01 DATE: 1/10/2009 ACTIONSCRIPT VERSION: 3.0 (AS2 version is also available) UPDATES & MORE DETAILED DOCUMENTATION AT: http://www.TweenMax.com DESCRIPTION: Tweens numbers in an Array. USAGE: import gs.*; import gs.plugins.*; TweenPlugin.activate([EndArrayPlugin]); //only do this once in your SWF to activate the plugin (it is already activated in TweenLite and TweenMax by default) var myArray:Array = [1,2,3,4]; TweenMax.to(myArray, 1.5, {endArray:[10,20,30,40]}); BYTES ADDED TO SWF: 278 (not including dependencies) AUTHOR: Jack Doyle, jack@greensock.com Copyright 2009, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for corporate Club GreenSock members, the software agreement that was issued with the corporate membership. */ package gs.plugins { import flash.display.*; import gs.*; import gs.utils.tween.*; public class EndArrayPlugin extends TweenPlugin { public static const VERSION:Number = 1.01; public static const API:Number = 1.0; //If the API/Framework for plugins changes in the future, this number helps determine compatibility protected var _a:Array; protected var _info:Array = []; public function EndArrayPlugin() { super(); this.propName = "endArray"; //name of the special property that the plugin should intercept/manage this.overwriteProps = ["endArray"]; } override public function onInitTween($target:Object, $value:*, $tween:TweenLite):Boolean { if (!($target is Array) || !($value is Array)) { return false; } init($target as Array, $value); return true; } public function init($start:Array, $end:Array):void { _a = $start; for (var i:int = $end.length - 1; i > -1; i--) { if ($start[i] != $end[i] && $start[i] != null) { _info[_info.length] = new ArrayTweenInfo(i, _a[i], $end[i] - _a[i]); } } } override public function set changeFactor($n:Number):void { var i:int, ti:ArrayTweenInfo; if (this.round) { var val:Number, neg:int; for (i = _info.length - 1; i > -1; i--) { ti = _info[i]; val = ti.start + (ti.change * $n); neg = (val < 0) ? -1 : 1; _a[ti.index] = ((val % 1) * neg > 0.5) ? int(val) + neg : int(val); //twice as fast as Math.round() } } else { for (i = _info.length - 1; i > -1; i--) { ti = _info[i]; _a[ti.index] = ti.start + (ti.change * $n); } } } } }