Phaser.Time = function (game){ this.game = game; this.time = 0; this.prevTime = 0; this.now = 0; this.elapsed = 0; this.elapsedMS = 0; this.physicsElapsed = 1 / 60; this.physicsElapsedMS = (1 / 60) * 1000; this.desiredFpsMult = 1 / 60; this._desiredFps = 60; this.suggestedFps = this.desiredFps; this.slowMotion = 1; this.advancedTiming = false ; this.frames = 0; this.fps = 0; this.fpsMin = 1000; this.fpsMax = 0; this.msMin = 1000; this.msMax = 0; this.pauseDuration = 0; this.timeToCall = 0; this.timeExpected = 0; this.events = new Phaser.Timer(this.game, false ); this._frameCount = 0; this._elapsedAccumulator = 0; this._started = 0; this._timeLastSecond = 0; this._pauseStarted = 0; this._justResumed = false ; this._timers = [] ; } ; Phaser.Time.prototype = { boot: function (){ this._started = Date.now(); this.time = Date.now(); this.events.start(); this.timeExpected = this.time; } , add: function (timer){ this._timers.push(timer); return timer; } , create: function (autoDestroy){ if (autoDestroy === undefined) { autoDestroy = true ; } var timer = new Phaser.Timer(this.game, autoDestroy); this._timers.push(timer); return timer; } , removeAll: function (){ for (var i = 0; i < _AN_Read_length('length', this._timers); i++ ){ this._timers[i].destroy(); } this._timers = [] ; this.events.removeAll(); } , refresh: function (){ var previousDateNow = this.time; this.time = Date.now(); this.elapsedMS = this.time - previousDateNow; } , update: function (time){ var previousDateNow = this.time; this.time = Date.now(); this.elapsedMS = this.time - previousDateNow; this.prevTime = this.now; this.now = time; this.elapsed = this.now - this.prevTime; if (this.game.raf._isSetTimeOut) { this.timeToCall = Math.floor(Math.max(0, (1000 / this._desiredFps) - (this.timeExpected - time))); this.timeExpected = time + this.timeToCall; } if (this.advancedTiming) { this.updateAdvancedTiming(); } if (!this.game.paused) { this.events.update(this.time); if (this._timers.length) { this.updateTimers(); } } } , updateTimers: function (){ var i = 0; var len = _AN_Read_length('length', this._timers); while (i < len){ if (this._timers[i].update(this.time)) { i++ ; } else { this._timers.splice(i, 1); len-- ; } } } , updateAdvancedTiming: function (){ this._frameCount++ ; this._elapsedAccumulator += this.elapsed; if (this._frameCount >= this._desiredFps * 2) { this.suggestedFps = Math.floor(200 / (this._elapsedAccumulator / this._frameCount)) * 5; this._frameCount = 0; this._elapsedAccumulator = 0; } this.msMin = Math.min(this.msMin, this.elapsed); this.msMax = Math.max(this.msMax, this.elapsed); this.frames++ ; if (this.now > this._timeLastSecond + 1000) { this.fps = Math.round((this.frames * 1000) / (this.now - this._timeLastSecond)); this.fpsMin = Math.min(this.fpsMin, this.fps); this.fpsMax = Math.max(this.fpsMax, this.fps); this._timeLastSecond = this.now; this.frames = 0; } } , gamePaused: function (){ this._pauseStarted = Date.now(); this.events.pause(); var i = _AN_Read_length('length', this._timers); while (i-- ){ this._timers[i]._pause(); } } , gameResumed: function (){ this.time = Date.now(); this.pauseDuration = this.time - this._pauseStarted; this.events.resume(); var i = _AN_Read_length('length', this._timers); while (i-- ){ this._timers[i]._resume(); } } , totalElapsedSeconds: function (){ return (this.time - this._started) * 0.001; } , elapsedSince: function (since){ return this.time - since; } , elapsedSecondsSince: function (since){ return (this.time - since) * 0.001; } , reset: function (){ this._started = this.time; this.removeAll(); } } ; Object.defineProperty(Phaser.Time.prototype, "desiredFps", { get: function (){ return this._desiredFps; } , set: function (value){ this._desiredFps = value; this.physicsElapsed = 1 / value; this.physicsElapsedMS = this.physicsElapsed * 1000; this.desiredFpsMult = 1 / value; } } ); Phaser.Time.prototype.constructor = Phaser.Time;