var Class = require('../utils/Class'); var Config = require('./Config'); var DebugHeader = require('./DebugHeader'); var Device = require('../device'); var NOOP = require('../utils/NOOP'); var AddToDOM = require('../dom/AddToDOM'); var DOMContentLoaded = require('../dom/DOMContentLoaded'); var EventDispatcher = require('../events/EventDispatcher'); var VisibilityHandler = require('./VisibilityHandler'); var AnimationManager = require('../animation/manager/AnimationManager'); var CreateRenderer = require('./CreateRenderer'); var Data = require('../plugins/Data'); var GlobalCache = require('../cache/GlobalCache'); var GlobalInputManager = require('../input/global/GlobalInputManager'); var GlobalSceneManager = require('../scene/GlobalSceneManager'); var TextureManager = require('../textures/TextureManager'); var TimeStep = require('./TimeStep'); var Game = new Class({ initialize: function Game(config){ this.config = new Config(config); this.renderer = null ; this.canvas = null ; this.context = null ; this.isBooted = false ; this.isRunning = false ; this.events = new EventDispatcher(); this.anims = new AnimationManager(this); this.textures = new TextureManager(this); this.cache = new GlobalCache(this); this.registry = new Data(this); this.input = new GlobalInputManager(this, this.config); this.scene = new GlobalSceneManager(this, this.config.sceneConfig); this.device = Device; this.loop = new TimeStep(this, this.config.fps); this.onStepCallback = NOOP; DOMContentLoaded(this.boot.bind(this)); window.game = this; } , boot: function (){ this.isBooted = true ; this.config.preBoot(); DebugHeader(this); CreateRenderer(this); AddToDOM(this.canvas, this.config.parent); this.anims.boot(this.textures); this.scene.boot(); this.input.boot(); this.isRunning = true ; this.config.postBoot(); this.loop.start(this.step.bind(this)); VisibilityHandler(this.events); this.events.on('HIDDEN', this.onHidden.bind(this)); this.events.on('VISIBLE', this.onVisible.bind(this)); this.events.on('ON_BLUR', this.onBlur.bind(this)); this.events.on('ON_FOCUS', this.onFocus.bind(this)); } , step: function (time, delta){ var active = this.scene.active; var renderer = this.renderer; this.input.update(time, delta); this.onStepCallback(); for (var i = 0; i < (_AN_Read_length('length', active)); i++ ){ active[i].scene.sys.step(time, delta); } renderer.preRender(); for (i = 0; i < (_AN_Read_length('length', active)); i++ ){ active[i].scene.sys.render(0, renderer); } renderer.postRender(); } , onHidden: function (){ this.loop.pause(); } , onVisible: function (){ this.loop.resume(); } , onBlur: function (){ this.loop.blur(); } , onFocus: function (){ this.loop.focus(); } } ); module.exports = Game;