OverlayData.Driver[] LatestRunningOrder(DataSample data, TimeSpan relativeTime) { var drivers = data.Telemetry.Cars.Where(c => !c.Details.IsPaceCar).Select(c => new OverlayData.Driver { UserName = c.Details.UserName, CarNumber = c.Details.CarNumberDisplay, Position = c.Position, CarIdx = c.CarIdx, PitStopCount = c.PitStopCount }) .OrderBy(c => c.Position) .ToArray(); if (lastDrivers != null) { foreach (var d in drivers.OrderBy(d => d.Position)) { var lastPosition = lastDrivers.FirstOrDefault(lp => lp.CarIdx == d.CarIdx); if (lastPosition != null && lastPosition.Position != d.Position) { var position = d.Position != null?d.Position.Value.ToString() : ""; var indicator = d.Position != null?d.Position.Value.Ordinal() : ""; var msg = "{0} in {1}{2}".F(d.UserName, position, indicator); TraceInfo.WriteLine("{0} {1}", data.Telemetry.SessionTimeSpan, msg); commentaryMessages.Add(msg, relativeTime.TotalSeconds); } } } lastDrivers = drivers; return(drivers); }
void AnnounceIfDriverHasFinished(DataSample data, TimeSpan relativeTime, SessionData._SessionInfo._Sessions session, int i, ref OverlayData.LeaderBoard leaderBoard) { if (!data.LastSample.Telemetry.Cars[i].HasSeenCheckeredFlag || haveNotedCheckerdFlag[i]) { return; } haveNotedCheckerdFlag[i] = true; var driver = data.SessionData.DriverInfo.CompetingDrivers[i]; var position = (int)session.ResultsPositions.First(r => r.CarIdx == i).Position; var pitStopCount = data.Telemetry.Cars[i].PitStopCount; var drivers = leaderBoard.Drivers.Where(d => d.CarIdx != i) .Select(d => d.Clone()) .ToList(); drivers.Insert((int)position - 1, new OverlayData.Driver { CarNumber = driver.CarNumber, UserName = driver.UserName, Position = position, CarIdx = i, PitStopCount = pitStopCount }); var p = 1; foreach (var d in drivers) { d.Position = p++; } leaderBoard = captureLeaderBoard.CreateLeaderBoard(data, relativeTime, drivers.ToArray()); var msg = string.Format("{0} finished in {1}{2}", driver.UserName, position, position.Ordinal()); TraceInfo.WriteLine("{0} {1}", data.Telemetry.SessionTimeSpan, msg); commentaryMessages.Add(msg, relativeTime.TotalSeconds); }