/** * @author Mat Groves http://matgroves.com/ @Doormat23 */ /** * A Class that loads a bunch of images / sprite sheet / bitmap font files. Once the * assets have been loaded they are added to the PIXI Texture cache and can be accessed * easily through PIXI.Texture.fromImage() and PIXI.Sprite.fromImage() * When all items have been loaded this class will dispatch a "onLoaded" event * As each individual item is loaded this class will dispatch a "onProgress" event * * @class AssetLoader * @constructor * @uses EventTarget * @param {Array<String>} assetURLs an array of image/sprite sheet urls that you would like loaded * supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported * sprite sheet data formats only include "JSON" at this time. Supported bitmap font * data formats include "xml" and "fnt". * @param crossorigin {Boolean} Whether requests should be treated as crossorigin */ PIXI.AssetLoader = function(assetURLs, crossorigin) { PIXI.EventTarget.call(this); /** * The array of asset URLs that are going to be loaded * * @property assetURLs * @type Array<String> */ this.assetURLs = assetURLs; /** * Whether the requests should be treated as cross origin * * @property crossorigin * @type Boolean */ this.crossorigin = crossorigin; /** * Maps file extension to loader types * * @property loadersByType * @type Object */ this.loadersByType = { "jpg": PIXI.ImageLoader, "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, "json": PIXI.JsonLoader, "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; }; /** * Fired when an item has loaded * @event onProgress */ /** * Fired when all the assets have loaded * @event onComplete */ // constructor PIXI.AssetLoader.prototype.constructor = PIXI.AssetLoader; /** * Starts loading the assets sequentially * * @method load */ PIXI.AssetLoader.prototype.load = function() { var scope = this; function onLoad() { scope.onAssetLoaded(); } this.loadCount = this.assetURLs.length; for (var i = 0, l = this.assetURLs.length; i < l; i++) { var fileName = this.assetURLs[i]; var fileType = fileName.split(".").pop().toLowerCase(); var Constructor = this.loadersByType[fileType]; if(!Constructor) throw new Error(fileType + " is an unsupported file type"); var loader = new Constructor(fileName, this.crossorigin); loader.addEventListener("loaded", onLoad); loader.load(); } }; /** * Invoked after each file is loaded * * @method onAssetLoaded * @private */ PIXI.AssetLoader.prototype.onAssetLoaded = function() { this.loadCount--; this.dispatchEvent({type: "onProgress", content: this}); if (this.onProgress) this.onProgress(); if (!this.loadCount) { this.dispatchEvent({type: "onComplete", content: this}); if(this.onComplete) this.onComplete(); } };