showEntry(step) {
    let showEntryPromise;

    if (this.getIsValidEntry(step)) {
      // record step as processed
      this._stepsProcessed.push(step);

      // show step
      showEntryPromise = new Promise((resolve, reject) => {
        const battleLogNodes = this._battleLogNodesInUse;
        const battleLogNodesPositions = this._battleLogNodePositions;
        const animateNextPromises = [];
        // get next node
        const nextBattleLogNode = this._shiftToNextBattleLogNode();

        // animate oldest node out as needed
        let oldestBattleLogNode;
        if (battleLogNodes.length > CONFIG.MAX_BATTLELOG_ENTRIES) {
          oldestBattleLogNode = battleLogNodes[battleLogNodes.length - 1];
          if (oldestBattleLogNode != null && !oldestBattleLogNode.getIsEmpty()) {
            animateNextPromises.push(oldestBattleLogNode.showOut(battleLogNodesPositions[battleLogNodesPositions.length - 1]).then(() => {
              oldestBattleLogNode.setVisible(false);
            }));
          }
        }

        // store the step
        nextBattleLogNode.setStep(step);

        // animate next node in
        nextBattleLogNode.setVisible(true);
        animateNextPromises.push(nextBattleLogNode.showIn(battleLogNodesPositions[0]));

        // animate other nodes to next position
        for (let i = 1, il = battleLogNodes.length; i < il; i++) {
          const battleLogNode = battleLogNodes[i];
          if (battleLogNode !== nextBattleLogNode && battleLogNode !== oldestBattleLogNode) {
            animateNextPromises.push(battleLogNode.showMoveToNext(battleLogNodesPositions[i]));
          }
        }

        Promise.all(animateNextPromises).then(() => {
          // update positions
          this._updateBattleLogNodesPositions();

          resolve();
        });
      });
    }

    return showEntryPromise || Promise.resolve();
  }
Shows an entry in the battle log from a step.
@param step