protected virtual IList <TSDriverModel> FormatLeaderboardData(NascarFeed.Models.LiveFeed.RootObject feedData) { double previousDelta = 0.0; var models = new List <TSDriverModel>(); foreach (var vehicle in feedData.vehicles) { var model = new TSDriverModel() { Position = vehicle.running_position, CarNumber = vehicle.vehicle_number, Driver = vehicle.driver.full_name, BehindLeader = vehicle.delta, Manufacturer = vehicle.vehicle_manufacturer, StartPosition = vehicle.starting_position, LastLapTime = vehicle.last_lap_time, FastestLapTime = vehicle.best_lap_time, FastestLapNumber = vehicle.best_lap, LastPitLap = vehicle.pit_stops.Count > 0 ? vehicle.pit_stops.LastOrDefault().pit_in_leader_lap : 0, LapsComplete = vehicle.laps_completed, BehindNext = vehicle.delta < 0 ? previousDelta < 0 ? vehicle.delta - previousDelta : vehicle.delta : vehicle.delta - previousDelta }; models.Add(model); previousDelta = vehicle.delta; } return(models); }
protected virtual IList <TSDriverModel> FormatLeaderboardData(NascarFeed.Models.LiveFeed.RootObject feedData) { double previousDelta = 0.0; var models = new List <TSDriverModel>(); var fastestThisLap = new List <TSDriverModel>(); double fastestLapTimeThisLap = 999999; foreach (var vehicle in feedData.vehicles) { var model = new TSDriverModel() { Position = vehicle.running_position, CarNumber = vehicle.vehicle_number, Driver = vehicle.driver.full_name, BehindLeader = vehicle.delta, Manufacturer = vehicle.vehicle_manufacturer, StartPosition = vehicle.starting_position, LastLapTime = vehicle.last_lap_time, FastestLapTime = vehicle.best_lap_time, FastestLapNumber = vehicle.best_lap, LastPitLap = vehicle.pit_stops.Count > 0 ? vehicle.pit_stops.LastOrDefault().pit_in_leader_lap : 0, LapsComplete = vehicle.laps_completed, BehindNext = vehicle.delta < 0 ? previousDelta < 0 ? vehicle.delta - previousDelta : vehicle.delta : vehicle.delta - previousDelta, IsOnTrack = vehicle.is_on_track, VehicleStatus = (VehicleStatus)vehicle.status, IsUserFavorite = _userSettings.FavoriteDrivers.Any(f => f.Driver == vehicle.driver.full_name) }; models.Add(model); previousDelta = vehicle.delta; if (model.VehicleStatus == VehicleStatus.OnTrack) { if (model.LastLapTime == fastestLapTimeThisLap) { fastestThisLap.Add(model); } else if (model.LastLapTime < fastestLapTimeThisLap) { fastestThisLap.Clear(); fastestThisLap.Add(model); fastestLapTimeThisLap = model.LastLapTime; } } } foreach (var model in fastestThisLap) { model.FastestThisLap = true; } return(models); }
protected virtual void UpdateDisplay(TSDriverModel model) { if (model == null) { return; } this.BackColor = model.Position % 2 == 1 ? TSColorMap.AlternatingRowBackColor0 : TSColorMap.AlternatingRowBackColor1; this.tsDriverFastestLap1.BackColor = this.BackColor; lblPosition.Text = $"{model.Position}."; lblCar.Text = model.CarNumber.ToString(); lblDriver.Text = model.Driver; lblBehind.Text = model.BehindLeader == 0 ? "- -" : model.BehindLeader < 0 ? model.BehindLeader == -1 ? $"{(model.BehindLeader * -1)} lap" : $"{(model.BehindLeader * -1)} laps" : model.BehindLeader.ToString("0.00"); lblLastLap.Text = model.LastLapTime.ToString("##.00"); tsDriverFastestLap1.FastestLapTime = model.FastestLapTime.ToString("0.00"); tsDriverFastestLap1.FastestLapNumber = model.FastestLapNumber.ToString(); tsDriverFastestLap1.IsFastestLap = ((model.LastLapTime <= model.FastestLapTime) && model.FastestLapTime > 0); tsDriverFastestLap1.IsOffTrack = (model.VehicleStatus == VehicleStatus.OutOfRace); if (Configuration.RunType == RunType.Race) { lblLastPit.Text = model.LastPitLap.ToString(); lblStart.Text = model.StartPosition.ToString(); } else { lblLastPit.Text = String.Empty; lblStart.Text = String.Empty; } if (model.IsUserFavorite) { this.BorderStyle = BorderStyle.Fixed3D; } else { this.BorderStyle = BorderStyle.None; } if (model.VehicleStatus == VehicleStatus.OutOfRace) { lblPosition.ForeColor = TSColorMap.OutOfEventColor; lblCar.ForeColor = TSColorMap.OutOfEventColor; lblDriver.ForeColor = TSColorMap.OutOfEventColor; lblBehind.ForeColor = TSColorMap.OutOfEventColor; lblLastLap.ForeColor = TSColorMap.OutOfEventColor; lblCar.ForeColor = TSColorMap.OutOfEventColor; lblLastPit.ForeColor = TSColorMap.OutOfEventColor; lblStart.ForeColor = TSColorMap.OutOfEventColor; } else if (model.VehicleStatus == VehicleStatus.BehindTheWall) { lblPosition.ForeColor = TSColorMap.BehindTheWallColor; lblCar.ForeColor = TSColorMap.BehindTheWallColor; lblDriver.ForeColor = TSColorMap.BehindTheWallColor; lblBehind.ForeColor = TSColorMap.BehindTheWallColor; lblLastLap.ForeColor = TSColorMap.BehindTheWallColor; lblCar.ForeColor = TSColorMap.BehindTheWallColor; lblLastPit.ForeColor = TSColorMap.BehindTheWallColor; lblStart.ForeColor = TSColorMap.BehindTheWallColor; } else { lblPosition.ForeColor = TSColorMap.StartPositionForeColor; lblCar.ForeColor = TSColorMap.CarNumberForeColor; if (model.FastestThisLap) { lblLastLap.ForeColor = TSColorMap.FastestThisLapForeColor; lblLastLap.Text = $"*{lblLastLap.Text}*"; } else { lblLastLap.ForeColor = TSColorMap.LastLapForeColor; } if (Configuration.RunType == RunType.Race) { if (model.StartPosition < model.Position) { lblStart.ForeColor = TSColorMap.StartPositionLossForeColor; } else if (model.StartPosition > model.Position) { lblStart.ForeColor = TSColorMap.StartPositionGainForeColor; } else { lblStart.ForeColor = TSColorMap.StartPositionForeColor; } if (!model.IsOnTrack) { lblLastPit.BackColor = TSColorMap.IsInPitsBackColor; lblLastPit.ForeColor = TSColorMap.IsInPitsForeColor; } else { lblLastPit.BackColor = this.BackColor; var lapsSinceLastPit = model.LapsComplete - model.LastPitLap; if (Configuration.PitWindow.HasValue && (model.LastPitLap > 0 && lapsSinceLastPit >= Configuration.PitWindow.Value)) { lblLastPit.ForeColor = TSColorMap.LastPitOverLimitForeColor; } else if (Configuration.PitWindow.HasValue && (lapsSinceLastPit + Configuration.PitWindowWarning > Configuration.PitWindow.Value)) { lblLastPit.ForeColor = TSColorMap.LastPitWarningForeColor; } else { lblLastPit.ForeColor = TSColorMap.LastPitForeColor; } } } else { lblStart.ForeColor = TSColorMap.StartPositionForeColor; lblLastPit.ForeColor = TSColorMap.LastPitForeColor; } if ((Configuration.BattleGap > 0) && model.BehindNext > 0 && model.BehindNext < Configuration.BattleGap) { lblBehind.ForeColor = TSColorMap.BehindWithinBattleGapForeColor; lblDriver.ForeColor = TSColorMap.DriverWithinBattleGapForeColor; } else { lblBehind.ForeColor = TSColorMap.BehindForeColor; lblDriver.ForeColor = TSColorMap.DriverForeColor; } } switch (model.Manufacturer) { case "Tyt": { picManufacturer.Image = rNascarTimingAndScoring.Properties.Resources.toyota_logo; break; } case "Frd": { picManufacturer.Image = rNascarTimingAndScoring.Properties.Resources.ford_logo; break; } case "Chv": { picManufacturer.Image = rNascarTimingAndScoring.Properties.Resources.chevy_logo; break; } } }