58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
|
(function () {
|
||
|
var ns = $.namespace("pskl.rendering");
|
||
|
|
||
|
ns.DrawingLoop = function () {
|
||
|
this.requestAnimationFrame = this.getRequestAnimationFrameShim_();
|
||
|
this.isRunning = false;
|
||
|
this.previousTime = 0;
|
||
|
this.callbacks = [];
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.addCallback = function (callback, scope, args) {
|
||
|
var callbackObj = {
|
||
|
fn : callback,
|
||
|
scope : scope,
|
||
|
args : args
|
||
|
};
|
||
|
this.callbacks.push(callbackObj);
|
||
|
return callbackObj;
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.removeCallback = function (callbackObj) {
|
||
|
var index = this.callbacks.indexOf(callbackObj);
|
||
|
if (index != -1) {
|
||
|
this.callbacks.splice(index, 1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.start = function () {
|
||
|
this.isRunning = true;
|
||
|
this.loop_();
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.loop_ = function () {
|
||
|
var currentTime = Date.now();
|
||
|
var delta = currentTime - this.previousTime;
|
||
|
this.executeCallbacks_(delta);
|
||
|
this.previousTime = currentTime;
|
||
|
this.requestAnimationFrame.call(window, this.loop_.bind(this));
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.executeCallbacks_ = function (deltaTime) {
|
||
|
for (var i = 0 ; i < this.callbacks.length ; i++) {
|
||
|
var cb = this.callbacks[i];
|
||
|
cb.fn.call(cb.scope, deltaTime, cb.args);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.stop = function () {
|
||
|
this.isRunning = false;
|
||
|
};
|
||
|
|
||
|
ns.DrawingLoop.prototype.getRequestAnimationFrameShim_ = function () {
|
||
|
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
|
||
|
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {window.setTimeout(callback, 1000/60)};
|
||
|
|
||
|
return requestAnimationFrame;
|
||
|
}
|
||
|
})()
|