API Docs for: 0.0.2
Show:

File: api/src/canvas/effect.js

ludo.canvas.Effect = new Class({

    fps:33,

    fly:function(el, x, y, duration){
        var start = this.getTranslate(el);
        this.execute('translate', el, [start.x, start.y],[start.y + x, start.y + y], duration);
    },

    /**
     * Animates back to translate(0,0)
     * @method flyBack
     * @param el
     * @param duration
     */
    flyBack:function(el, duration){
        var start = this.getTranslate(el);
        this.execute('translate', el, [start.x, start.y],[0,0], duration);
    },

    getTranslate:function(el){
        var ret = ludo.canvasEngine.getTransformation(el, 'translate');
        if(!ret)ret = {
            x:0,y:0
        };
        return ret;
    },

    execute:function(property, el, start, end, duration){
        duration = duration || .25;
        var ef = this.getEffectConfig(start, end, duration);
        this.executeStep(property, el, start, ef.steps, ef.count, 0 );
    },

    executeStep:function(property, el, current, increments, countSteps, stepIndex){
        for(var i = 0;i<increments.length;i++){
            current[i] += increments[i];
        }

        ludo.canvasEngine.setTransformation(el, property, current.join(' '));
        stepIndex ++;
        if(stepIndex < countSteps){
            this.executeStep.delay(this.fps, this, [
                property, el, current, increments, countSteps, stepIndex
            ]);
        }
    },

    getEffectConfig:function(start, end, duration){
        if(!ludo.util.isArray(start))start = [start];
        if(!ludo.util.isArray(end))end = [end];
        var countSteps = Math.round(duration * this.fps);
        var steps = [];
        for(var i=0;i<start.length;i++){
            steps.push((end[i] - start[i]) / countSteps);
        }

        return {
            steps: steps,
            count : countSteps
        }
    }
});