Phaser.StateManager = function (game, pendingState){ this.game = game; this.states = { } ; this._pendingState = null ; if (typeof pendingState !== 'undefined' && pendingState !== null ) { this._pendingState = pendingState; } this._created = false ; this.current = ''; this.onInitCallback = null ; this.onPreloadCallback = null ; this.onCreateCallback = null ; this.onUpdateCallback = null ; this.onRenderCallback = null ; this.onPreRenderCallback = null ; this.onLoadUpdateCallback = null ; this.onLoadRenderCallback = null ; this.onPausedCallback = null ; this.onShutDownCallback = null ; } ; Phaser.StateManager.prototype = { boot: function (){ this.game.onPause.add(this.pause, this); this.game.onResume.add(this.resume, this); if (this._pendingState !== null ) { if (typeof this._pendingState === 'string') { this.start(this._pendingState, false , false ); } else { this.add('default', this._pendingState, true ); } } } , add: function (key, state, autoStart){ if (typeof autoStart === "undefined") { autoStart = false ; } var newState; if (state instanceof Phaser.State) { newState = state; } else if (typeof state === 'object') { newState = state; newState.game = this.game; } else if (typeof state === 'function') { newState = new state(this.game); } this.states[key] = newState; if (autoStart) { if (this.game.isBooted) { this.start(key); } else { this._pendingState = key; } } return newState; } , remove: function (key){ if (this.current == key) { this.callbackContext = null ; this.onInitCallback = null ; this.onShutDownCallback = null ; this.onPreloadCallback = null ; this.onLoadRenderCallback = null ; this.onLoadUpdateCallback = null ; this.onCreateCallback = null ; this.onUpdateCallback = null ; this.onRenderCallback = null ; this.onPausedCallback = null ; this.onDestroyCallback = null ; } delete this.states[key]; } , start: function (key, clearWorld, clearCache){ if (typeof clearWorld === "undefined") { clearWorld = true ; } if (typeof clearCache === "undefined") { clearCache = false ; } if (this.game.isBooted === false ) { this._pendingState = key; return ; } if (this.checkState(key) === false ) { return ; } else { if (this.current) { this.onShutDownCallback.call(this.callbackContext, this.game); } if (clearWorld) { this.game.tweens.removeAll(); this.game.world.destroy(); if (clearCache === true ) { this.game.cache.destroy(); } } this.setCurrentState(key); } if (this.onPreloadCallback) { this.game.load.reset(); this.onPreloadCallback.call(this.callbackContext, this.game); if (this.game.load.totalQueuedFiles() === 0) { this.game.loadComplete(); } else { this.game.load.start(); } } else { this.game.loadComplete(); } } , dummy: function (){ } , checkState: function (key){ if (this.states[key]) { var valid = false ; if (this.states[key].preload) { valid = true ; } if (valid === false && this.states[key].loadRender) { valid = true ; } if (valid === false && this.states[key].loadUpdate) { valid = true ; } if (valid === false && this.states[key].create) { valid = true ; } if (valid === false && this.states[key].update) { valid = true ; } if (valid === false && this.states[key].preRender) { valid = true ; } if (valid === false && this.states[key].render) { valid = true ; } if (valid === false && this.states[key].paused) { valid = true ; } if (valid === false ) { console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions."); return false ; } return true ; } else { console.warn("Phaser.StateManager - No state found with the key: " + key); return false ; } } , link: function (key){ this.states[key].game = this.game; this.states[key].add = this.game.add; this.states[key].camera = this.game.camera; this.states[key].cache = this.game.cache; this.states[key].input = this.game.input; this.states[key].load = this.game.load; this.states[key].math = this.game.math; this.states[key].sound = this.game.sound; this.states[key].scale = this.game.scale; this.states[key].stage = this.game.stage; this.states[key].time = this.game.time; this.states[key].tweens = this.game.tweens; this.states[key].world = this.game.world; this.states[key].particles = this.game.particles; this.states[key].physics = this.game.physics; this.states[key].rnd = this.game.rnd; } , setCurrentState: function (key){ this.callbackContext = this.states[key]; this.link(key); this.onInitCallback = this.states[key].init || this.dummy; this.onPreloadCallback = this.states[key].preload || null ; this.onLoadRenderCallback = this.states[key].loadRender || null ; this.onLoadUpdateCallback = this.states[key].loadUpdate || null ; this.onCreateCallback = this.states[key].create || null ; this.onUpdateCallback = this.states[key].update || null ; this.onPreRenderCallback = this.states[key].preRender || null ; this.onRenderCallback = this.states[key].render || null ; this.onPausedCallback = this.states[key].paused || null ; this.onShutDownCallback = this.states[key].shutdown || this.dummy; this.current = key; this._created = false ; this.onInitCallback.call(this.callbackContext, this.game); } , getCurrentState: function (){ return this.states[this.current]; } , loadComplete: function (){ if (this._created === false && this.onCreateCallback) { this._created = true ; this.onCreateCallback.call(this.callbackContext, this.game); } else { this._created = true ; } } , pause: function (){ if (this._created && this.onPausedCallback) { this.onPausedCallback.call(this.callbackContext, this.game, true ); } } , resume: function (){ if (this._created && this.onre) { this.onPausedCallback.call(this.callbackContext, this.game, false ); } } , update: function (){ if (this._created && this.onUpdateCallback) { this.onUpdateCallback.call(this.callbackContext, this.game); } else { if (this.onLoadUpdateCallback) { this.onLoadUpdateCallback.call(this.callbackContext, this.game); } } } , preRender: function (){ if (this.onPreRenderCallback) { this.onPreRenderCallback.call(this.callbackContext, this.game); } } , render: function (){ if (this._created && this.onRenderCallback) { if (this.game.renderType === Phaser.CANVAS) { this.game.context.save(); this.game.context.setTransform(1, 0, 0, 1, 0, 0); } this.onRenderCallback.call(this.callbackContext, this.game); if (this.game.renderType === Phaser.CANVAS) { this.game.context.restore(); } } else { if (this.onLoadRenderCallback) { this.onLoadRenderCallback.call(this.callbackContext, this.game); } } } , destroy: function (){ this.callbackContext = null ; this.onInitCallback = null ; this.onShutDownCallback = null ; this.onPreloadCallback = null ; this.onLoadRenderCallback = null ; this.onLoadUpdateCallback = null ; this.onCreateCallback = null ; this.onUpdateCallback = null ; this.onRenderCallback = null ; this.onPausedCallback = null ; this.onDestroyCallback = null ; this.game = null ; this.states = { } ; this._pendingState = null ; } } ; Phaser.StateManager.prototype.constructor = Phaser.StateManager;