/*
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);
}
}
}
}