showRemove(showDelay, completionCallback) {
    let showDuration = 0.0;
    if (showDelay == null) { showDelay = 0.0; }
    if (!this.getIsEmpty()) {
      // stop any running animations
      this.stopAnimations();

      // get animation data
      const animationAction = UtilsEngine.getAnimationAction(RSX.fxArtifactBreak.name);
      const animationDuration = animationAction.getDuration() * 0.75;

      // set show duration
      showDuration += animationDuration;

      // show fx break animation
      const fxAnimationAction = cc.sequence(
        cc.delayTime(showDelay),
        cc.show(),
        animationAction,
        cc.hide(),
        cc.callFunc(() => {
          // reset card
          this.setSdkCard(null);

          if (_.isFunction(completionCallback)) {
            completionCallback();
          }
        }),
      );
      this.addAnimationAction(fxAnimationAction);
      this._fxBreakSprite.runAction(fxAnimationAction);

      // get resources ready promise
      const whenCardResourcesReadyPromise = this.whenResourcesReady(this.getCardResourceRequestId());

      // create remove action
      this._showRemoveAction = cc.sequence(
        cc.delayTime(showDelay + animationDuration),
        cc.callFunc(() => {
          whenCardResourcesReadyPromise.then((cardResourceRequestId) => {
            if (!this.getAreResourcesValid(cardResourceRequestId)) return; // card has changed
            if (this.cardSprite != null) {
              this.cardSprite.destroy();
              this.cardSprite = null;
            }
          });
        }),
      );

      // run remove action
      this.addAnimationAction(this._showRemoveAction);
      this.runAction(this._showRemoveAction);
    }

    return showDuration;
  }
Shows the animated removal of an artifact.
@param {Number} [showDelay=0.0]
@param {Function} [completionCallback]
@returns {Number} duration of animation