stopShowingKey(duration) {
    // cancel showing key
    if (this._showKeyPromise != null) {
      this._showKeyPromise.cancel();
      this._showKeyPromise = null;
    }

    // hide key
    if (this._lootCrateKeySprite != null) {
      if (duration == null) { duration = 0.0; }
      this._stopShowingKeyPromise = this.whenRequiredResourcesReady().then((requestId) => {
        if (!this.getAreResourcesValid(requestId)) return; // load invalidated or resources changed

        return new Promise((resolve) => {
          this._stopShowingKeyPromise = null;
          this._lootCrateKeySprite.fadeToInvisible(duration, () => { resolve(); });
        })
          .catch((error) => { EventBus.getInstance().trigger(EVENTS.error, error); });
      })
        .cancellable()
        .catch(Promise.CancellationError, () => {
          Logger.module('APPLICATION').log('MysteryCrateNode -> key hide promise chain cancelled');
        });
    }

    return this._stopShowingKeyPromise;
  }
Stops showing key.
@param {Number} [duration=0.0]
@returns {Promise}