_showCardReveal(cardId, index, sourceScreenPosition, cardCount) {
    if (cardCount == null) { cardCount = 1; }

    // create empty card
    const cardNode = CardNode.create();
    this.cardNodes.push(cardNode);
    this.outerLayer.addChild(cardNode);

    // // get reveal parameters
    // var cardContentSize = cardNode.getCardBackgroundContentSize();
    // var targetScreenPosition = cc.p(
    //   this.positionsByIndex[index].x * cardContentSize.width + this.spacingByIndex[index].x,
    //   this.positionsByIndex[index].y * cardContentSize.height + this.spacingByIndex[index].y
    // );
    // var moveDelay = CONFIG.FADE_FAST_DURATION + (2.0 - (index/2.0));

    // play reveal sound
    audio_engine.current().play_effect(RSX[`sfx_loot_crate_card_reward_reveal_${index}`].audio, false);

    // show card reveal
    const sdkCard = SDK.CardFactory.cardForIdentifier(cardId, SDK.GameSession.getInstance());
    const showRevealPromise = cardNode.showReveal(sdkCard, sourceScreenPosition, null, 0.0);

    if (cardCount > 1) {
      showRevealPromise
        .bind(cardNode)
        .then(function () {
          this.showStack(CONFIG.ANIMATE_FAST_DURATION, cardCount - 1, null, cc.p(0, -17), 10);
        });
    }

    return showRevealPromise;
  }
Shows a card revealing and returns a promise that resolves when the card has been revealed.
@param cardId
@param index
@param sourceScreenPosition
@returns {Promise}