I've always been annoyed how when you are using any Tweening engine you have a minimal amount of code completion.
Here's a simple experiment to add some code completion to the "property" object of a TweenLite call.
/**
* Copyright MikkoH ( http://wonderfl.net/user/MikkoH )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/8re7
*/
package {
import flash.display.Shape;
import flash.display.Sprite;
import gs.TweenLite;
import gs.easing.Bounce;
import caurina.transitions.Tweener;
public class TLPropTest extends Sprite {
private var box:Shape=new Shape();
private var box2:Shape=new Shape();
public function TLPropTest() {
// write as3 code here..
init();
TweenLite.to(box, 3, DispProp.x(300).y(300).ease(Bounce.easeOut).getProp());
TweenLite.to(box2, 1.5, DispProp.x(320).y(300).delay(1.5).getProp());
}
private function init():void
{
box.graphics.beginFill(0xFF00FF, 1);
box.graphics.drawRect(-10, -10, 20, 20);
box2.graphics.beginFill(0x00FFFF, 1);
box2.graphics.drawRect(-10, -10, 20, 20);
addChild(box);
addChild(box2);
}
}
}
/*
The BaseTweenLiteProp should include the most basic properties eg. ease, onComplete, onUpdate
*/
class BaseTweenLiteProp implements IPropGenerator
{
protected var prop:Object={};
public function BaseTweenLiteProp()
{
}
/******************************************/
/******************************************/
/******* STATIC ****************/
/******************************************/
/******************************************/
public static function delay(value:Number):BaseTweenLiteProp
{
return getInstance().delay(value);
}
public static function ease(value:Function):BaseTweenLiteProp
{
return getInstance().ease(value);
}
public static function onComplete(value:Function):BaseTweenLiteProp
{
return getInstance().onComplete(value);
}
public static function onUpdate(value:Function):BaseTweenLiteProp
{
return getInstance().onUpdate(value);
}
private static function getInstance():BaseTweenLiteProp
{
return new BaseTweenLiteProp();
}
/******************************************/
/******************************************/
/******* MEMBER ****************/
/******************************************/
/******************************************/
public function delay(value:Number):BaseTweenLiteProp
{
prop.delay=value;
return this;
}
public function ease(value:Function):BaseTweenLiteProp
{
prop.ease=value;
return this;
}
public function onComplete(value:Function):BaseTweenLiteProp
{
prop.onComplete=value;
return this;
}
public function onUpdate(value:Function):BaseTweenLiteProp
{
prop.onUpdate=value;
return this;
}
public function getProp():Object
{
return prop;
}
}
/*
DispProp is used to Tween any display object properties.
EG. x, y, scaleX, scaleY, etc.
*/
class DispProp extends BaseTweenLiteProp
{
/******************************************/
/******* STATIC ****************/
/******************************************/
/******************************************/
public static function delay(value:Number):DispProp
{
return DispProp(getInstance().delay(value));
}
public static function ease(value:Function):DispProp
{
return DispProp(getInstance().ease(value));
}
public static function onComplete(value:Function):DispProp
{
return DispProp(getInstance().onComplete(value));
}
public static function onUpdate(value:Function):DispProp
{
return DispProp(getInstance().onUpdate(value));
}
public static function x(value:Number):DispProp
{
return getInstance().x(value);
}
public static function y(value:Number):DispProp
{
return getInstance().y(value);
}
private static function getInstance():DispProp
{
return new DispProp();
}
/******************************************/
/******************************************/
/******* MEMBER ****************/
/******************************************/
/******************************************/
public function x(value:Number):DispProp
{
prop.x=value;
return this;
}
public function y(value:Number):DispProp
{
prop.y=value;
return this;
}
}
interface IPropGenerator
{
function getProp():Object;
}