﻿
function class_EffectsManager() {
    // active effects list
    this.vp_effectList = new Array();
    // effects framerate
    this.vp_frameRate = 20;

    this.f_newEffect = function(a_effectObject) {
        this.vp_effectList.push(a_effectObject);

        a_effectObject.f_init();

        if (this.vp_effectList.length == 1) 
        {
            this.f_effectLoop();
        }
    };




    this.f_remove = function(a_effectObject) {
        for (var v_i = 0; v_i < this.vp_effectList.length; v_i++) {
            if (this.vp_effectList[v_i] == a_effectObject) 
            {
                var v_effect = this.vp_effectList[v_i];
                this.vp_effectList.splice(v_i, 1);
                v_effect.f_cleanUp(); 
                break;
            }

        }
        return null;
    };
    
    
    this.f_getById = function(a_id)
    {
        for(var v_i=0;v_i<this.vp_effectList.length;v_i++)
        {
            if(this.vp_effectList[v_i].vp_id == a_id) return this.vp_effectList[v_i];
        }
        return null;
    };


    this.f_effectLoop = function() {
        for (var v_i = 0; v_i < this.vp_effectList.length; v_i++) {
            // run the effect. if return false. remove from the list
            var v_effect = this.vp_effectList[v_i];
            if (!v_effect.f_run()) {
                this.vp_effectList.splice(v_i, 1);
                v_i--;
                v_effect.f_cleanUp();
            }
        }
        if (this.vp_effectList.length > 0) {
            setTimeout("f_staticEffectLoop()", this.vp_frameRate);
        }
    };
};

function f_staticEffectLoop() {
    // call the class based
    m_app.vp_EffectsManager.f_effectLoop();
};


function class_BaseEffect() 
{

    this.f_init = function()
    {
       
    };


    this.f_run = function() 
    {
    };

    this.f_cleanUp = function() {
    };
    


};




