diff --git a/Gruntfile.js b/Gruntfile.js
index 64646566..09d7c5a4 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -70,6 +70,7 @@ module.exports = function (grunt) {
'src/core/Stage.js',
'src/core/Group.js',
'src/core/World.js',
+ 'src/core/ScaleManager.js',
'src/core/Game.js',
'src/input/Input.js',
@@ -100,7 +101,6 @@ module.exports = function (grunt) {
'src/gameobjects/BitmapFont.js',
'src/system/Canvas.js',
- 'src/system/StageScaleMode.js',
'src/system/Device.js',
'src/system/RequestAnimationFrame.js',
diff --git a/README.md b/README.md
index be9497c2..140dedb5 100644
--- a/README.md
+++ b/README.md
@@ -78,6 +78,8 @@ Significant API changes:
* Keyboard.removeKey has been removed. The way the new keyboard manager works means it's no longer required.
* When a game un-pauses (from a visibility loss) it resets all Input components.
* Time.advancedTiming is a new boolean property. If true Time.fps, fpsMin, fpsMax, frames, msMin and msMax will be calculated, otherwise they remain at their defaults.
+* Phaser.StageScaleMode has been renamed to ScaleManager and moved from the system folder to the core folder. It's still available under game.scale.
+* If your game references the old Phaser.StageScaleMode consts like SHOW_ALL you need to update them to Phaser.ScaleManager, i.e. Phaser.ScaleManager.SHOW_ALL.
New features:
diff --git a/build/config.php b/build/config.php
index 52ee0cc0..b9aabfcb 100644
--- a/build/config.php
+++ b/build/config.php
@@ -117,6 +117,7 @@
+
@@ -146,7 +147,6 @@
-
diff --git a/examples/_site/view_full.html b/examples/_site/view_full.html
index 47985140..1bbe7649 100644
--- a/examples/_site/view_full.html
+++ b/examples/_site/view_full.html
@@ -71,6 +71,7 @@
+
@@ -101,7 +102,6 @@
-
diff --git a/examples/_site/view_lite.html b/examples/_site/view_lite.html
index 0455a4e3..b9b3c73d 100644
--- a/examples/_site/view_lite.html
+++ b/examples/_site/view_lite.html
@@ -71,6 +71,7 @@
+
@@ -101,7 +102,6 @@
-
diff --git a/examples/wip/autoscroll.js b/examples/wip/autoscroll.js
index 08164fb5..21debbb7 100644
--- a/examples/wip/autoscroll.js
+++ b/examples/wip/autoscroll.js
@@ -20,6 +20,10 @@ function create() {
sprite = game.add.tileSprite(0, 0, 800, 600, 'starfield');
sprite.autoScroll(0, 200);
+ game.add.image(200, 200, 'mummy');
+
+ game.world.scale.set(2);
+
}
function update() {
diff --git a/examples/wip/destroy state swap.js b/examples/wip/destroy state swap.js
new file mode 100644
index 00000000..1566d92a
--- /dev/null
+++ b/examples/wip/destroy state swap.js
@@ -0,0 +1,36 @@
+
+var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
+
+function preload() {
+
+ game.load.spritesheet('mummy', 'assets/sprites/metalslug_mummy37x45.png', 37, 45, 18);
+
+}
+
+var mummy;
+var anim;
+
+function create() {
+
+ game.stage.backgroundColor = 0xff8855;
+
+ mummy = game.add.sprite(300, 200, 'mummy', 5);
+
+ mummy.animations.updateIfVisible = false;
+
+ anim = mummy.animations.add('walk');
+
+ anim.play(2, false);
+ // anim.play(2, true);
+
+}
+
+function update() {
+
+}
+
+function render() {
+
+ game.debug.renderText(anim.frame + ' / 17', 32, 32);
+
+}
\ No newline at end of file
diff --git a/examples/wip/destroy state.js b/examples/wip/destroy state.js
new file mode 100644
index 00000000..82733818
--- /dev/null
+++ b/examples/wip/destroy state.js
@@ -0,0 +1,77 @@
+var BasicGame = {};
+
+BasicGame.Boot = function (game) {
+};
+
+BasicGame.Boot.prototype = {
+
+ preload: function () {
+
+ this.load.spritesheet('mummy', 'assets/sprites/metalslug_mummy37x45.png', 37, 45, 18);
+
+ },
+
+ create: function () {
+
+ this.state.start('MainMenu');
+
+ }
+
+};
+
+BasicGame.MainMenu = function (game) {
+
+ this.mummy;
+ this.anim;
+
+};
+
+BasicGame.MainMenu.prototype = {
+
+ create: function () {
+
+ this.stage.backgroundColor = 0x2d2d2d;
+
+ this.mummy = this.add.sprite(200, 400, 'mummy');
+
+ this.anim = this.mummy.animations.add('walk');
+
+ this.anim.play(10, false);
+
+ this.mummy.events.onAnimationComplete.add(this.changeIt, this);
+
+ },
+
+ changeIt: function () {
+
+ this.state.start('GameOver');
+
+ }
+
+};
+
+BasicGame.GameOver = function (game) {
+
+ this.dude;
+
+};
+
+BasicGame.GameOver.prototype = {
+
+ create: function () {
+
+ this.stage.backgroundColor = 0xff7744;
+
+ this.dude = this.add.sprite(300, 300, 'mummy');
+
+ }
+
+};
+
+var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example');
+
+game.state.add('Boot', BasicGame.Boot);
+game.state.add('MainMenu', BasicGame.MainMenu);
+game.state.add('GameOver', BasicGame.GameOver);
+
+game.state.start('Boot');
diff --git a/examples/wip/state parameters.js b/examples/wip/state parameters.js
index 32fc5881..c88ba121 100644
--- a/examples/wip/state parameters.js
+++ b/examples/wip/state parameters.js
@@ -89,4 +89,4 @@ game.state.add('Boot', BasicGame.Boot);
game.state.add('Preloader', BasicGame.Preloader);
game.state.add('MainMenu', BasicGame.MainMenu);
-game.state.start('Boot', true, false, 'hello', 'world');
+game.state.start('Boot');
diff --git a/resources/Project Templates/Basic/Boot.js b/resources/Project Templates/Basic/Boot.js
index ec45e6e2..2c7ec303 100644
--- a/resources/Project Templates/Basic/Boot.js
+++ b/resources/Project Templates/Basic/Boot.js
@@ -1,4 +1,4 @@
-BasicGame = {};
+var BasicGame = {};
BasicGame.Boot = function (game) {
@@ -17,33 +17,33 @@ BasicGame.Boot.prototype = {
create: function () {
// Unless you specifically know your game needs to support multi-touch I would recommend setting this to 1
- this.game.input.maxPointers = 1;
+ this.input.maxPointers = 1;
// Phaser will automatically pause if the browser tab the game is in loses focus. You can disable that here:
- this.game.stage.disableVisibilityChange = true;
+ this.stage.disableVisibilityChange = true;
if (this.game.device.desktop)
{
// If you have any desktop specific settings, they can go in here
- this.game.stage.scale.pageAlignHorizontally = true;
+ this.scale.pageAlignHorizontally = true;
}
else
{
// Same goes for mobile settings.
// In this case we're saying "scale the game, no lower than 480x260 and no higher than 1024x768"
- this.game.stage.scaleMode = Phaser.StageScaleMode.SHOW_ALL;
- this.game.stage.scale.minWidth = 480;
- this.game.stage.scale.minHeight = 260;
- this.game.stage.scale.maxWidth = 1024;
- this.game.stage.scale.maxHeight = 768;
- this.game.stage.scale.forceLandscape = true;
- this.game.stage.scale.pageAlignHorizontally = true;
- this.game.stage.scale.setScreenSize(true);
+ this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
+ this.scale.minWidth = 480;
+ this.scale.minHeight = 260;
+ this.scale.maxWidth = 1024;
+ this.scale.maxHeight = 768;
+ this.scale.forceLandscape = true;
+ this.scale.pageAlignHorizontally = true;
+ this.scale.setScreenSize(true);
}
// By this point the preloader assets have loaded to the cache, we've set the game settings
// So now let's start the real preloader going
- this.game.state.start('Preloader');
+ this.state.start('Preloader');
}
diff --git a/resources/Project Templates/Basic/Game.js b/resources/Project Templates/Basic/Game.js
index 6190533d..ed01da7c 100644
--- a/resources/Project Templates/Basic/Game.js
+++ b/resources/Project Templates/Basic/Game.js
@@ -13,7 +13,8 @@ BasicGame.Game = function (game) {
this.sound; // the sound manager - add a sound, play one, set-up markers, etc
this.stage; // the game stage
this.time; // the clock
- this.tweens; // the tween manager
+ this.tweens; // the tween manager
+ this.state; // the state manager
this.world; // the game world
this.particles; // the particle manager
this.physics; // the physics manager
@@ -44,7 +45,7 @@ BasicGame.Game.prototype = {
// Stop music, delete sprites, purge caches, free resources, all that good stuff.
// Then let's go back to the main menu.
- this.game.state.start('MainMenu');
+ this.state.start('MainMenu');
}
diff --git a/resources/Project Templates/Basic/MainMenu.js b/resources/Project Templates/Basic/MainMenu.js
index fe2a1ae1..7e8c2378 100644
--- a/resources/Project Templates/Basic/MainMenu.js
+++ b/resources/Project Templates/Basic/MainMenu.js
@@ -35,7 +35,7 @@ BasicGame.MainMenu.prototype = {
this.music.stop();
// And start the actual game
- this.game.state.start('Game');
+ this.state.start('Game');
}
diff --git a/resources/Project Templates/Basic/Preloader.js b/resources/Project Templates/Basic/Preloader.js
index 1eefba51..e0a16ef9 100644
--- a/resources/Project Templates/Basic/Preloader.js
+++ b/resources/Project Templates/Basic/Preloader.js
@@ -53,7 +53,7 @@ BasicGame.Preloader.prototype = {
if (this.cache.isSoundDecoded('titleMusic') && this.ready == false)
{
this.ready = true;
- this.game.state.start('MainMenu');
+ this.state.start('MainMenu');
}
}
diff --git a/resources/Project Templates/Full Screen Mobile/src/Boot.js b/resources/Project Templates/Full Screen Mobile/src/Boot.js
index 80f96731..9ad03474 100644
--- a/resources/Project Templates/Full Screen Mobile/src/Boot.js
+++ b/resources/Project Templates/Full Screen Mobile/src/Boot.js
@@ -26,37 +26,37 @@ BasicGame.Boot.prototype = {
create: function () {
- this.game.input.maxPointers = 1;
- this.game.stage.disableVisibilityChange = true;
+ this.input.maxPointers = 1;
+ this.stage.disableVisibilityChange = true;
if (this.game.device.desktop)
{
- this.game.stage.scaleMode = Phaser.StageScaleMode.SHOW_ALL;
- this.game.stage.scale.minWidth = 480;
- this.game.stage.scale.minHeight = 260;
- this.game.stage.scale.maxWidth = 1024;
- this.game.stage.scale.maxHeight = 768;
- this.game.stage.scale.pageAlignHorizontally = true;
- this.game.stage.scale.pageAlignVertically = true;
- this.game.stage.scale.setScreenSize(true);
+ this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
+ this.scale.minWidth = 480;
+ this.scale.minHeight = 260;
+ this.scale.maxWidth = 1024;
+ this.scale.maxHeight = 768;
+ this.scale.pageAlignHorizontally = true;
+ this.scale.pageAlignVertically = true;
+ this.scale.setScreenSize(true);
}
else
{
- this.game.stage.scaleMode = Phaser.StageScaleMode.SHOW_ALL;
- this.game.stage.scale.minWidth = 480;
- this.game.stage.scale.minHeight = 260;
- this.game.stage.scale.maxWidth = 1024;
- this.game.stage.scale.maxHeight = 768;
- this.game.stage.scale.pageAlignHorizontally = true;
- this.game.stage.scale.pageAlignVertically = true;
- this.game.stage.scale.forceOrientation(true, false);
- this.game.stage.scale.hasResized.add(this.gameResized, this);
- this.game.stage.scale.enterIncorrectOrientation.add(this.enterIncorrectOrientation, this);
- this.game.stage.scale.leaveIncorrectOrientation.add(this.leaveIncorrectOrientation, this);
- this.game.stage.scale.setScreenSize(true);
+ this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
+ this.scale.minWidth = 480;
+ this.scale.minHeight = 260;
+ this.scale.maxWidth = 1024;
+ this.scale.maxHeight = 768;
+ this.scale.pageAlignHorizontally = true;
+ this.scale.pageAlignVertically = true;
+ this.scale.forceOrientation(true, false);
+ this.scale.hasResized.add(this.gameResized, this);
+ this.scale.enterIncorrectOrientation.add(this.enterIncorrectOrientation, this);
+ this.scale.leaveIncorrectOrientation.add(this.leaveIncorrectOrientation, this);
+ this.scale.setScreenSize(true);
}
- this.game.state.start('Preloader');
+ this.state.start('Preloader');
},
diff --git a/resources/Project Templates/Full Screen Mobile/src/Game.js b/resources/Project Templates/Full Screen Mobile/src/Game.js
index 6190533d..8408949d 100644
--- a/resources/Project Templates/Full Screen Mobile/src/Game.js
+++ b/resources/Project Templates/Full Screen Mobile/src/Game.js
@@ -44,7 +44,7 @@ BasicGame.Game.prototype = {
// Stop music, delete sprites, purge caches, free resources, all that good stuff.
// Then let's go back to the main menu.
- this.game.state.start('MainMenu');
+ this.state.start('MainMenu');
}
diff --git a/resources/Project Templates/Full Screen Mobile/src/MainMenu.js b/resources/Project Templates/Full Screen Mobile/src/MainMenu.js
index fe2a1ae1..7e8c2378 100644
--- a/resources/Project Templates/Full Screen Mobile/src/MainMenu.js
+++ b/resources/Project Templates/Full Screen Mobile/src/MainMenu.js
@@ -35,7 +35,7 @@ BasicGame.MainMenu.prototype = {
this.music.stop();
// And start the actual game
- this.game.state.start('Game');
+ this.state.start('Game');
}
diff --git a/resources/Project Templates/Full Screen Mobile/src/Preloader.js b/resources/Project Templates/Full Screen Mobile/src/Preloader.js
index 434061bb..d57bd9c3 100644
--- a/resources/Project Templates/Full Screen Mobile/src/Preloader.js
+++ b/resources/Project Templates/Full Screen Mobile/src/Preloader.js
@@ -53,7 +53,7 @@ BasicGame.Preloader.prototype = {
if (this.cache.isSoundDecoded('titleMusic') && this.ready == false)
{
this.ready = true;
- this.game.state.start('MainMenu');
+ this.state.start('MainMenu');
}
}
diff --git a/src/core/Game.js b/src/core/Game.js
index eb779f83..861a2b85 100644
--- a/src/core/Game.js
+++ b/src/core/Game.js
@@ -142,7 +142,7 @@ Phaser.Game = function (width, height, renderer, parent, state, transparent, ant
this.net = null;
/**
- * @property {Phaser.StageScaleMode} scale - The game scale manager.
+ * @property {Phaser.ScaleManager} scale - The game scale manager.
*/
this.scale = null;
@@ -446,7 +446,7 @@ Phaser.Game.prototype = {
this.rnd = new Phaser.RandomDataGenerator([(Date.now() * Math.random()).toString()]);
this.stage = new Phaser.Stage(this, this.width, this.height);
- this.scale = new Phaser.StageScaleMode(this, this.width, this.height);
+ this.scale = new Phaser.ScaleManager(this, this.width, this.height);
this.setUpRenderer();
@@ -636,6 +636,7 @@ Phaser.Game.prototype = {
this.pendingStep = true;
}
+ this.state.preUpdate();
this.plugins.preUpdate();
this.stage.preUpdate();
diff --git a/src/system/StageScaleMode.js b/src/core/ScaleManager.js
similarity index 91%
rename from src/system/StageScaleMode.js
rename to src/core/ScaleManager.js
index 6702c69e..dd6af364 100644
--- a/src/system/StageScaleMode.js
+++ b/src/core/ScaleManager.js
@@ -5,15 +5,15 @@
*/
/**
-* The StageScaleMode object is responsible for helping you manage the scaling, resizing and alignment of your game within the browser.
+* The ScaleManager object is responsible for helping you manage the scaling, resizing and alignment of your game within the browser.
*
-* @class Phaser.StageScaleMode
+* @class Phaser.ScaleManager
* @constructor
* @param {Phaser.Game} game - A reference to the currently running game.
* @param {number} width - The native width of the game.
* @param {number} height - The native height of the game.
*/
-Phaser.StageScaleMode = function (game, width, height) {
+Phaser.ScaleManager = function (game, width, height) {
/**
* @property {Phaser.Game} game - A reference to the currently running game.
@@ -175,12 +175,12 @@ Phaser.StageScaleMode = function (game, width, height) {
/**
* @property {number} scaleMode - The current scaleMode.
*/
- this.scaleMode = Phaser.StageScaleMode.NO_SCALE;
+ this.scaleMode = Phaser.ScaleManager.NO_SCALE;
/*
* @property {number} fullScreenScaleMode - Scale mode to be used in fullScreen
*/
- this.fullScreenScaleMode = Phaser.StageScaleMode.NO_SCALE;
+ this.fullScreenScaleMode = Phaser.ScaleManager.NO_SCALE;
/**
* @property {number} _startHeight - Internal cache var. Stage height when starting the game.
@@ -228,26 +228,26 @@ Phaser.StageScaleMode = function (game, width, height) {
* @constant
* @type {number}
*/
-Phaser.StageScaleMode.EXACT_FIT = 0;
+Phaser.ScaleManager.EXACT_FIT = 0;
/**
* @constant
* @type {number}
*/
-Phaser.StageScaleMode.NO_SCALE = 1;
+Phaser.ScaleManager.NO_SCALE = 1;
/**
* @constant
* @type {number}
*/
-Phaser.StageScaleMode.SHOW_ALL = 2;
+Phaser.ScaleManager.SHOW_ALL = 2;
-Phaser.StageScaleMode.prototype = {
+Phaser.ScaleManager.prototype = {
/**
* Tries to enter the browser into full screen mode.
* Please note that this needs to be supported by the web browser and isn't the same thing as setting your game to fill the browser.
- * @method Phaser.StageScaleMode#startFullScreen
+ * @method Phaser.ScaleManager#startFullScreen
* @param {boolean} antialias - You can toggle the anti-alias feature of the canvas before jumping in to full screen (false = retain pixel art, true = smooth art)
*/
startFullScreen: function (antialias) {
@@ -287,7 +287,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Stops full screen mode if the browser is in it.
- * @method Phaser.StageScaleMode#stopFullScreen
+ * @method Phaser.ScaleManager#stopFullScreen
*/
stopFullScreen: function () {
@@ -308,7 +308,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Called automatically when the browser enters of leaves full screen mode.
- * @method Phaser.StageScaleMode#fullScreenChange
+ * @method Phaser.ScaleManager#fullScreenChange
* @param {Event} event - The fullscreenchange event
* @protected
*/
@@ -318,7 +318,7 @@ Phaser.StageScaleMode.prototype = {
if (this.isFullScreen)
{
- if (this.fullScreenScaleMode === Phaser.StageScaleMode.EXACT_FIT)
+ if (this.fullScreenScaleMode === Phaser.ScaleManager.EXACT_FIT)
{
this.game.canvas.style['width'] = '100%';
this.game.canvas.style['height'] = '100%';
@@ -331,7 +331,7 @@ Phaser.StageScaleMode.prototype = {
this.scaleFactor.x = this.game.width / this.width;
this.scaleFactor.y = this.game.height / this.height;
}
- else if (this.fullScreenScaleMode === Phaser.StageScaleMode.SHOW_ALL)
+ else if (this.fullScreenScaleMode === Phaser.ScaleManager.SHOW_ALL)
{
this.setShowAll();
this.refresh();
@@ -357,7 +357,7 @@ Phaser.StageScaleMode.prototype = {
/**
* If you need your game to run in only one orientation you can force that to happen.
* The optional orientationImage is displayed when the game is in the incorrect orientation.
- * @method Phaser.StageScaleMode#forceOrientation
+ * @method Phaser.ScaleManager#forceOrientation
* @param {boolean} forceLandscape - true if the game should run in landscape mode only.
* @param {boolean} [forcePortrait=false] - true if the game should run in portrait mode only.
* @param {string} [orientationImage=''] - The string of an image in the Phaser.Cache to display when this game is in the incorrect orientation.
@@ -402,7 +402,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Checks if the browser is in the correct orientation for your game (if forceLandscape or forcePortrait have been set)
- * @method Phaser.StageScaleMode#checkOrientationState
+ * @method Phaser.ScaleManager#checkOrientationState
*/
checkOrientationState: function () {
@@ -447,7 +447,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Handle window.orientationchange events
- * @method Phaser.StageScaleMode#checkOrientation
+ * @method Phaser.ScaleManager#checkOrientation
* @param {Event} event - The orientationchange event data.
*/
checkOrientation: function (event) {
@@ -465,7 +465,7 @@ Phaser.StageScaleMode.prototype = {
this.enterPortrait.dispatch(this.orientation, false, true);
}
- if (this.scaleMode !== Phaser.StageScaleMode.NO_SCALE)
+ if (this.scaleMode !== Phaser.ScaleManager.NO_SCALE)
{
this.refresh();
}
@@ -474,7 +474,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Handle window.resize events
- * @method Phaser.StageScaleMode#checkResize
+ * @method Phaser.ScaleManager#checkResize
* @param {Event} event - The resize event data.
*/
checkResize: function (event) {
@@ -499,7 +499,7 @@ Phaser.StageScaleMode.prototype = {
this.enterPortrait.dispatch(this.orientation, false, true);
}
- if (this.scaleMode !== Phaser.StageScaleMode.NO_SCALE)
+ if (this.scaleMode !== Phaser.ScaleManager.NO_SCALE)
{
this.refresh();
}
@@ -510,7 +510,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Re-calculate scale mode and update screen size.
- * @method Phaser.StageScaleMode#refresh
+ * @method Phaser.ScaleManager#refresh
*/
refresh: function () {
@@ -578,22 +578,22 @@ Phaser.StageScaleMode.prototype = {
}
else if (!this.isFullScreen)
{
- if (this.scaleMode == Phaser.StageScaleMode.EXACT_FIT)
+ if (this.scaleMode == Phaser.ScaleManager.EXACT_FIT)
{
this.setExactFit();
}
- else if (this.scaleMode == Phaser.StageScaleMode.SHOW_ALL)
+ else if (this.scaleMode == Phaser.ScaleManager.SHOW_ALL)
{
this.setShowAll();
}
}
else
{
- if (this.fullScreenScaleMode == Phaser.StageScaleMode.EXACT_FIT)
+ if (this.fullScreenScaleMode == Phaser.ScaleManager.EXACT_FIT)
{
this.setExactFit();
}
- else if (this.fullScreenScaleMode == Phaser.StageScaleMode.SHOW_ALL)
+ else if (this.fullScreenScaleMode == Phaser.ScaleManager.SHOW_ALL)
{
this.setShowAll();
}
@@ -608,7 +608,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Sets the canvas style width and height values based on minWidth/Height and maxWidth/Height.
- * @method Phaser.StageScaleMode#setSize
+ * @method Phaser.ScaleManager#setSize
*/
setSize: function () {
@@ -686,7 +686,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Sets this.width equal to window.innerWidth and this.height equal to window.innerHeight
- * @method Phaser.StageScaleMode#setMaximum
+ * @method Phaser.ScaleManager#setMaximum
*/
setMaximum: function () {
@@ -697,7 +697,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Calculates the multiplier needed to scale the game proportionally.
- * @method Phaser.StageScaleMode#setShowAll
+ * @method Phaser.ScaleManager#setShowAll
*/
setShowAll: function () {
@@ -710,7 +710,7 @@ Phaser.StageScaleMode.prototype = {
/**
* Sets the width and height values of the canvas, no larger than the maxWidth/Height.
- * @method Phaser.StageScaleMode#setExactFit
+ * @method Phaser.ScaleManager#setExactFit
*/
setExactFit: function () {
@@ -739,14 +739,14 @@ Phaser.StageScaleMode.prototype = {
};
-Phaser.StageScaleMode.prototype.constructor = Phaser.StageScaleMode;
+Phaser.ScaleManager.prototype.constructor = Phaser.ScaleManager;
/**
-* @name Phaser.StageScaleMode#isFullScreen
+* @name Phaser.ScaleManager#isFullScreen
* @property {boolean} isFullScreen - Returns true if the browser is in full screen mode, otherwise false.
* @readonly
*/
-Object.defineProperty(Phaser.StageScaleMode.prototype, "isFullScreen", {
+Object.defineProperty(Phaser.ScaleManager.prototype, "isFullScreen", {
get: function () {
@@ -757,11 +757,11 @@ Object.defineProperty(Phaser.StageScaleMode.prototype, "isFullScreen", {
});
/**
-* @name Phaser.StageScaleMode#isPortrait
+* @name Phaser.ScaleManager#isPortrait
* @property {boolean} isPortrait - Returns true if the browser dimensions match a portrait display.
* @readonly
*/
-Object.defineProperty(Phaser.StageScaleMode.prototype, "isPortrait", {
+Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", {
get: function () {
return this.orientation === 0 || this.orientation == 180;
@@ -770,11 +770,11 @@ Object.defineProperty(Phaser.StageScaleMode.prototype, "isPortrait", {
});
/**
-* @name Phaser.StageScaleMode#isLandscape
+* @name Phaser.ScaleManager#isLandscape
* @property {boolean} isLandscape - Returns true if the browser dimensions match a landscape display.
* @readonly
*/
-Object.defineProperty(Phaser.StageScaleMode.prototype, "isLandscape", {
+Object.defineProperty(Phaser.ScaleManager.prototype, "isLandscape", {
get: function () {
return this.orientation === 90 || this.orientation === -90;
diff --git a/src/core/State.js b/src/core/State.js
index 1a624167..24df3ea9 100644
--- a/src/core/State.js
+++ b/src/core/State.js
@@ -21,82 +21,84 @@ Phaser.State = function () {
/**
* @property {Phaser.GameObjectFactory} add - Reference to the GameObjectFactory.
- * @default
*/
this.add = null;
+ /**
+ * @property {Phaser.GameObjectCreator} make - Reference to the GameObjectCreator.
+ */
+ this.make = null;
+
/**
* @property {Phaser.Camera} camera - A handy reference to world.camera.
- * @default
*/
this.camera = null;
/**
* @property {Phaser.Cache} cache - Reference to the assets cache.
- * @default
*/
this.cache = null;
/**
* @property {Phaser.Input} input - Reference to the input manager
- * @default
*/
this.input = null;
/**
* @property {Phaser.Loader} load - Reference to the assets loader.
- * @default
*/
this.load = null;
/**
* @property {Phaser.Math} math - Reference to the math helper.
- * @default
*/
this.math = null;
/**
* @property {Phaser.SoundManager} sound - Reference to the sound manager.
- * @default
*/
this.sound = null;
+ /**
+ * @property {Phaser.ScaleManager} scale - Reference to the game scale manager.
+ */
+ this.scale = null;
+
/**
* @property {Phaser.Stage} stage - Reference to the stage.
- * @default
*/
this.stage = null;
/**
* @property {Phaser.TimeManager} time - Reference to game clock.
- * @default
*/
this.time = null;
/**
* @property {Phaser.TweenManager} tweens - Reference to the tween manager.
- * @default
*/
this.tweens = null;
/**
* @property {Phaser.World} world - Reference to the world.
- * @default
*/
this.world = null;
/**
* @property {Phaser.Particles} particles - The Particle Manager for the game. It is called during the game update loop and in turn updates any Emitters attached to it.
- * @default
*/
this.particles = null;
/**
- * @property {Phaser.Physics.PhysicsManager} physics - Reference to the physics manager.
- * @default
+ * @property {Phaser.Physics.World} physics - Reference to the physics manager.
*/
this.physics = null;
+ /**
+ * @property {Phaser.RandomDataGenerator} rnd - Reference to the random data generator.
+ */
+ this.rnd = null;
+
};
Phaser.State.prototype = {
diff --git a/src/core/StateManager.js b/src/core/StateManager.js
index 32c800eb..1515a193 100644
--- a/src/core/StateManager.js
+++ b/src/core/StateManager.js
@@ -37,6 +37,18 @@ Phaser.StateManager = function (game, pendingState) {
this._pendingState = pendingState;
}
+ /**
+ * @property {boolean} _clearWorld - Clear the world when we switch state?
+ * @private
+ */
+ this._clearWorld = false;
+
+ /**
+ * @property {boolean} _clearCache - Clear the cache when we switch state?
+ * @private
+ */
+ this._clearCache = false;
+
/**
* @property {boolean} _created - Flag that sets if the State has been created or not.
* @private
@@ -228,7 +240,27 @@ Phaser.StateManager.prototype = {
if (typeof clearWorld === "undefined") { clearWorld = true; }
if (typeof clearCache === "undefined") { clearCache = false; }
- if (this.game.isBooted === false)
+ if (this.checkState(key))
+ {
+ // Place the state in the queue. It will be started the next time the game loop starts.
+ this._pendingState = key;
+ this._clearWorld = clearWorld;
+ this._clearCache = clearCache;
+
+ if (arguments.length > 3)
+ {
+ this._args = Array.prototype.splice.call(arguments, 3);
+ }
+
+ // Already got a state running?
+ if (this.current)
+ {
+ this.onShutDownCallback.call(this.callbackContext, this.game);
+ }
+ }
+
+
+/* if (this.game.isBooted === false)
{
this._pendingState = key;
@@ -251,7 +283,6 @@ Phaser.StateManager.prototype = {
this._args = [];
}
}
-
if (arguments.length > 3)
{
this._args = Array.prototype.splice.call(arguments, 3);
@@ -305,6 +336,7 @@ Phaser.StateManager.prototype = {
// No init? Then there was nothing to load either
this.game.loadComplete();
}
+ */
},
@@ -323,6 +355,64 @@ Phaser.StateManager.prototype = {
* @param {string} key - The key of the state you want to check.
* @return {boolean} Description.
*/
+ preUpdate: function () {
+
+ if (this._pendingState && this.game.isBooted)
+ {
+ // Already got a state running?
+ if (this.current)
+ {
+ this.onShutDownCallback.call(this.callbackContext, this.game);
+ }
+
+ if (this._clearWorld)
+ {
+ this.game.tweens.removeAll();
+
+ this.game.world.destroy();
+
+ if (this._clearCache === true)
+ {
+ this.game.cache.destroy();
+ }
+ }
+
+ this.setCurrentState(this._pendingState);
+
+ if (this.onPreloadCallback)
+ {
+ this.game.load.reset();
+ this.onPreloadCallback.call(this.callbackContext, this.game);
+
+ // Is the loader empty?
+ if (this.game.load.totalQueuedFiles() === 0)
+ {
+ this.game.loadComplete();
+ }
+ else
+ {
+ // Start the loader going as we have something in the queue
+ this.game.load.start();
+ }
+ }
+ else
+ {
+ // No init? Then there was nothing to load either
+ this.game.loadComplete();
+ }
+
+ this._pendingState = null;
+ }
+
+ },
+
+ /**
+ * Checks if a given phaser state is valid. A State is considered valid if it has at least one of the core functions: preload, create, update or render.
+ *
+ * @method Phaser.StateManager#checkState
+ * @param {string} key - The key of the state you want to check.
+ * @return {boolean} true if the State has the required functions, otherwise false.
+ */
checkState: function (key) {
if (this.states[key])
@@ -330,18 +420,13 @@ Phaser.StateManager.prototype = {
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 (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.");
+ console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render");
return false;
}
@@ -373,6 +458,7 @@ Phaser.StateManager.prototype = {
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;
diff --git a/src/input/Input.js b/src/input/Input.js
index 40967a4b..129de263 100644
--- a/src/input/Input.js
+++ b/src/input/Input.js
@@ -104,7 +104,7 @@ Phaser.Input = function (game) {
this.circle = null;
/**
- * @property {Phaser.Point} scale - The scale by which all input coordinates are multiplied; calculated by the StageScaleMode. In an un-scaled game the values will be x = 1 and y = 1.
+ * @property {Phaser.Point} scale - The scale by which all input coordinates are multiplied; calculated by the ScaleManager. In an un-scaled game the values will be x = 1 and y = 1.
*/
this.scale = null;