Example #1
0
        private GlickoPlayer CalculateNewRatingByResult(Dictionary <string, DriversRating> ratings, DriversRating rating, SessionFinishState sessionFinishState, DriverFinishState player)
        {
            Logger.Info("---- CALCULATING NEW RATINGS ---");
            Logger.Info($"Players Rating: {rating.Rating}-{rating.Deviation}-{rating.Volatility}");
            LogRatings(ratings);
            var playerRating  = rating.ToGlicko(player.Name);
            var glickoRatings = TransformToGlickoPlayers(ratings);

            DriverFinishState[] eligibleDrivers = sessionFinishState.DriverFinishStates.Where(x => !x.IsPlayer && ratings.ContainsKey(x.Name)).ToArray();
            var opponents = eligibleDrivers.Select(x => new GlickoOpponent(glickoRatings[x.Name], x.FinishPosition < player.FinishPosition ? 0 : 1)).ToList();

            return(CalculateNewRating(playerRating, opponents));
        }
Example #2
0
        public (DriversRating newSimulatorRating, DriversRating newClassRating, DriversRating newDifficultyRating) UpdateRatingsByResults(Dictionary <string, DriversRating> ratings, DriversRating difficultyRating, DriversRating simulatorRating, SessionFinishState sessionFinishState, int difficulty)
        {
            DriverFinishState player = sessionFinishState.DriverFinishStates.First(x => x.IsPlayer);

            Logger.Info("---- CALCULATING NEW CLASS RATINGS ---");
            GlickoPlayer newClassRating = CalculateNewRatingByResult(ratings, ratings[player.Name], sessionFinishState, player);

            Logger.Info("---- CALCULATING NEW SIM RATINGS ---");
            GlickoPlayer newSimRating = CalculateNewRatingByResult(ratings, simulatorRating, sessionFinishState, player);

            Logger.Info("---- CALCULATING NEW DIFFICULTY RATINGS ---");
            GlickoPlayer newDifficultyRating = CalculateNewRatingByResult(ratings, difficultyRating, sessionFinishState, player);

            ComputeNewRatingsAndNotify(newClassRating.FromGlicko(), newDifficultyRating.FromGlicko(), newSimRating.FromGlicko(), difficulty, player, sessionFinishState.TrackName);
            return(newSimRating.FromGlicko(), newClassRating.FromGlicko(), newDifficultyRating.FromGlicko());
        }