Exemple #1
0
        private void UpdateSector(ISimulation sim, SessionResult session, EntitySessionResult result, double curPos, double prevPos)
        {
            if (session.State != SessionState.Racing)
            {
                return;
            }

            var track = sim.Session.Track;

            if (track.SelectedSectors.Count <= 0)
            {
                return;
            }

            var i = 0;

            foreach (var location in track.SelectedSectors.OrderBy(s => s.Index).Select(s => s.Location))
            {
                if (curPos <= location || i <= result.CurrentLap.CurrentSector.Index)
                {
                    i++;
                    continue;
                }

                var now    = Updater.CurrentTime - (curPos - location) * (curPos - prevPos);
                var sector = new CompletedSector(result.CurrentLap.CurrentSector, now);
                result.CurrentLap.SectorsInt.Add(sector);

                result.CurrentLap.CurrentSector.BeginTime      = now;
                result.CurrentLap.CurrentSector.Index          = i;
                result.CurrentLap.CurrentSector.ReplayPosition = (int)(sim.Telemetry.SessionTime * 60 + Updater.TimeOffset);

                break;
            }
        }
Exemple #2
0
        private void OnFinishCrossing(ITelemetry telemetry, EntitySessionResult result, double now, SessionResult session, int newLapNumber)
        {
            // Complete last sector
            var sector = new CompletedSector(result.CurrentLap.CurrentSector, now);

            result.CurrentLap.SectorsInt.Add(sector);

            // Complete this lap and set it as previous lap
            result.PreviousLap = new CompletedLap(result.CurrentLap, now);
            result.LastLapTime = result.PreviousLap.Time;

            if (session.State != SessionState.ParadeLaps && !result.Finished)
            {
                // Start a new lap
                result.CurrentLap.BeginTime      = now;
                result.CurrentLap.Number         = newLapNumber;
                result.CurrentLap.ReplayPosition = (int)(telemetry.SessionTime * 60 + Updater.TimeOffset);
                result.CurrentLap.SectorsInt.Clear();

                result.CurrentLap.WasOnPitRoad = result.Entity.Car.Movement.IsInPits;

                // Set the caution state (can be FALSE if no caution during lap start)
                result.CurrentLap.WasUnderCaution = session.Flags.CheckBits(SessionFlags.Caution,
                                                                            SessionFlags.CautionWaving);

                // Update current sector
                result.CurrentLap.CurrentSector.BeginTime      = now;
                result.CurrentLap.CurrentSector.Index          = 0;
                result.CurrentLap.CurrentSector.ReplayPosition = (int)(telemetry.SessionTime * 60 + Updater.TimeOffset);
            }
        }