2017-03-02 01:43:38 -05:00
|
|
|
|
2017-03-02 17:38:29 -05:00
|
|
|
function Rolling(value, frames)
|
2017-03-02 01:43:38 -05:00
|
|
|
{
|
|
|
|
var lag = 0;
|
|
|
|
|
2017-03-02 17:38:29 -05:00
|
|
|
if (!frames)
|
|
|
|
frames = 24;
|
2017-03-02 01:43:38 -05:00
|
|
|
|
|
|
|
this.value = value;
|
|
|
|
|
|
|
|
Object.defineProperty(this, "lag", {
|
|
|
|
get: function() { return lag; },
|
|
|
|
enumerable: true
|
|
|
|
});
|
|
|
|
this.update = function() {
|
2017-03-02 17:38:29 -05:00
|
|
|
var delta = this.value - lag;
|
2017-03-02 01:43:38 -05:00
|
|
|
var dir = Math.sign(delta);
|
2017-03-02 17:38:29 -05:00
|
|
|
var speed = Math.abs(delta) / frames;
|
|
|
|
var mag = Math.min(Math.abs(speed), Math.abs(delta));
|
2017-03-02 01:43:38 -05:00
|
|
|
|
|
|
|
lag += mag * dir;
|
|
|
|
return lag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = Rolling;
|
|
|
|
|