# Source: utils/AnimationTimer.js

    /**
     * Animation timer should be used to run the update and render loops of the application.
     *
     * Underneat it uses the requestAnimationFrame() method that calls the function with the same rate as the screen refresh rate.
     *
     * @class
     * @param {Function} callback Timer callback function.
     */
    function AnimationTimer(callback)
    {
    	/**
    	 * Task of the timer, executed at the timer defined rate.
    	 *
    	 * @type {Function}
    	 */
    	this.callback = callback;

    	/**
    	 * Indicates if the timer is currently running, it is set to true on start and reset to false on stop.
    	 *
    	 * @type {boolean}
    	 */
    	this.running = false;

    	/**
    	 * ID of the currently waiting timeout clock. Used to cancel the already request execution of the next clock tick.
    	 *
    	 * @type {number}
    	 */
    	this.id = -1;
    }

    /**
     * Start timer, is the timer is already running does not do anything.
     */
    AnimationTimer.prototype.start = function()
    {
    	if(this.running)
    	{
    		return;
    	}

    	this.running = true;

    	var self = this;
    	function loop()
    	{
    		self.callback();

    		if(self.running)
    		{
    			self.id = requestAnimationFrame(loop);
    		}
    	}

    	loop();
    };

    /**
     * Stop animation timer, should be called when the render loop is no longer in use to prevent code/memory leaks.
     *
     * If the timer is not stopped the loop will keep running using processing power and consuming memory.
     */
    AnimationTimer.prototype.stop = function()
    {
    	this.running = false;
    	cancelAnimationFrame(this.id);
    };

    export {AnimationTimer};