@robotlegsjs/phaser
Version:
RobotlegsJS integration with Phaser Scene Manager
96 lines • 4.01 kB
JavaScript
;
// ------------------------------------------------------------------------------
// 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.SceneMediatorManager = void 0;
/**
* @private
*/
var SceneMediatorManager = /** @class */ (function () {
/*============================================================================*/
/* Constructor */
/*============================================================================*/
/**
* @private
*/
function SceneMediatorManager(factory) {
this._autoRemoveMap = new Map();
this._factory = factory;
}
/*============================================================================*/
/* Public Functions */
/*============================================================================*/
/**
* @private
*/
SceneMediatorManager.prototype.addMediator = function (mediator, item, mapping) {
var scene = item;
// Watch scene for removal
if (scene && mapping.autoRemoveEnabled) {
if (!this._autoRemoveMap.has(scene.sys.settings.key)) {
this._autoRemoveMap.set(scene.sys.settings.key, scene);
}
scene.sys.events.on("destroy", this._onSceneDestroy, this);
scene.sys.events.on("shutdown", this._onSceneDestroy, this);
// scene.sys.events.on("sleep", this.onSceneDestroy, this);
// scene.sys.events.on("pause", this.onSceneDestroy, this);
}
// Synchronize with item life-cycle
this._initializeMediator(mediator, item);
};
/**
* @private
*/
SceneMediatorManager.prototype.removeMediator = function (mediator, item, mapping) {
this._destroyMediator(mediator);
};
/*============================================================================*/
/* Private Functions */
/*============================================================================*/
SceneMediatorManager.prototype._onSceneDestroy = function (sys) {
if (this._autoRemoveMap.has(sys.settings.key)) {
var scene = this._autoRemoveMap.get(sys.settings.key);
this._autoRemoveMap.delete(sys.settings.key);
this._factory.removeMediators(scene);
if (this._autoRemoveMap.size === 0) {
scene.sys.events.off("destroy", this._onSceneDestroy, this, false);
scene.sys.events.off("shutdown", this._onSceneDestroy, this, false);
}
}
};
SceneMediatorManager.prototype._initializeMediator = function (mediator, mediatedItem) {
if ("preInitialize" in mediator) {
mediator.preInitialize();
}
if ("scene" in mediator) {
mediator.scene = mediatedItem;
}
if ("initialize" in mediator) {
mediator.initialize();
}
if ("postInitialize" in mediator) {
mediator.postInitialize();
}
};
SceneMediatorManager.prototype._destroyMediator = function (mediator) {
if ("preDestroy" in mediator) {
mediator.preDestroy();
}
if ("destroy" in mediator) {
mediator.destroy();
}
if ("scene" in mediator) {
mediator.scene = null;
}
if ("postDestroy" in mediator) {
mediator.postDestroy();
}
};
return SceneMediatorManager;
}());
exports.SceneMediatorManager = SceneMediatorManager;
//# sourceMappingURL=SceneMediatorManager.js.map