var FPS = 30;

var isLoaded = false;
var fallCanvas;
var tics;

var renderer;
var emitter;
var intervalId;

var particleCount = 0;
var particleList = {};
var particleTic;

function main ()
{
    isLoaded = true;
    
    fallCanvas  = document.getElementById("particle-canvas");
    
    resizeCanvas();
    
    renderer    = new Renderer(fallCanvas);
    emitter     = new Emitter();
    tics        = Math.ceil(1000 / FPS);
    particleTic = tics / 1000;
    
    intervalId = window.setInterval(updateParticles, tics);
}

function resizeCanvas ()
{
    if (isLoaded) {
        fallCanvas.width    = window.innerWidth;
        fallCanvas.height   = window.innerHeight;
        
        if (renderer != null) {
            renderer.reset(fallCanvas);
        }
    }
}

function addParticle (particle)
{
    particleList[particle.id] = particle;
    renderer.addParticle(particle);
    ++particleCount;
}

function removeParticle (particle)
{
    delete particleList[particle.id];
    renderer.removeParticle(particle);
    --particleCount;
}

function updateParticles ()
{
    emitter.update();
    renderer.redraw();
    
    for (var id in particleList) {
        var particle = particleList[id];
    
        particle.update(particleTic);
    
        if (particle.y > window.innerHeight + 10) {
            removeParticle(particle);
        }
    }
}
