webgl-threejs-hello/app/js/core/Loop.js
2018-10-12 12:45:31 -04:00

54 lines
994 B
JavaScript

class Loop {
constructor() {
this._idRAF = -1;
this._count = 0;
this._time = (new Date()).getTime();
this._listeners = [];
this._binds = {};
this._binds.update = this._update.bind(this);
}
_update() {
let listener = null;
let i = this._count;
this._time = (new Date()).getTime()
while (--i >= 0) {
listener = this._listeners[i];
if (listener) {
listener.apply(this, [this._time]);
}
}
this._idRAF = requestAnimationFrame(this._binds.update);
}
start() {
this._update();
}
stop() {
cancelAnimationFrame(this._idRAF);
}
add(listener) {
const idx = this._listeners.indexOf(listener);
if (idx >= 0) {
return;
}
this._listeners.push(listener);
this._count++;
}
remove(listener) {
const idx = this._listeners.indexOf(listener);
if (idx < 0) {
return;
}
this._listeners.splice(idx, 1);
this._count--;
}
}
module.exports = new Loop();