2016-10-17 20:22:55 +00:00
|
|
|
/**
|
|
|
|
* @author Richard Davey <rich@photonstorm.com>
|
|
|
|
* @copyright 2016 Photon Storm Ltd.
|
|
|
|
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
|
|
|
*/
|
|
|
|
|
2016-11-25 04:00:15 +00:00
|
|
|
var Device = require('../device');
|
2016-11-24 01:35:02 +00:00
|
|
|
var Config = require('./Config');
|
2016-11-22 03:32:41 +00:00
|
|
|
var DebugHeader = require('./DebugHeader');
|
2016-11-29 11:26:30 +00:00
|
|
|
var CreateRenderer = require('./CreateRenderer');
|
2016-11-25 01:37:14 +00:00
|
|
|
var RequestAnimationFrame = require('../dom/RequestAnimationFrame');
|
2016-11-25 02:08:33 +00:00
|
|
|
var DOMContentLoaded = require('../dom/DOMContentLoaded');
|
2016-11-25 05:12:02 +00:00
|
|
|
var RandomDataGenerator = require('../math/random-data-generator/RandomDataGenerator');
|
2016-11-29 15:25:14 +00:00
|
|
|
var StateManager = require('../state/StateManager');
|
2016-11-29 10:46:35 +00:00
|
|
|
var FactoryContainer = require('../gameobjects/FactoryContainer');
|
2016-12-07 02:28:22 +00:00
|
|
|
var GameObjects = require('../gameobjects/');
|
2016-12-06 16:49:29 +00:00
|
|
|
var TextureManager = require ('../textures/TextureManager');
|
2016-11-22 03:11:33 +00:00
|
|
|
|
2016-11-24 01:35:02 +00:00
|
|
|
var Game = function (config)
|
2016-11-22 03:11:33 +00:00
|
|
|
{
|
2016-11-24 01:35:02 +00:00
|
|
|
this.config = new Config(config);
|
|
|
|
|
2016-11-24 17:01:52 +00:00
|
|
|
// Decide which of the following should be Game properties, or placed elsewhere ...
|
|
|
|
|
|
|
|
this.renderer = null;
|
|
|
|
this.canvas = null;
|
|
|
|
this.context = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {string|HTMLElement} parent - The Games DOM parent.
|
|
|
|
* @default
|
|
|
|
*/
|
|
|
|
this.parent = parent;
|
|
|
|
|
|
|
|
this.isBooted = false;
|
|
|
|
this.isRunning = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {Phaser.RequestAnimationFrame} raf - Automatically handles the core game loop via requestAnimationFrame or setTimeout
|
|
|
|
* @protected
|
|
|
|
*/
|
2016-11-25 00:34:37 +00:00
|
|
|
this.raf = new RequestAnimationFrame(this);
|
2016-11-24 17:01:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {Phaser.TextureManager} textures - Reference to the Phaser Texture Manager.
|
|
|
|
*/
|
2016-12-06 16:49:29 +00:00
|
|
|
this.textures = new TextureManager(this);
|
2016-11-24 17:01:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {Phaser.UpdateManager} updates - Reference to the Phaser Update Manager.
|
|
|
|
*/
|
|
|
|
this.updates = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {Phaser.Cache} cache - Reference to the assets cache.
|
|
|
|
*/
|
|
|
|
this.cache = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {Phaser.Input} input - Reference to the input manager
|
|
|
|
*/
|
|
|
|
this.input = null;
|
|
|
|
|
|
|
|
/**
|
2016-11-29 15:25:14 +00:00
|
|
|
* @property {Phaser.StateManager} state - The StateManager. Phaser instance specific.
|
2016-11-24 17:01:52 +00:00
|
|
|
*/
|
2016-11-29 15:25:14 +00:00
|
|
|
this.state = new StateManager(this, this.config.stateConfig);
|
2016-11-29 10:46:35 +00:00
|
|
|
|
2016-11-24 17:01:52 +00:00
|
|
|
/**
|
2016-11-29 15:25:14 +00:00
|
|
|
* @property {Phaser.Device} device - Contains device information and capabilities (singleton)
|
2016-11-24 17:01:52 +00:00
|
|
|
*/
|
2016-11-25 04:00:15 +00:00
|
|
|
this.device = Device;
|
2016-11-24 17:01:52 +00:00
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
// More this somewhere else? Math perhaps? Doesn't need to be a Game level system.
|
2016-11-25 05:12:02 +00:00
|
|
|
this.rnd;
|
2016-11-24 17:01:52 +00:00
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
// Wait for the DOM Ready event, then call boot.
|
2016-11-28 16:55:13 +00:00
|
|
|
DOMContentLoaded(this.boot.bind(this));
|
2016-11-25 01:37:14 +00:00
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
// For debugging only
|
|
|
|
window.game = this;
|
2016-11-25 01:37:14 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
Game.prototype.constructor = Game;
|
|
|
|
|
|
|
|
Game.prototype = {
|
|
|
|
|
2016-11-25 02:08:33 +00:00
|
|
|
boot: function ()
|
|
|
|
{
|
2016-11-29 15:25:14 +00:00
|
|
|
this.isBooted = true;
|
|
|
|
|
2016-11-28 16:55:13 +00:00
|
|
|
this.config.preBoot();
|
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
// Probably move within Math
|
2016-11-25 05:12:02 +00:00
|
|
|
this.rnd = new RandomDataGenerator(this.config.seed);
|
|
|
|
|
2016-11-25 02:08:33 +00:00
|
|
|
DebugHeader(this);
|
|
|
|
|
2016-11-29 11:26:30 +00:00
|
|
|
CreateRenderer(this);
|
2016-11-25 02:08:33 +00:00
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
this.state.boot();
|
2016-11-29 10:46:35 +00:00
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
this.isRunning = true;
|
2016-11-26 01:28:53 +00:00
|
|
|
|
2016-11-28 16:55:13 +00:00
|
|
|
this.config.postBoot();
|
2016-11-25 02:08:33 +00:00
|
|
|
|
|
|
|
this.raf.start();
|
|
|
|
},
|
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
// timestamp = DOMHighResTimeStamp
|
2016-11-25 01:37:14 +00:00
|
|
|
update: function (timestamp)
|
|
|
|
{
|
2016-12-07 02:40:07 +00:00
|
|
|
this.state.step(timestamp);
|
2016-11-25 01:37:14 +00:00
|
|
|
}
|
|
|
|
|
2016-11-22 03:32:41 +00:00
|
|
|
};
|
2016-10-17 20:22:55 +00:00
|
|
|
|
2016-11-22 03:11:33 +00:00
|
|
|
module.exports = Game;
|