In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Calling Tweenlite With Code Completion

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.
Get Adobe Flash player
by MikkoH 06 Nov 2010
    Embed
/**
 * 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;
}