33 lines
828 B
JavaScript
33 lines
828 B
JavaScript
import TickingPromise from '@/util/ticking-promise.js';
|
|
|
|
export default function delta(object, properties) {
|
|
const deltas = {};
|
|
for (const key in properties) {
|
|
const property = properties[key];
|
|
const delta = {
|
|
duration: Infinity,
|
|
elapsed: 0,
|
|
...property,
|
|
};
|
|
deltas[key] = delta;
|
|
}
|
|
let stop;
|
|
const promise = new TickingPromise(
|
|
(resolve) => {
|
|
stop = resolve;
|
|
},
|
|
(elapsed, resolve) => {
|
|
for (const key in deltas) {
|
|
deltas[key].elapsed += elapsed;
|
|
if (deltas[key].elapsed >= deltas[key].duration) {
|
|
object[key] += deltas[key].delta * (deltas[key].duration - deltas[key].elapsed);
|
|
resolve();
|
|
return;
|
|
}
|
|
object[key] += deltas[key].delta * elapsed;
|
|
}
|
|
},
|
|
);
|
|
return {stop, deltas, promise};
|
|
}
|