showCardSelectScreen(arenaRunData) {
    // show choose card layer as needed
    // choose card layer should be reused until all card selections are made
    let transitionPromise;
    let showScreenPromise;

    // hide play button for now
    this.deckStatsLayer.hidePlayButton();

    if (!(this.outerLayer instanceof ChooseCardLayer)) {
      transitionPromise = this.transitionCurrentScreenOut();
      showScreenPromise = transitionPromise.then(() => {
        this.outerLayer = new ChooseCardLayer(arenaRunData);
        this.outerLayer.delegate = this;
        this.outerLayer.setPosition(UtilsEngine.getGSIWinCenterPosition());
        this.getNoFXLayer().addChild(this.outerLayer, this._z_order_content);

        return this.outerLayer.transitionIn();
      });
    } else {
      transitionPromise = Promise.resolve();
      showScreenPromise = Promise.resolve();
    }

    // immediately after transition
    transitionPromise = transitionPromise.then(() => {
      this.showFactionVisualsForFactionId(arenaRunData.faction_id, arenaRunData.general_id);
      this.deckLayer.showDeck();
      this.deckStatsLayer.showDeckStats();
    });

    // show card options after showing new screen
    return showScreenPromise.then(() => {
      // Switch between displaying either general choices or card choices, general choices gets priority
      if (arenaRunData.general_choices != null) {
        this.outerLayer.showCardOptions(arenaRunData.general_choices);
      } else {
        this.outerLayer.showCardOptions(arenaRunData.card_choices);
      }
    });
  }
Shows card selection visuals for data.
@param {Object} arenaRunData
@returns {Promise}