Phaser.StateManager = function (game, pendingState){ this.game = game; this.states = { } ; this._pendingState = null ; if (typeof pendingState !== 'undefined' && pendingState !== null ) { this._pendingState = pendingState; } this._clearWorld = false ; this._clearCache = false ; this._created = false ; this._args = [] ; this.current = ''; this.onInitCallback = null ; this.onPreloadCallback = null ; this.onCreateCallback = null ; this.onUpdateCallback = null ; this.onRenderCallback = null ; this.onResizeCallback = null ; this.onPreRenderCallback = null ; this.onLoadUpdateCallback = null ; this.onLoadRenderCallback = null ; this.onPausedCallback = null ; this.onResumedCallback = null ; this.onPauseUpdateCallback = null ; this.onShutDownCallback = null ; } ; Phaser.StateManager.prototype = { boot: function (){ this.game.onPause.add(this.pause, this); this.game.onResume.add(this.resume, this); this.game.load.onLoadComplete.add(this.loadComplete, this); if (this._pendingState !== null ) { if (typeof this._pendingState !== 'string') { 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.onResizeCallback = null ; this.onPausedCallback = null ; this.onResumedCallback = null ; this.onPauseUpdateCallback = null ; } delete this.states[key]; } , start: function (key, clearWorld, clearCache){ if (typeof clearWorld === "undefined") { clearWorld = true ; } if (typeof clearCache === "undefined") { clearCache = false ; } if (this.checkState(key)) { this._pendingState = key; this._clearWorld = clearWorld; this._clearCache = clearCache; if (_AN_Read_length("length", arguments) > 3) { this._args = Array.prototype.splice.call(arguments, 3); } } } , restart: function (clearWorld, clearCache){ if (typeof clearWorld === "undefined") { clearWorld = true ; } if (typeof clearCache === "undefined") { clearCache = false ; } this._pendingState = this.current; this._clearWorld = clearWorld; this._clearCache = clearCache; if (_AN_Read_length("length", arguments) > 2) { this._args = Array.prototype.splice.call(arguments, 2); } } , dummy: function (){ } , preUpdate: function (){ if (this._pendingState && this.game.isBooted) { this.clearCurrentState(); this.setCurrentState(this._pendingState); if (this.current !== this._pendingState) { return ; } else { this._pendingState = null ; } if (this.onPreloadCallback) { this.game.load.reset(); this.onPreloadCallback.call(this.callbackContext, this.game); if (this.game.load.totalQueuedFiles() === 0 && this.game.load.totalQueuedPacks() === 0) { this.loadComplete(); } else { this.game.load.start(); } } else { this.loadComplete(); } } } , clearCurrentState: function (){ if (this.current) { if (this.onShutDownCallback) { this.onShutDownCallback.call(this.callbackContext, this.game); } this.game.tweens.removeAll(); this.game.camera.reset(); this.game.input.reset(true ); _AN_Call_clear("clear", this.game.physics); this.game.time.removeAll(); this.game.scale.reset(this._clearWorld); if (this.game.debug) { this.game.debug.reset(); } if (this._clearWorld) { this.game.world.shutdown(); if (this._clearCache === true ) { this.game.cache.destroy(); } } } } , checkState: function (key){ if (this.states[key]) { var valid = false ; if (this.states[key].preload) { valid = true ; } if (this.states[key].create) { valid = true ; } if (this.states[key].update) { valid = true ; } if (this.states[key].render) { valid = true ; } if (valid === false ) { console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"); 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].make = this.game.make; 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].state = this; 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].rnd = this.game.rnd; this.states[key].physics = this.game.physics; } , unlink: function (key){ if (this.states[key]) { this.states[key].game = null ; this.states[key].add = null ; this.states[key].make = null ; this.states[key].camera = null ; this.states[key].cache = null ; this.states[key].input = null ; this.states[key].load = null ; this.states[key].math = null ; this.states[key].sound = null ; this.states[key].scale = null ; this.states[key].state = null ; this.states[key].stage = null ; this.states[key].time = null ; this.states[key].tweens = null ; this.states[key].world = null ; this.states[key].particles = null ; this.states[key].rnd = null ; this.states[key].physics = null ; } } , 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.onResizeCallback = this.states[key].resize || null ; this.onPausedCallback = this.states[key].paused || null ; this.onResumedCallback = this.states[key].resumed || null ; this.onPauseUpdateCallback = this.states[key].pauseUpdate || null ; this.onShutDownCallback = this.states[key].shutdown || this.dummy; this.current = key; this._created = false ; this.onInitCallback.apply(this.callbackContext, this._args); if (key === this._pendingState) { this._args = [] ; } } , 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); } } , resume: function (){ if (this._created && this.onResumedCallback) { this.onResumedCallback.call(this.callbackContext, this.game); } } , 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); } } } , pauseUpdate: function (){ if (this._created && this.onPauseUpdateCallback) { this.onPauseUpdateCallback.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); } } , resize: function (width, height){ if (this.onResizeCallback) { this.onResizeCallback.call(this.callbackContext, width, height); } } , 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.clearCurrentState(); 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.onResumedCallback = null ; this.onPauseUpdateCallback = null ; this.game = null ; this.states = { } ; this._pendingState = null ; } } ; Phaser.StateManager.prototype.constructor = Phaser.StateManager;