2021-05-09 13:49:40 +02:00
|
|
|
"use strict"
|
|
|
|
|
|
2020-11-07 11:35:29 +01:00
|
|
|
export const run = options => {
|
|
|
|
|
const fps = options.fps || 60
|
|
|
|
|
const slow = options.slow || 1
|
|
|
|
|
const update = options.update
|
|
|
|
|
const render = options.render
|
|
|
|
|
const raf = window.requestAnimationFrame
|
|
|
|
|
const step = 1 / fps
|
|
|
|
|
const slowStep = slow * step
|
|
|
|
|
|
|
|
|
|
let now
|
|
|
|
|
let dt = 0
|
|
|
|
|
let last = window.performance.now()
|
|
|
|
|
|
|
|
|
|
const frame = () => {
|
|
|
|
|
now = window.performance.now()
|
|
|
|
|
dt = dt + Math.min(1, (now - last) / 1000) // duration capped at 1.0 seconds
|
|
|
|
|
while (dt > slowStep) {
|
|
|
|
|
dt = dt - slowStep
|
|
|
|
|
update(step)
|
|
|
|
|
}
|
|
|
|
|
render(dt / slow)
|
|
|
|
|
last = now
|
|
|
|
|
raf(frame)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
raf(frame)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
run
|
2021-05-09 13:49:40 +02:00
|
|
|
}
|