showReveal(scaleTo, withAudio) {
    if (scaleTo == null) { scaleTo = 1.0; }
    if (withAudio == null) { withAudio = true; }

    // hide elements immediately
    this.setVisible(false);
    this.setScale(0.0);
    this.setOpacity(0.0);
    this._stopShowingFXSprites(0.0);

    return this.whenRequiredResourcesReady().then((requestId) => {
      if (!this.getAreResourcesValid(requestId)) return; // load invalidated or resources changed

      return new Promise((resolve, reject) => {
        if (withAudio) {
          audio_engine.current().play_effect(RSX.sfx_loot_crate_reveal.audio, false);
        }

        this.runAction(cc.sequence(
          // reveal self
          cc.spawn(
            cc.show(),
            cc.fadeIn(CONFIG.ANIMATE_FAST_DURATION),
            cc.scaleTo(CONFIG.ANIMATE_FAST_DURATION, scaleTo).easing(cc.easeBackOut()),
          ),
          cc.callFunc(() => {
            resolve();
          }),
        ));
      })
        .catch((error) => { EventBus.getInstance().trigger(EVENTS.error, error); });
    });
  }
Shows a loot crate being revealed.
@param {Number} [scaleTo=1.0]
@param {Boolean} [withAudio=true]
@public
@return {Promise}