static wait()

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);
  }