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-24 01:35:02 +00:00
|
|
|
var Config = require('./Config');
|
2016-11-22 03:32:41 +00:00
|
|
|
var DebugHeader = require('./DebugHeader');
|
2016-12-13 16:12:25 +00:00
|
|
|
var Device = require('../device');
|
|
|
|
|
|
|
|
var AddToDOM = require('../dom/AddToDOM');
|
2016-11-25 02:08:33 +00:00
|
|
|
var DOMContentLoaded = require('../dom/DOMContentLoaded');
|
2016-12-13 16:12:25 +00:00
|
|
|
|
2017-01-25 17:10:19 +00:00
|
|
|
var MainLoop = require('./MainLoop');
|
2017-04-27 02:11:56 +00:00
|
|
|
var TickerLoop = require('./TickerLoop');
|
2017-04-27 16:03:19 +00:00
|
|
|
var VariableTimeStep = require('./VariableTimeStep');
|
2016-12-13 16:12:25 +00:00
|
|
|
var CreateRenderer = require('./CreateRenderer');
|
2017-02-21 01:04:11 +00:00
|
|
|
var GlobalInputManager = require('../input/GlobalInputManager');
|
2017-02-08 01:07:01 +00:00
|
|
|
var GlobalStateManager = require('../state/GlobalStateManager');
|
2017-04-12 12:53:55 +00:00
|
|
|
var AnimationManager = require('../animation/manager/AnimationManager');
|
2017-01-16 22:43:46 +00:00
|
|
|
var TextureManager = require('../textures/TextureManager');
|
2017-01-30 00:00:45 +00:00
|
|
|
var Data = require('../components/Data');
|
2017-01-30 16:56:04 +00:00
|
|
|
var Cache = require('../cache/Cache');
|
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
|
|
|
this.renderer = null;
|
|
|
|
this.canvas = null;
|
|
|
|
this.context = null;
|
|
|
|
|
|
|
|
this.isBooted = false;
|
|
|
|
this.isRunning = false;
|
|
|
|
|
2017-03-22 12:38:33 +00:00
|
|
|
/**
|
|
|
|
* @property {Phaser.AnimationManager} anims - Reference to the Phaser Animation Manager.
|
|
|
|
*/
|
|
|
|
this.anims = new AnimationManager(this);
|
|
|
|
|
2016-11-24 17:01:52 +00:00
|
|
|
/**
|
|
|
|
* @property {Phaser.TextureManager} textures - Reference to the Phaser Texture Manager.
|
|
|
|
*/
|
2017-01-19 23:20:36 +00:00
|
|
|
this.textures = new TextureManager(this);
|
2016-11-24 17:01:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @property {Phaser.Cache} cache - Reference to the assets cache.
|
|
|
|
*/
|
2017-01-30 16:56:04 +00:00
|
|
|
this.cache = new Cache();
|
2016-11-24 17:01:52 +00:00
|
|
|
|
2017-01-30 00:00:45 +00:00
|
|
|
/**
|
|
|
|
* @property {Phaser.Data} registry - Game wide data store.
|
|
|
|
*/
|
|
|
|
this.registry = new Data(this);
|
|
|
|
|
2016-11-24 17:01:52 +00:00
|
|
|
/**
|
|
|
|
* @property {Phaser.Input} input - Reference to the input manager
|
|
|
|
*/
|
2017-02-21 01:04:11 +00:00
|
|
|
this.input = new GlobalInputManager(this, this.config);
|
2016-11-24 17:01:52 +00:00
|
|
|
|
|
|
|
/**
|
2017-02-08 01:07:01 +00:00
|
|
|
* @property {Phaser.GlobalStateManager} state - The StateManager. Phaser instance specific.
|
2016-11-24 17:01:52 +00:00
|
|
|
*/
|
2017-02-08 01:07:01 +00:00
|
|
|
this.state = new GlobalStateManager(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
|
|
|
|
2017-01-25 17:10:19 +00:00
|
|
|
/**
|
|
|
|
* @property {Phaser.MainLoop} mainloop - Main Loop handler.
|
|
|
|
* @protected
|
|
|
|
*/
|
2017-04-28 02:15:02 +00:00
|
|
|
// if (this.config.useTicker)
|
|
|
|
// {
|
2017-04-27 16:03:19 +00:00
|
|
|
this.loop = new VariableTimeStep(this, this.config.fps);
|
2017-04-28 02:15:02 +00:00
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// this.loop = new MainLoop(this, this.config.fps);
|
|
|
|
// }
|
2017-01-25 17:10:19 +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-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-12-07 03:42:41 +00:00
|
|
|
AddToDOM(this.canvas, this.config.parent);
|
|
|
|
|
2017-04-04 22:58:45 +00:00
|
|
|
this.anims.boot(this.textures);
|
|
|
|
|
2016-11-29 15:25:14 +00:00
|
|
|
this.state.boot();
|
2016-11-29 10:46:35 +00:00
|
|
|
|
2017-02-21 01:04:11 +00:00
|
|
|
this.input.boot();
|
|
|
|
|
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
|
|
|
|
2017-04-27 02:11:56 +00:00
|
|
|
this.loop.start(!!this.config.forceSetTimeOut, this.step.bind(this));
|
|
|
|
},
|
|
|
|
|
2017-04-27 16:03:19 +00:00
|
|
|
step: function (time, delta)
|
2017-04-27 02:11:56 +00:00
|
|
|
{
|
|
|
|
var active = this.state.active;
|
|
|
|
var renderer = this.renderer;
|
|
|
|
|
|
|
|
// Global Managers (Time, Input, etc)
|
|
|
|
|
2017-04-27 16:03:19 +00:00
|
|
|
this.input.update(time, delta);
|
2017-04-27 02:11:56 +00:00
|
|
|
|
|
|
|
// States
|
|
|
|
|
|
|
|
for (var i = 0; i < active.length; i++)
|
|
|
|
{
|
2017-04-27 16:03:19 +00:00
|
|
|
active[i].state.sys.step(time, delta);
|
2017-04-27 02:11:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Render
|
|
|
|
|
|
|
|
// var interpolation = this.frameDelta / this.timestep;
|
|
|
|
|
|
|
|
renderer.preRender();
|
|
|
|
|
|
|
|
// This uses active.length, in case state.update removed the state from the active list
|
|
|
|
for (i = 0; i < active.length; i++)
|
|
|
|
{
|
|
|
|
active[i].state.sys.render(0, renderer);
|
|
|
|
}
|
|
|
|
|
|
|
|
renderer.postRender();
|
2017-02-17 01:43:55 +00:00
|
|
|
}
|
2017-01-25 17:10:19 +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;
|