/** * @author Richard Davey * @copyright 2018 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ var Class = require('../utils/Class'); var PluginManager = require('../plugins/PluginManager'); /** * @classdesc * The Game Object Factory is a Scene plugin that allows you to quickly create many common * types of Game Objects and have them automatically registered with the Scene. * * Game Objects directly register themselves with the Factory and inject their own creation * methods into the class. * * @class GameObjectFactory * @memberOf Phaser.GameObjects * @constructor * @since 3.0.0 * * @param {Phaser.Scene} scene - The Scene to which this Game Object Factory belongs. */ var GameObjectFactory = new Class({ initialize: function GameObjectFactory (scene) { /** * The Scene to which this Game Object Factory belongs. * * @name Phaser.GameObjects.GameObjectFactory#scene * @type {Phaser.Scene} * @protected * @since 3.0.0 */ this.scene = scene; /** * A reference to the Scene.Systems. * * @name Phaser.GameObjects.GameObjectFactory#systems * @type {Phaser.Scenes.Systems} * @protected * @since 3.0.0 */ this.systems = scene.sys; if (!scene.sys.settings.isBooted) { scene.sys.events.once('boot', this.boot, this); } /** * A reference to the Scene Display List. * * @name Phaser.GameObjects.GameObjectFactory#displayList * @type {Phaser.GameObjects.DisplayList} * @protected * @since 3.0.0 */ this.displayList; /** * A reference to the Scene Update List. * * @name Phaser.GameObjects.GameObjectFactory#updateList; * @type {Phaser.GameObjects.UpdateList} * @protected * @since 3.0.0 */ this.updateList; }, /** * Boots the plugin. * * @method Phaser.GameObjects.GameObjectFactory#boot * @private * @since 3.0.0 */ boot: function () { this.displayList = this.systems.displayList; this.updateList = this.systems.updateList; var eventEmitter = this.systems.events; eventEmitter.on('shutdown', this.shutdown, this); eventEmitter.on('destroy', this.destroy, this); }, /** * Adds an existing Game Object to this Scene. * * If the Game Object renders, it will be added to the Display List. * If it has a `preUpdate` method, it will be added to the Update List. * * @method Phaser.GameObjects.GameObjectFactory#existing * @since 3.0.0 * * @param {Phaser.GameObjects.GameObject} child - The child to be added to this Scene. * * @return {Phaser.GameObjects.GameObject} The Game Object that was added. */ existing: function (child) { if (child.renderCanvas || child.renderWebGL) { this.displayList.add(child); } if (child.preUpdate) { this.updateList.add(child); } return child; }, /** * Shuts this plugin down. * * @method Phaser.GameObjects.GameObjectFactory#shutdown * @since 3.0.0 */ shutdown: function () { }, /** * Destroys this plugin. * * @method Phaser.GameObjects.GameObjectFactory#destroy * @since 3.0.0 */ destroy: function () { this.scene = null; this.displayList = null; this.updateList = null; } }); // Static method called directly by the Game Object factory functions GameObjectFactory.register = function (type, factoryFunction) { if (!GameObjectFactory.prototype.hasOwnProperty(type)) { GameObjectFactory.prototype[type] = factoryFunction; } }; PluginManager.register('GameObjectFactory', GameObjectFactory, 'add'); module.exports = GameObjectFactory;