/* VERSION: 1.02 DATE: 2/8/2009 ACTIONSCRIPT VERSION: 3.0 UPDATES & MORE DETAILED DOCUMENTATION AT: http://www.TweenMax.com DESCRIPTION: Slightly faster way to change a DisplayObject's x, y, width, height, scaleX, scaleY, and/or rotation value(s). You'd likely only see a difference if/when tweening very large quantities of objects. USAGE: import gs.*; import gs.plugins.*; TweenPlugin.activate([FastTransformPlugin]); //only do this once in your SWF to activate the plugin TweenLite.to(mc, 1, {fastTransform:{x:50, y:300, width:200, height:30}}); 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.*; public class FastTransformPlugin extends TweenPlugin { public static const VERSION:Number = 1.02; public static const API:Number = 1.0; //If the API/Framework for plugins changes in the future, this number helps determine compatibility protected var _target:DisplayObject; protected var xStart:Number; protected var xChange:Number = 0; protected var yStart:Number; protected var yChange:Number = 0; protected var widthStart:Number; protected var widthChange:Number = 0; protected var heightStart:Number; protected var heightChange:Number = 0; protected var scaleXStart:Number; protected var scaleXChange:Number = 0; protected var scaleYStart:Number; protected var scaleYChange:Number = 0; protected var rotationStart:Number; protected var rotationChange:Number = 0; public function FastTransformPlugin() { super(); this.propName = "fastTransform"; this.overwriteProps = []; } override public function onInitTween($target:Object, $value:*, $tween:TweenLite):Boolean { _target = $target as DisplayObject; if ("x" in $value) { xStart = _target.x; xChange = (typeof($value.x) == "number") ? $value.x - _target.x : Number($value.x); this.overwriteProps[this.overwriteProps.length] = "x"; } if ("y" in $value) { yStart = _target.y; yChange = (typeof($value.y) == "number") ? $value.y - _target.y : Number($value.y); this.overwriteProps[this.overwriteProps.length] = "y"; } if ("width" in $value) { widthStart = _target.width; widthChange = (typeof($value.width) == "number") ? $value.width - _target.width : Number($value.width); this.overwriteProps[this.overwriteProps.length] = "width"; } if ("height" in $value) { heightStart = _target.height; heightChange = (typeof($value.height) == "number") ? $value.height - _target.height : Number($value.height); this.overwriteProps[this.overwriteProps.length] = "height"; } if ("scaleX" in $value) { scaleXStart = _target.scaleX; scaleXChange = (typeof($value.scaleX) == "number") ? $value.scaleX - _target.scaleX : Number($value.scaleX); this.overwriteProps[this.overwriteProps.length] = "scaleX"; } if ("scaleY" in $value) { scaleYStart = _target.scaleY; scaleYChange = (typeof($value.scaleY) == "number") ? $value.scaleY - _target.scaleY : Number($value.scaleY); this.overwriteProps[this.overwriteProps.length] = "scaleY"; } if ("rotation" in $value) { rotationStart = _target.rotation; rotationChange = (typeof($value.rotation) == "number") ? $value.rotation - _target.rotation : Number($value.rotation); this.overwriteProps[this.overwriteProps.length] = "rotation"; } return true; } override public function killProps($lookup:Object):void { for (var p:String in $lookup) { if (p + "Change" in this && !isNaN(this[p + "Change"])) { this[p + "Change"] = 0; } } super.killProps($lookup); } override public function set changeFactor($n:Number):void { if (xChange != 0) { _target.x = xStart + ($n * xChange); } if (yChange != 0) { _target.y = yStart + ($n * yChange); } if (widthChange != 0) { _target.width = widthStart + ($n * widthChange); } if (heightChange != 0) { _target.height = heightStart + ($n * heightChange); } if (scaleXChange != 0) { _target.scaleX = scaleXStart + ($n * scaleXChange); } if (scaleYChange != 0) { _target.scaleY = scaleYStart + ($n * scaleYChange); } if (rotationChange != 0) { _target.rotation = rotationStart + ($n * rotationChange); } } } }