updateShowingSdkNodeStats(force) {
    // show stats over units
    if (this.getIsActive()
      && ((CONFIG.alwaysShowStats && (this._currentSdkStepInterface == null || CONFIG.OVERLAY_STATS_DURING_STEPS))
      || (this._player.getIsTakingInspectAction() && CONFIG.OVERLAY_STATS_DURING_HOVER)
      || (this._player.getIsTakingSelectionAction() && CONFIG.OVERLAY_STATS_DURING_SELECT))) {
      const lastSdkStateRecordingAction = this._lastShownSdkStateRecordingAction;
      const actionEventType = this._currentSdkStepInterface == null ? EVENTS.update_cache_step : EVENTS.update_cache_action;
      if (!this._showingStats
        || this._showingStatsForSdkStateRecordingAction !== lastSdkStateRecordingAction
        || this._showingStatsForSdkStateRecordingActionEventType !== actionEventType
        || force) {
        this._showingStats = true;
        this._showingStatsForSdkStateRecordingAction = lastSdkStateRecordingAction;
        this._showingStatsForSdkStateRecordingActionEventType = actionEventType;
        const entityNodes = this._entityNodes;
        for (let i = 0, il = entityNodes.length; i < il; i++) {
          const entityNode = entityNodes[i];
          const statsNode = entityNodes[i].getStatsNode();
          if (statsNode) {
            if (entityNode.getIsSpawned()) {
              // update stats to last action
              statsNode.showStatsAsOfAction(lastSdkStateRecordingAction, actionEventType);
            } else {
              statsNode.stopShowing();
            }
          }
        }
      }
    } else {
      this.stopShowingSdkNodeStats();
    }
  }
Shows and updates or hides sdk node stats as needed.
@param {Boolean} [force=false] whether to force an update