public static float GetRankProgress(Account acc) { float bestProgress = 0; bool isActive = false; foreach (var ratingSystem in RatingSystems.GetRatingSystems()) { if (ratingSystem.GetActivePlayers() < 50) { continue; } var rating = ratingSystem.GetPlayerRating(acc.AccountID); if (rating.Rank == int.MaxValue) { continue; } isActive = true; var stdev = Math.Min(10000, rating.Uncertainty); var bracket = ratingSystem.GetPercentileBracket(acc.Rank); var rankCeil = bracket.UpperEloLimit + stdev; var rankFloor = bracket.LowerEloLimit - stdev; bestProgress = Math.Max(bestProgress, Math.Min(1, (rating.RealElo - rankFloor) / (rankCeil - rankFloor))); //Trace.TraceInformation(acc.Name + ": bracket(" + bracket.LowerEloLimit + ", " + bracket.UpperEloLimit + ") requirements (" + rankFloor + ", " + rankCeil + ") current: " + rating.RealElo + " -> progress: " + bestProgress); } if (!isActive) { return(0.001f); } return(bestProgress); }
public static float GetRankProgress(Account acc) { float bestProgress = 0; bool isActive = false; foreach (var ratingSystem in RatingSystems.GetRatingSystems()) { var progress = GetRankProgress(acc, ratingSystem); if (progress != null) { isActive = true; bestProgress = Math.Max(bestProgress, progress.ProgressRatio); } } if (!isActive) { return(0.001f); } return(bestProgress); }