private void StartFlashing() { _isFlashing = true; _flashStopwatch.Start(); SessionKind = SessionKind.RaceWithQualification; SessionPhaseKind = SessionPhaseKind.None; }
private void Flash() { if (_flashStopwatch.ElapsedMilliseconds <= 800) { return; } _flashStopwatch.Restart(); SessionKind = SessionKind == SessionKind.RaceWithQualification ? SessionKind.Idle : SessionKind.RaceWithQualification; SessionPhaseKind = SessionPhaseKind == SessionPhaseKind.None ? SessionPhaseKind.InProgress : SessionPhaseKind.None; }
public override bool DoDataLoaded(SimulatorDataSet simulatorDataSet) { if (!IsStateInitialized && simulatorDataSet.DriversInfo.Any(x => string.IsNullOrWhiteSpace(x.DriverName))) { return(false); } // Second Race - Session didn't change, but player state has if (_ratingComputed && simulatorDataSet.PlayerInfo.FinishStatus == DriverFinishStatus.None) { Initialize(simulatorDataSet); } if (_isFlashing) { Flash(); return(base.DoDataLoaded(simulatorDataSet)); } if (simulatorDataSet.SessionInfo.SessionPhase == SessionPhase.Countdown) { SessionPhaseKind = SessionPhaseKind.NotStarted; } else if (!_wasMoving) { _wasMoving = simulatorDataSet.PlayerInfo.Speed.InMs > 5; SessionPhaseKind = SessionPhaseKind.NotStarted; } else if (simulatorDataSet.PlayerInfo.CompletedLaps < _graceLaps) { SessionPhaseKind = SessionPhaseKind.FreeRestartPeriod; } else { SessionPhaseKind = SessionPhaseKind.InProgress; } if (!_isFlashing && simulatorDataSet.PlayerInfo.FinishStatus == DriverFinishStatus.Finished && (simulatorDataSet.SessionInfo.SessionPhase == SessionPhase.Green || simulatorDataSet.SessionInfo.SessionPhase == SessionPhase.Checkered)) { StartFlashing(); ComputeRatingFromResults(simulatorDataSet); _ratingComputed = true; } return(base.DoDataLoaded(simulatorDataSet)); }