Phaser.StateManager = function (game, pendingState){ this.game = game; this.states = { } ; if (pendingState !== null ) { this._pendingState = pendingState; } } ; Phaser.StateManager.prototype = { game: null , _pendingState: null , _created: false , states: { } , current: '', onInitCallback: null , onPreloadCallback: null , onCreateCallback: null , onUpdateCallback: null , onRenderCallback: null , onPreRenderCallback: null , onLoadUpdateCallback: null , onLoadRenderCallback: null , onPausedCallback: null , onShutDownCallback: null , boot: function (){ 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); } 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); if (this.game.load.queueSize == 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].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); } , loadComplete: function (){ if (this._created == false && this.onCreateCallback) { this._created = true ; this.onCreateCallback.call(this.callbackContext); } else { this._created = true ; } } , update: function (){ if (this._created && this.onUpdateCallback) { this.onUpdateCallback.call(this.callbackContext); } else { if (this.onLoadUpdateCallback) { this.onLoadUpdateCallback.call(this.callbackContext); } } } , preRender: function (){ if (this.onPreRenderCallback) { this.onPreRenderCallback.call(this.callbackContext); } } , render: function (){ if (this._created && this.onRenderCallback) { this.onRenderCallback.call(this.callbackContext); } else { if (this.onLoadRenderCallback) { this.onLoadRenderCallback.call(this.callbackContext); } } } , 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 ; } } ;