var Class = require('../utils/Class'); var PluginManager = require('../plugins/PluginManager'); /** * @classdesc * The Game Object Creator is a Scene plugin that allows you to quickly create many common * types of Game Objects and return them. Unlike the Game Object Factory, they are not automatically * added to the Scene. * * Game Objects directly register themselves with the Creator and inject their own creation * methods into the class. * * @class GameObjectCreator * @memberOf Phaser.GameObjects * @constructor * @since 3.0.0 * * @param {Phaser.Scene} scene - The Scene to which this Game Object Factory belongs. */ var GameObjectCreator = new Class({ initialize: function GameObjectCreator (scene) { /** * The Scene to which this Game Object Creator belongs. * * @name Phaser.GameObjects.GameObjectCreator#scene * @type {Phaser.Scene} * @protected * @since 3.0.0 */ this.scene = scene; /** * A reference to the Scene.Systems. * * @name Phaser.GameObjects.GameObjectCreator#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.GameObjectCreator#displayList * @type {Phaser.GameObjects.DisplayList} * @protected * @since 3.0.0 */ this.displayList; /** * A reference to the Scene Update List. * * @name Phaser.GameObjects.GameObjectCreator#updateList; * @type {Phaser.GameObjects.UpdateList} * @protected * @since 3.0.0 */ this.updateList; }, /** * Boots the plugin. * * @method Phaser.GameObjects.GameObjectCreator#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); }, /** * Shuts this plugin down. * * @method Phaser.GameObjects.GameObjectCreator#shutdown * @since 3.0.0 */ shutdown: function () { }, /** * Destroys this plugin. * * @method Phaser.GameObjects.GameObjectCreator#destroy * @since 3.0.0 */ destroy: function () { this.scene = null; this.displayList = null; this.updateList = null; } }); // Static method called directly by the Game Object creator functions GameObjectCreator.register = function (type, factoryFunction) { if (!GameObjectCreator.prototype.hasOwnProperty(type)) { GameObjectCreator.prototype[type] = factoryFunction; } }; PluginManager.register('GameObjectCreator', GameObjectCreator, 'make'); module.exports = GameObjectCreator;