public Dictionary <string, DriversRating> CreateFieldRating(DriverInfo[] fieldDrivers, int difficulty) { InitializeReferenceRating(difficulty); fieldDrivers = fieldDrivers.OrderBy(x => x.Position).ToArray(); Dictionary <string, DriversRating> ratings = new Dictionary <string, DriversRating>(); int middleDriverIndex = _referenceRatingProviderFactory.CreateReferenceRatingProvider().GetReferenceDriverIndex(fieldDrivers.Length); int ratingBetweenPlaces = _simulatorRatingController.QuickRaceAiRatingForPlace; for (int i = 0; i < fieldDrivers.Length; i++) { DriverInfo driver = fieldDrivers[i]; if (driver.IsPlayer) { ratings[driver.DriverName] = _simulatorRatingController.GetPlayerRating(driver.CarClassName).simRating; continue; } DriverWithoutRating aiDriver = _simulatorRatingController.GetAiRating(driver.DriverName); int rating = AddNoise(_referenceRating + (middleDriverIndex - i) * ratingBetweenPlaces); ratings[driver.DriverName] = new DriversRating() { Deviation = aiDriver.Deviation, Volatility = aiDriver.Volatility, Rating = rating }; } return(ratings); }
public Dictionary <string, DriversRating> CreateFieldRatingFromQualificationResult(List <Driver> qualificationResult, int difficulty) { InitializeReferenceTime(qualificationResult); InitializeReferenceRating(difficulty); Dictionary <string, DriversRating> ratings = new Dictionary <string, DriversRating>(); int lastRating = 0; foreach (Driver driver in qualificationResult.Where(x => x.IsPlayer || (x.BestPersonalLap != null && x.BestPersonalLap.LapTime != TimeSpan.Zero))) { if (driver.IsPlayer) { ratings[driver.DriverName] = _simulatorRatingController.GetPlayerRating(driver.ClassName).simRating; continue; } DriverWithoutRating aiDriver = _simulatorRatingController.GetAiRating(driver.DriverName); lastRating = ComputeRating(driver.BestPersonalLap.LapTime); ratings[driver.DriverName] = new DriversRating() { Deviation = aiDriver.Deviation, Volatility = aiDriver.Volatility, Rating = lastRating }; } foreach (Driver driver in qualificationResult.Where(x => !x.IsPlayer && (x.BestPersonalLap == null || x.BestPersonalLap.LapTime == TimeSpan.Zero))) { DriverWithoutRating aiDriver = _simulatorRatingController.GetAiRating(driver.DriverName); ratings[driver.DriverName] = new DriversRating() { Deviation = aiDriver.Deviation, Volatility = aiDriver.Volatility, Rating = lastRating }; } return(ratings); }