Beispiel #1
0
 private void StartFlashing()
 {
     _isFlashing = true;
     _flashStopwatch.Start();
     SessionKind      = SessionKind.RaceWithQualification;
     SessionPhaseKind = SessionPhaseKind.None;
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
        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));
        }