/** * @author Richard Davey * @copyright 2019 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser3-plugin-template/blob/master/LICENSE|MIT License} */ var Class = require('../utils/Class'); /** * @classdesc * A Global Plugin is installed just once into the Game owned Plugin Manager. * It can listen for Game events and respond to them. * * @class BasePlugin * @memberof Phaser.Plugins * @constructor * @since 3.8.0 * * @param {Phaser.Plugins.PluginManager} pluginManager - A reference to the Plugin Manager. */ var BasePlugin = new Class({ initialize: function BasePlugin (pluginManager) { /** * A handy reference to the Plugin Manager that is responsible for this plugin. * Can be used as a route to gain access to game systems and events. * * @name Phaser.Plugins.BasePlugin#pluginManager * @type {Phaser.Plugins.PluginManager} * @protected * @since 3.8.0 */ this.pluginManager = pluginManager; /** * A reference to the Game instance this plugin is running under. * * @name Phaser.Plugins.BasePlugin#game * @type {Phaser.Game} * @protected * @since 3.8.0 */ this.game = pluginManager.game; /** * A reference to the Scene that has installed this plugin. * Only set if it's a Scene Plugin, otherwise `null`. * This property is only set when the plugin is instantiated and added to the Scene, not before. * You cannot use it during the `init` method, but you can during the `boot` method. * * @name Phaser.Plugins.BasePlugin#scene * @type {?Phaser.Scene} * @protected * @since 3.8.0 */ this.scene; /** * A reference to the Scene Systems of the Scene that has installed this plugin. * Only set if it's a Scene Plugin, otherwise `null`. * This property is only set when the plugin is instantiated and added to the Scene, not before. * You cannot use it during the `init` method, but you can during the `boot` method. * * @name Phaser.Plugins.BasePlugin#systems * @type {?Phaser.Scenes.Systems} * @protected * @since 3.8.0 */ this.systems; }, /** * Called by the PluginManager when this plugin is first instantiated. * It will never be called again on this instance. * In here you can set-up whatever you need for this plugin to run. * If a plugin is set to automatically start then `BasePlugin.start` will be called immediately after this. * * @method Phaser.Plugins.BasePlugin#init * @since 3.8.0 * * @param {?any} [data] - A value specified by the user, if any, from the `data` property of the plugin's configuration object (if started at game boot) or passed in the PluginManager's `install` method (if started manually). */ init: function () { }, /** * Called by the PluginManager when this plugin is started. * If a plugin is stopped, and then started again, this will get called again. * Typically called immediately after `BasePlugin.init`. * * @method Phaser.Plugins.BasePlugin#start * @since 3.8.0 */ start: function () { // Here are the game-level events you can listen to. // At the very least you should offer a destroy handler for when the game closes down. // var eventEmitter = this.game.events; // eventEmitter.once('destroy', this.gameDestroy, this); // eventEmitter.on('pause', this.gamePause, this); // eventEmitter.on('resume', this.gameResume, this); // eventEmitter.on('resize', this.gameResize, this); // eventEmitter.on('prestep', this.gamePreStep, this); // eventEmitter.on('step', this.gameStep, this); // eventEmitter.on('poststep', this.gamePostStep, this); // eventEmitter.on('prerender', this.gamePreRender, this); // eventEmitter.on('postrender', this.gamePostRender, this); }, /** * Called by the PluginManager when this plugin is stopped. * The game code has requested that your plugin stop doing whatever it does. * It is now considered as 'inactive' by the PluginManager. * Handle that process here (i.e. stop listening for events, etc) * If the plugin is started again then `BasePlugin.start` will be called again. * * @method Phaser.Plugins.BasePlugin#stop * @since 3.8.0 */ stop: function () { }, /** * If this is a Scene Plugin (i.e. installed into a Scene) then this method is called when the Scene boots. * By this point the plugin properties `scene` and `systems` will have already been set. * In here you can listen for Scene events and set-up whatever you need for this plugin to run. * * @method Phaser.Plugins.BasePlugin#boot * @since 3.8.0 */ boot: function () { // Here are the Scene events you can listen to. // At the very least you should offer a destroy handler for when the Scene closes down. // var eventEmitter = this.systems.events; // eventEmitter.once('destroy', this.sceneDestroy, this); // eventEmitter.on('start', this.sceneStart, this); // eventEmitter.on('preupdate', this.scenePreUpdate, this); // eventEmitter.on('update', this.sceneUpdate, this); // eventEmitter.on('postupdate', this.scenePostUpdate, this); // eventEmitter.on('pause', this.scenePause, this); // eventEmitter.on('resume', this.sceneResume, this); // eventEmitter.on('sleep', this.sceneSleep, this); // eventEmitter.on('wake', this.sceneWake, this); // eventEmitter.on('shutdown', this.sceneShutdown, this); // eventEmitter.on('destroy', this.sceneDestroy, this); }, /** * Game instance has been destroyed. * You must release everything in here, all references, all objects, free it all up. * * @method Phaser.Plugins.BasePlugin#destroy * @since 3.8.0 */ destroy: function () { this.pluginManager = null; this.game = null; this.scene = null; this.systems = null; } }); module.exports = BasePlugin;