/// <summary> /// Update displayed metrics. /// </summary> /// <param name="metrics">New metrics to overwrite the existing display. Can be null.</param> /// <param name="failOnMissing">Whether to hide the display on null or empty metrics. If false, we will dim as if waiting for further updates.</param> private void updateMetrics(BeatmapMetrics metrics, bool failOnMissing = true) { var hasRatings = metrics?.Ratings.Any() ?? false; var hasRetriesFails = (metrics?.Retries.Any() ?? false) && metrics.Fails.Any(); if (failOnMissing) { loading.Hide(); } if (hasRatings) { var ratings = metrics.Ratings.ToList(); ratingsContainer.Show(); negativeRatings.Text = ratings.GetRange(0, ratings.Count / 2).Sum().ToString(); positiveRatings.Text = ratings.GetRange(ratings.Count / 2, ratings.Count / 2).Sum().ToString(); ratingsBar.Length = (float)ratings.GetRange(0, ratings.Count / 2).Sum() / ratings.Sum(); ratingsGraph.Values = ratings.Select(rating => (float)rating); ratingsContainer.FadeColour(Color4.White, 500, EasingTypes.Out); } else if (failOnMissing) { ratingsGraph.Values = new float[10]; } else { ratingsContainer.FadeColour(Color4.Gray, 500, EasingTypes.Out); } if (hasRetriesFails) { var retries = metrics.Retries; var fails = metrics.Fails; retryFailContainer.Show(); float maxValue = fails.Zip(retries, (fail, retry) => fail + retry).Max(); failGraph.MaxValue = maxValue; retryGraph.MaxValue = maxValue; failGraph.Values = fails.Select(fail => (float)fail); retryGraph.Values = retries.Zip(fails, (retry, fail) => retry + MathHelper.Clamp(fail, 0, maxValue)); retryFailContainer.FadeColour(Color4.White, 500, EasingTypes.Out); } else if (failOnMissing) { failGraph.Values = new float[100]; retryGraph.Values = new float[100]; } else { retryFailContainer.FadeColour(Color4.Gray, 500, EasingTypes.Out); } }
private void displayMetrics(BeatmapMetrics metrics, bool failOnMissing = true) { var hasRatings = metrics?.Ratings?.Any() ?? false; var hasRetriesFails = (metrics?.Retries?.Any() ?? false) && (metrics.Fails?.Any() ?? false); if (failOnMissing) { loading.Hide(); } if (hasRatings) { ratings.Metrics = metrics; ratings.FadeIn(transition_duration); } else if (failOnMissing) { ratings.Metrics = new BeatmapMetrics { Ratings = new int[10], }; } else { ratings.FadeTo(0.25f, transition_duration); } if (hasRetriesFails) { failRetryGraph.Metrics = metrics; failRetryContainer.FadeIn(transition_duration); } else if (failOnMissing) { failRetryGraph.Metrics = new BeatmapMetrics { Fails = new int[100], Retries = new int[100], }; } else { failRetryContainer.FadeTo(0.25f, transition_duration); } }