UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

204 lines (186 loc) 5.64 kB
/** * @author Richard Davey <rich@phaser.io> * @copyright 2013-2025 Phaser Studio Inc. * @license {@link https://opensource.org/licenses/MIT|MIT License} */ // Contains the plugins that Phaser uses globally and locally. // These are the source objects, not instantiated. var corePlugins = {}; // Contains the plugins that the dev has loaded into their game // These are the source objects, not instantiated. var customPlugins = {}; var PluginCache = {}; /** * @namespace Phaser.Plugins.PluginCache */ /** * Static method called directly by the Core internal Plugins. * Key is a reference used to get the plugin from the plugins object (i.e. InputPlugin) * Plugin is the object to instantiate to create the plugin * Mapping is what the plugin is injected into the Scene.Systems as (i.e. input) * * @method Phaser.Plugins.PluginCache.register * @since 3.8.0 * * @param {string} key - A reference used to get this plugin from the plugin cache. * @param {function} plugin - The plugin to be stored. Should be the core object, not instantiated. * @param {string} mapping - If this plugin is to be injected into the Scene Systems, this is the property key map used. * @param {boolean} [custom=false] - Core Scene plugin or a Custom Scene plugin? */ PluginCache.register = function (key, plugin, mapping, custom) { if (custom === undefined) { custom = false; } corePlugins[key] = { plugin: plugin, mapping: mapping, custom: custom }; }; /** * Stores a custom plugin in the global plugin cache. * The key must be unique, within the scope of the cache. * * @method Phaser.Plugins.PluginCache.registerCustom * @since 3.8.0 * * @param {string} key - A reference used to get this plugin from the plugin cache. * @param {function} plugin - The plugin to be stored. Should be the core object, not instantiated. * @param {string} mapping - If this plugin is to be injected into the Scene Systems, this is the property key map used. * @param {?any} data - A value to be passed to the plugin's `init` method. */ PluginCache.registerCustom = function (key, plugin, mapping, data) { customPlugins[key] = { plugin: plugin, mapping: mapping, data: data }; }; /** * Checks if the given key is already being used in the core plugin cache. * * @method Phaser.Plugins.PluginCache.hasCore * @since 3.8.0 * * @param {string} key - The key to check for. * * @return {boolean} `true` if the key is already in use in the core cache, otherwise `false`. */ PluginCache.hasCore = function (key) { return corePlugins.hasOwnProperty(key); }; /** * Checks if the given key is already being used in the custom plugin cache. * * @method Phaser.Plugins.PluginCache.hasCustom * @since 3.8.0 * * @param {string} key - The key to check for. * * @return {boolean} `true` if the key is already in use in the custom cache, otherwise `false`. */ PluginCache.hasCustom = function (key) { return customPlugins.hasOwnProperty(key); }; /** * Returns the core plugin object from the cache based on the given key. * * @method Phaser.Plugins.PluginCache.getCore * @since 3.8.0 * * @param {string} key - The key of the core plugin to get. * * @return {Phaser.Types.Plugins.CorePluginContainer} The core plugin object. */ PluginCache.getCore = function (key) { return corePlugins[key]; }; /** * Returns the custom plugin object from the cache based on the given key. * * @method Phaser.Plugins.PluginCache.getCustom * @since 3.8.0 * * @param {string} key - The key of the custom plugin to get. * * @return {Phaser.Types.Plugins.CustomPluginContainer} The custom plugin object. */ PluginCache.getCustom = function (key) { return customPlugins[key]; }; /** * Returns an object from the custom cache based on the given key that can be instantiated. * * @method Phaser.Plugins.PluginCache.getCustomClass * @since 3.8.0 * * @param {string} key - The key of the custom plugin to get. * * @return {function} The custom plugin object. */ PluginCache.getCustomClass = function (key) { return (customPlugins.hasOwnProperty(key)) ? customPlugins[key].plugin : null; }; /** * Removes a core plugin based on the given key. * * @method Phaser.Plugins.PluginCache.remove * @since 3.8.0 * * @param {string} key - The key of the core plugin to remove. */ PluginCache.remove = function (key) { if (corePlugins.hasOwnProperty(key)) { delete corePlugins[key]; } }; /** * Removes a custom plugin based on the given key. * * @method Phaser.Plugins.PluginCache.removeCustom * @since 3.8.0 * * @param {string} key - The key of the custom plugin to remove. */ PluginCache.removeCustom = function (key) { if (customPlugins.hasOwnProperty(key)) { delete customPlugins[key]; } }; /** * Removes all Core Plugins. * * This includes all of the internal system plugins that Phaser needs, like the Input Plugin and Loader Plugin. * So be sure you only call this if you do not wish to run Phaser again. * * @method Phaser.Plugins.PluginCache.destroyCorePlugins * @since 3.12.0 */ PluginCache.destroyCorePlugins = function () { for (var key in corePlugins) { if (corePlugins.hasOwnProperty(key)) { delete corePlugins[key]; } } }; /** * Removes all Custom Plugins. * * @method Phaser.Plugins.PluginCache.destroyCustomPlugins * @since 3.12.0 */ PluginCache.destroyCustomPlugins = function () { for (var key in customPlugins) { if (customPlugins.hasOwnProperty(key)) { delete customPlugins[key]; } } }; module.exports = PluginCache;