Preloader class

Class for loading assets (images, sound, json, javascript, css)

by Oliver Caldwell

HTML

<ol id='output'></ol>

JavaScript

/**
 * @preserve Class for loading assets (images, sound, video, json, jsonp, javascript, css)
 * Provides an x out of y value and a percentage on progress
 * And lets you know when everything is done
 * Great for preloading all game assets
 * 
 * Requires MooTools and MooTools More (Assets, Reqest.JSONP)
 * 
 * Copyright Oliver Caldwell 2011 (olivercaldwell.co.uk)
 */
var Preloader = new Class({
    Implements: [Options, Events],
    options: {
        images: {},
        sounds: {},
        videos: {},
        json: {},
        jsonp: {},
        scripts: {},
        stylesheets: {}
    },
    initialize: function(options) {
        this.setOptions(options);
    },
    load: function() {
        // Initialise variables
        var assetCount = 0,
            completedCount = 0,
            startTime = new Date().getTime(),
            loaded = {
                images: {},
                sounds: {},
                videos: {},
                json: {},
                jsonp: {},
                scripts: {},
                stylesheets: {}
            },
            handleProgress = function() {
                completedCount += 1;
                this.fireEvent('progress', [completedCount, assetCount, 100 / assetCount * completedCount]);
                
                if(completedCount === assetCount) {
                    this.fireEvent('complete', [loaded, assetCount, new Date().getTime() - startTime]);
                }
            }.bind(this);
        
        // Fire the start event
        this.fireEvent('start', [assetCount]);
        
        // Count all items
        Object.each(this.options, function(assetObject) {
            assetCount += Object.getLength(assetObject);
        });
        
        // Load images
        Object.each(this.options.images, function(path, name) {
            loaded.images[name] = Asset.image(path, {
                onLoad: handleProgress
            });
        });
        
        // Load sounds
       ...