Created
April 14, 2015 03:37
-
-
Save juniorz/b98cd4eb0545bcc2ec81 to your computer and use it in GitHub Desktop.
speedometer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var tick = 1 | |
var maxTick = 65535 | |
var resolution = 4 | |
var inc = function() { | |
tick = (tick + 1) & maxTick // increments cycling from 1 to 65535 | |
} | |
// every 1/4 of second | |
var timer = setInterval(inc, (1000 / resolution) | 0) | |
if (timer.unref) timer.unref() | |
var speed = function(seconds) { | |
var size = resolution * (seconds || 5) // 4 * 5 = 20 | |
var buffer = [0] | |
var pointer = 1 | |
var last = (tick-1) & maxTick // 0 (previous tick when the speedometer started). the number of 1000 / resolution milliseconds since the clock started to tick | |
return function(delta) { | |
var dist = (tick - last) & maxTick // how many ticks since the speedometer started | |
if (dist > size) dist = size // to a maximum of size | |
last = tick // last tick | |
while (dist--) { // for every tick | |
if (pointer === size) pointer = 0 | |
buffer[pointer] = buffer[pointer === 0 ? size-1 : pointer-1] | |
pointer++ | |
} | |
if (delta) buffer[pointer-1] += delta | |
var top = buffer[pointer-1] | |
var btm = buffer.length < size ? 0 : buffer[pointer === size ? 0 : pointer] | |
return buffer.length < resolution ? top : (top - btm) * resolution / buffer.length | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment