UNPKG

@robotlegsjs/phaser

Version:

RobotlegsJS integration with Phaser Scene Manager

125 lines 6.38 kB
"use strict"; // ------------------------------------------------------------------------------ // Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. // // NOTICE: You are permitted to use, modify, and distribute this file // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ Object.defineProperty(exports, "__esModule", { value: true }); exports.SceneManagerObserver = void 0; var SceneRegistryEvent_1 = require("./SceneRegistryEvent"); /** * @private */ var SceneManagerObserver = /** @class */ (function () { /*============================================================================*/ /* Constructor */ /*============================================================================*/ /** * @private */ function SceneManagerObserver(sceneRegistry) { var _this = this; this._registry = sceneRegistry; // We only care about roots this._registry.addEventListener(SceneRegistryEvent_1.SceneRegistryEvent.ROOT_SCENE_MANAGER_ADD, this._onRootSceneManagerAdd, this); this._registry.addEventListener(SceneRegistryEvent_1.SceneRegistryEvent.ROOT_SCENE_MANAGER_REMOVE, this._onRootSceneManagerRemove, this); // We might have arrived late on the scene this._registry.rootBindings.forEach(function (binding) { _this._addRootListener(binding.sceneManager); }); } /*============================================================================*/ /* Public Functions */ /*============================================================================*/ /** * @private */ SceneManagerObserver.prototype.destroy = function () { var _this = this; this._registry.removeEventListener(SceneRegistryEvent_1.SceneRegistryEvent.ROOT_SCENE_MANAGER_ADD, this._onRootSceneManagerAdd, this); this._registry.removeEventListener(SceneRegistryEvent_1.SceneRegistryEvent.ROOT_SCENE_MANAGER_REMOVE, this._onRootSceneManagerRemove, this); this._registry.rootBindings.forEach(function (binding) { _this._removeRootListener(binding.sceneManager); }); }; /*============================================================================*/ /* Private Functions */ /*============================================================================*/ SceneManagerObserver.prototype._onRootSceneManagerAdd = function (event) { this._addRootListener(event.sceneManager); }; SceneManagerObserver.prototype._onRootSceneManagerRemove = function (event) { this._removeRootListener(event.sceneManager); }; SceneManagerObserver.prototype._addRootListener = function (sceneManager) { if (sceneManager) { sceneManager.createSceneFromInstance = this._patchCreateSceneMethod(sceneManager, sceneManager.createSceneFromInstance); sceneManager.createSceneFromFunction = this._patchCreateSceneMethod(sceneManager, sceneManager.createSceneFromFunction); sceneManager.createSceneFromObject = this._patchCreateSceneMethod(sceneManager, sceneManager.createSceneFromObject); this._patchGameObjectFactoryAddExistingMethod(sceneManager); } }; SceneManagerObserver.prototype._patchGameObjectFactoryAddExistingMethod = function (sceneManager) { var originalMethod = Phaser.GameObjects.GameObjectFactory.prototype.existing; var self = this; // eslint-disable-next-line @typescript-eslint/typedef Phaser.GameObjects.GameObjectFactory.prototype.existing = function (child) { if (child instanceof Phaser.GameObjects.Container) { var binding = self._registry.getBinding(sceneManager); if (binding) { binding.handleView(child, child.constructor); } } return originalMethod.apply(child.scene.sys.add, arguments); }; }; SceneManagerObserver.prototype._patchCreateSceneMethod = function (sceneManager, originalMethod) { var _this = this; return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var scene = originalMethod.apply(sceneManager, args); _this._onSceneInit(scene); return scene; }; }; SceneManagerObserver.prototype._onSceneInit = function (scene) { var rootBindings = this._registry.rootBindings; var sceneManager; for (var _i = 0, rootBindings_1 = rootBindings; _i < rootBindings_1.length; _i++) { var rootBinding = rootBindings_1[_i]; sceneManager = rootBinding.sceneManager; if (sceneManager) { var binding = this._registry.getBinding(scene.sys.game.scene); if (binding) { // this.events.emit('resume', this); // this.events.emit('wake', this); // this.events.emit('start', this); scene.sys.events.once("start", this._onSceneStart, this); } } } }; SceneManagerObserver.prototype._onSceneStart = function (sys) { sys.events.once("shutdown", this._onSceneShutdown, this); sys.events.once("destroy", this._onSceneDestroy, this); var binding = this._registry.getBinding(sys.game.scene); if (binding) { binding.handleScene(sys.scene, sys.scene.constructor); } }; SceneManagerObserver.prototype._onSceneShutdown = function (sys) { sys.events.once("start", this._onSceneStart, this); sys.events.off("destroy", this._onSceneDestroy, this, true); }; SceneManagerObserver.prototype._onSceneDestroy = function (sys) { sys.events.off("shutdown", this._onSceneStart, this, true); }; SceneManagerObserver.prototype._removeRootListener = function (container) { }; return SceneManagerObserver; }()); exports.SceneManagerObserver = SceneManagerObserver; //# sourceMappingURL=SceneManagerObserver.js.map