diff --git a/src/loader/LoaderPlugin.js b/src/loader/LoaderPlugin.js index 4eadb973f..c2eaded2c 100644 --- a/src/loader/LoaderPlugin.js +++ b/src/loader/LoaderPlugin.js @@ -13,36 +13,6 @@ var GetFastValue = require('../utils/object/GetFastValue'); var PluginManager = require('../boot/PluginManager'); var XHRSettings = require('./XHRSettings'); -/** - * @typedef {object} MultiFileObject - * - * @property {string} type - [description] - * @property {Phaser.Loader.File} fileA - [description] - * @property {Phaser.Loader.File} fileB - [description] - */ - -/** - * @typedef {object} LoaderFileObject - * - * @property {string} key - [description] - * @property {string} type - [description] - * @property {string} [url] - [description] - * @property {string[]} [urls] - [description] - * @property {string} [textureURL] - [description] - * @property {string} [atlasURL] - [description] - * @property {string} [xmlURL] - [description] - * @property {string[]} [textureURLs] - [description] - * @property {string[]} [atlasURLs] - [description] - * @property {object} [config] - [description] - * @property {object} [json] - [description] - * @property {XHRSettingsObject} [xhrSettings] - [description] - * @property {XHRSettingsObject} [textureXhrSettings] - [description] - * @property {XHRSettingsObject} [atlasXhrSettings] - [description] - * @property {XHRSettingsObject} [xmlXhrSettings] - [description] - * @property {XHRSettingsObject} [audioXhrSettings] - [description] - * @property {XHRSettingsObject} [jsonXhrSettings] - [description] - */ - /** * @classdesc * The Loader handles loading all external content such as Images, Sounds, Texture Atlases and data files. @@ -483,6 +453,16 @@ var LoaderPlugin = new Class({ return this; }, + /** + * This event is fired when a Loader successfully begins to load its queue. + * + * @event Phaser.Loader.LoaderPlugin#addFileEvent + * @param {string} key - The key of the file that was added. + * @param {string} type - The type of the file that was added. + * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that had the file added to it. + * @param {Phaser.Loader.File} loader - The File object that was added to the Loader. + */ + /** * Adds a file, or array of files, into the load queue. * @@ -495,6 +475,7 @@ var LoaderPlugin = new Class({ * however you can call this as long as the file given to it is well formed. * * @method Phaser.Loader.LoaderPlugin#addFile + * @fires Phaser.Loader.LoaderPlugin#addFileEvent * @since 3.0.0 * * @param {(Phaser.Loader.File|Phaser.Loader.File[])} file - The file, or array of files, to be added to the load queue. @@ -516,6 +497,8 @@ var LoaderPlugin = new Class({ { this.list.set(item); + this.emit('addfile', item.key, item.type, this, item); + if (this.isLoading()) { this.totalToLoad++; diff --git a/src/loader/filetypes/ImageFile.js b/src/loader/filetypes/ImageFile.js index f4ef51b9f..8fa40b16f 100644 --- a/src/loader/filetypes/ImageFile.js +++ b/src/loader/filetypes/ImageFile.js @@ -11,9 +11,35 @@ var FileTypesManager = require('../FileTypesManager'); var GetFastValue = require('../../utils/object/GetFastValue'); var IsPlainObject = require('../../utils/object/IsPlainObject'); +/** + * @typedef {object} Phaser.Loader.FileTypes.ImageFrameConfig + * + * @property {integer} frameWidth - The width of the frame in pixels. + * @property {integer} [frameHeight] - The height of the frame in pixels. Uses the `frameWidth` value if not provided. + * @property {integer} [startFrame=0] - The first frame to start parsing from. + * @property {integer} [endFrame] - The frame to stop parsing at. If not provided it will calculate the value based on the image and frame dimensions. + * @property {integer} [margin=0] - The margin in the image. This is the space around the edge of the frames. + * @property {integer} [spacing=0] - The spacing between each frame in the image. + */ + +/** + * @typedef {object} Phaser.Loader.FileTypes.ImageFileConfig + * + * @property {string} key - The key of the file. Must be unique within both the Loader and the Texture Manager. + * @property {string} [url] - The absolute or relative URL to load the file from. + * @property {string} [extension='png'] - The default file extension to use if no url is provided. + * @property {string} [normalMap] - The filename of an associated normal map. It uses the same path and url to load as the image. + * @property {Phaser.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. Only provided for, and used by, Sprite Sheets. + * @property {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file. + */ + /** * @classdesc - * [description] + * A single Image File suitable for loading by the Loader. + * + * These are created when you use the Phaser.Loader.LoaderPlugin#image method and are not typically created directly. + * + * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#image. * * @class ImageFile * @extends Phaser.Loader.File @@ -21,11 +47,11 @@ var IsPlainObject = require('../../utils/object/IsPlainObject'); * @constructor * @since 3.0.0 * - * @param {(string|object)} key - The name of the asset to load or an object representing the asset - * @param {string} [url] - The asset's filename - * @param {string} [path] - The path the asset can be found in - * @param {XHRSettingsObject} [xhrSettings] - Optional image specific XHR settings - * @param {object} [frameConfig] - config can include: frameWidth, frameHeight, startFrame, endFrame, margin, spacing + * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file. + * @param {(string|Phaser.Loader.FileTypes.ImageFileConfig)} key - The key to use for this file, or a file configuration object. + * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `.png`, i.e. if `key` was "alien" then the URL will be "alien.png". + * @param {XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file. + * @param {Phaser.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. Only provided for, and used by, Sprite Sheets. */ var ImageFile = new Class({ @@ -82,6 +108,13 @@ var ImageFile = new Class({ } }, + /** + * Called automatically by Loader.nextFile. + * This method controls what extra work this File does with its loaded data. + * + * @method Phaser.Loader.FileTypes.ImageFile#onProcess + * @since 3.7.0 + */ onProcess: function () { this.state = CONST.FILE_PROCESSING; @@ -109,6 +142,12 @@ var ImageFile = new Class({ File.createObjectURL(this.data, this.xhrLoader.response, 'image/png'); }, + /** + * Adds this file to its target cache upon successful loading and processing. + * + * @method Phaser.Loader.FileTypes.ImageFile#addToCache + * @since 3.7.0 + */ addToCache: function () { var texture; @@ -141,21 +180,62 @@ var ImageFile = new Class({ }); /** - * Adds an Image file to the current load queue. + * Adds an Image, or array of Images, to the current load queue. * - * Note: This method will only be available if the Image File type has been built into Phaser. + * The file is **not** loaded immediately, it is added to a queue ready to be loaded either when the loader starts, + * or if it's already running, when the next free load slot becomes available. This means you cannot use the file + * immediately after calling this method, but instead my wait for the file to complete. + * + * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle. + * If you try to load an animated gif only the first frame will be rendered. Browsers do not natively support playback + * of animated gifs to Canvas elements. * - * The file is **not** loaded immediately after calling this method. - * Instead, the file is added to a queue within the Loader, which is processed automatically when the Loader starts. + * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load. + * The key should be unique both in terms of files being loaded and files already present in the Texture Manager. + * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file + * then remove it from the Texture Manager first, before loading a new one. + * + * Instead of passing arguments you can pass a configuration object, such as: + * + * ```javascript + * this.load.image({ + * key: 'logo', + * url: 'images/AtariLogo.png' + * }); + * ``` + * + * See the documentation for `Phaser.Loader.FileTypes.ImageFileConfig` for more details. + * + * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key: + * + * ```javascript + * this.load.image('logo', 'images/AtariLogo.png'); + * // and later in your game ... + * this.add.image(x, y, 'logo'); + * ``` + * + * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files + * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and + * this is what you would use to retrieve the image from the Texture Manager. + * + * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it. + * + * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is "alien" + * and no URL is given then the Loader will set the URL to be "alien.png". It will always add `.png` as the extension, although + * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL. + * + * Note: Th ability to load this type of file will only be available if the Image File type has been built into Phaser. + * It is available in the default build but can be excluded from custom builds. * * @method Phaser.Loader.LoaderPlugin#image + * @fires Phaser.Loader.LoaderPlugin#addFileEvent * @since 3.0.0 * - * @param {string} key - [description] - * @param {string} url - [description] - * @param {XHRSettingsObject} [xhrSettings] - [description] + * @param {(string|Phaser.Loader.FileTypes.ImageFileConfig|Phaser.Loader.FileTypes.ImageFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them. + * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `.png`, i.e. if `key` was "alien" then the URL will be "alien.png". + * @param {XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings. * - * @return {Phaser.Loader.LoaderPlugin} The Loader. + * @return {Phaser.Loader.LoaderPlugin} The Loader instance. */ FileTypesManager.register('image', function (key, url, xhrSettings) {