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; } }
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); } }