fix: add delta
This commit is contained in:
parent
447774f0da
commit
82c1358ecc
32
app/util/delta.js
Normal file
32
app/util/delta.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
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};
|
||||
}
|
Loading…
Reference in New Issue
Block a user