fix: properly handle multiple promises
This commit is contained in:
parent
e02a63e7b5
commit
447774f0da
|
@ -11,6 +11,7 @@ const Modulators = {
|
|||
|
||||
export default function lfo(object, properties) {
|
||||
const oscillators = {};
|
||||
const promises = [];
|
||||
for (const key in properties) {
|
||||
const property = properties[key];
|
||||
const oscillator = {
|
||||
|
@ -34,25 +35,33 @@ export default function lfo(object, properties) {
|
|||
}
|
||||
}
|
||||
oscillator.low = oscillator.median - oscillator.magnitude / 2;
|
||||
oscillator.promise = new Promise((resolve) => {
|
||||
oscillator.stop = resolve;
|
||||
});
|
||||
oscillator.promise.then(() => {
|
||||
delete oscillators[key];
|
||||
});
|
||||
promises.push(oscillator.promise);
|
||||
oscillators[key] = oscillator;
|
||||
}
|
||||
let stop;
|
||||
const promise = new TickingPromise(
|
||||
(resolve) => {
|
||||
stop = resolve;
|
||||
Promise.all(promises).then(resolve);
|
||||
},
|
||||
(elapsed, resolve) => {
|
||||
(elapsed) => {
|
||||
for (const key in oscillators) {
|
||||
const oscillator = oscillators[key];
|
||||
oscillator.elapsed += elapsed;
|
||||
if (oscillator.elapsed >= oscillator.frequency) {
|
||||
if (0 === --oscillator.count) {
|
||||
resolve();
|
||||
oscillator.stop();
|
||||
return;
|
||||
}
|
||||
oscillator.elapsed = oscillator.elapsed % oscillator.frequency;
|
||||
}
|
||||
const x = ((oscillator.offset + oscillator.elapsed) / oscillator.frequency) % 1;
|
||||
const x = (oscillator.offset + (oscillator.elapsed / oscillator.frequency)) % 1;
|
||||
let y = 0;
|
||||
for (const modulator of oscillator.modulators) {
|
||||
y += modulator(x);
|
||||
|
|
Loading…
Reference in New Issue
Block a user