_showCardReveal(cardId, targetScreenPosition, zOrder) {
    if (zOrder == null) { zOrder = this.zOrderCard; }

    // create empty card
    const cardNode = CardNode.create();
    cardNode.setPosition(targetScreenPosition);
    this._cardNodes.push(cardNode);
    this.addChild(cardNode, zOrder);

    // play reveal sound
    audio_engine.current().play_effect(RSX.sfx_ui_card_reveal.audio, false);

    // show card reveal, then show stack
    const sdkCard = SDK.CardFactory.cardForIdentifier(cardId, SDK.GameSession.getInstance());
    return cardNode.selectReveal(sdkCard)
      .then(() => {
        // show stack if not general
        if (!(sdkCard instanceof SDK.Entity) || !sdkCard.getIsGeneral()) {
          cardNode.showStack();
        }
      });
  }
Shows a card revealing and returns a promise that resolves when the card has been revealed.
@param {String|Number} cardId
@param {cc.Point} targetScreenPosition
@param {Number} [zOrder=this.zOrderCard]
@returns {Promise}