in src/core/Utils.js [91:145]
static wait(seconds = 0, {onFinish, onProgress, onCancel, onError} = {}) {
// Make sure seconds is numeric
if (typeof seconds !== 'number') {
console.warn(
`Invalid seconds value ${seconds} for wait. Defaulting to 0.`
);
seconds = 0;
}
// Resolve immediately if the wait time is not greater than 0
if (seconds <= 0) {
if (typeof onFinish === 'function') {
onFinish();
}
return Deferred.resolve();
}
let currentTime = 0;
const totalTime = seconds * 1000; // convert to milliseconds
// Executable to pass to Deferred, meant to be run in an update loop
const onUpdate = (resolve, reject, _cancel, deltaTime = 0) => {
if (typeof deltaTime !== 'number') {
const e = new Error(
`Invalid property wait deltaTime. DeltaTime must be a number.`
);
reject(e);
return;
}
// Make sure time has passed
if (deltaTime === 0) {
return;
}
// Signal progress
currentTime += deltaTime;
if (currentTime < 0) {
currentTime = 0;
}
if (typeof onProgress === 'function') {
onProgress(Math.min(currentTime / totalTime, 1));
}
// Signal completion once time is up
if (currentTime >= totalTime) {
resolve();
}
};
return new Deferred(onUpdate, onFinish, onError, onCancel);
}