@robotlegsjs/phaser
Version:
RobotlegsJS integration with Phaser Scene Manager
125 lines • 6.38 kB
JavaScript
"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