private void UpdateTimeDelta() { if (_timeDelta == null) { return; } // Update the positions of all cars _timeDelta.Update(_telemetry.SessionTime.Value, _telemetry.CarIdxLapDistPct.Value); // Order drivers by live position var drivers = _drivers.OrderBy(d => d.Driver.Live.Position).ToList(); if (drivers.Count > 0) { // Get leader var leader = drivers[0]; leader.Driver.Delta.ToLeader = DeltaTime.Zero; leader.Driver.Delta.ToNext = DeltaTime.Zero; // Loop through drivers for (int i = 1; i < drivers.Count; i++) { var behind = drivers[i]; var ahead = drivers[i - 1]; // Lapped? var leaderLapDiff = Math.Abs(leader.Driver.Live.TotalLapDistance - behind.Driver.Live.TotalLapDistance); var nextLapDiff = Math.Abs(ahead.Driver.Live.TotalLapDistance - behind.Driver.Live.TotalLapDistance); if (leaderLapDiff < 1) { var leaderDelta = _timeDelta.GetDelta(behind.Driver.Id, leader.Driver.Id); behind.Driver.Delta.ToLeader = DeltaTime.FromTime(leaderDelta.TotalSeconds); } else { behind.Driver.Delta.ToLeader = DeltaTime.FromLaps((int)Math.Floor(leaderLapDiff)); } if (nextLapDiff < 1) { var nextDelta = _timeDelta.GetDelta(behind.Driver.Id, ahead.Driver.Id); behind.Driver.Delta.ToNext = DeltaTime.FromTime(nextDelta.TotalSeconds); } else { behind.Driver.Delta.ToNext = DeltaTime.FromLaps((int)Math.Floor(nextLapDiff)); } } } }