From d4e5f550914dfb0b3f1104b1cf0ade75fc3b5802 Mon Sep 17 00:00:00 2001 From: Jorolf Date: Tue, 11 Apr 2017 18:43:48 +0200 Subject: [PATCH] the power of linq --- .../Tests/TestCaseBeatmapDetails.cs | 32 ++++--------------- osu.Game/Database/BeatmapMetric.cs | 6 ++-- osu.Game/Graphics/UserInterface/BarGraph.cs | 17 +++++----- osu.Game/Screens/Select/BeatmapDetails.cs | 23 +++++++------ 4 files changed, 28 insertions(+), 50 deletions(-) diff --git a/osu.Desktop.VisualTests/Tests/TestCaseBeatmapDetails.cs b/osu.Desktop.VisualTests/Tests/TestCaseBeatmapDetails.cs index 9ea182c5c7..7cf42b966a 100644 --- a/osu.Desktop.VisualTests/Tests/TestCaseBeatmapDetails.cs +++ b/osu.Desktop.VisualTests/Tests/TestCaseBeatmapDetails.cs @@ -42,9 +42,9 @@ namespace osu.Desktop.VisualTests.Tests StarDifficulty = 5.3f, Metric = new BeatmapMetric { - Ratings = Enumerable.Range(0,10).ToList(), - Fails = Enumerable.Range(lastRange, 100).Select(i => i % 12 - 6).ToList(), - Retries = Enumerable.Range(lastRange - 3, 100).Select(i => i % 12 - 6).ToList(), + Ratings = Enumerable.Range(0,10), + Fails = Enumerable.Range(lastRange, 100).Select(i => i % 12 - 6), + Retries = Enumerable.Range(lastRange - 3, 100).Select(i => i % 12 - 6), }, }, }); @@ -56,29 +56,9 @@ namespace osu.Desktop.VisualTests.Tests private void newRetryAndFailValues() { - details.Beatmap = new BeatmapInfo - { - Version = "VisualTest", - Metadata = new BeatmapMetadata - { - Source = "Some guy", - Tags = "beatmap metadata example with a very very long list of tags and not much creativity", - }, - Difficulty = new BeatmapDifficulty - { - CircleSize = 7, - ApproachRate = 3.5f, - OverallDifficulty = 5.7f, - DrainRate = 1, - }, - StarDifficulty = 5.3f, - Metric = new BeatmapMetric - { - Ratings = Enumerable.Range(0, 10).ToList(), - Fails = Enumerable.Range(lastRange, 100).Select(i => i % 12 - 6).ToList(), - Retries = Enumerable.Range(lastRange - 3, 100).Select(i => i % 12 - 6).ToList(), - }, - }; + details.Beatmap.Metric.Fails = Enumerable.Range(lastRange, 100).Select(i => i % 12 - 6); + details.Beatmap.Metric.Retries = Enumerable.Range(lastRange - 3, 100).Select(i => i % 12 - 6); + details.Beatmap = details.Beatmap; lastRange += 100; } } diff --git a/osu.Game/Database/BeatmapMetric.cs b/osu.Game/Database/BeatmapMetric.cs index 6272e5d6b1..e40da27d1d 100644 --- a/osu.Game/Database/BeatmapMetric.cs +++ b/osu.Game/Database/BeatmapMetric.cs @@ -10,16 +10,16 @@ namespace osu.Game.Database /// /// Ratings for a beatmap, length should be 10 /// - public List Ratings { get; set; } + public IEnumerable Ratings { get; set; } /// /// Fails for a beatmap, length should be 100 /// - public List Fails { get; set; } + public IEnumerable Fails { get; set; } /// /// Retries for a beatmap, length should be 100 /// - public List Retries { get; set; } + public IEnumerable Retries { get; set; } } } diff --git a/osu.Game/Graphics/UserInterface/BarGraph.cs b/osu.Game/Graphics/UserInterface/BarGraph.cs index 41a00d7fec..0b249d857b 100644 --- a/osu.Game/Graphics/UserInterface/BarGraph.cs +++ b/osu.Game/Graphics/UserInterface/BarGraph.cs @@ -42,23 +42,22 @@ namespace osu.Game.Graphics.UserInterface { set { - List values = value?.ToList() ?? new List(); - List graphBars = Children.ToList(); - for (int i = 0; i < values.Count; i++) - if (graphBars.Count > i) + List bars = Children.ToList(); + foreach (var bar in value.Select((length, index) => new { Value = length, Bar = bars.Count > index ? bars[index] : null })) + if (bar.Bar != null) { - graphBars[i].Length = values[i] / (MaxValue ?? values.Max()); - graphBars[i].Size = (direction & BarDirection.Horizontal) > 0 ? new Vector2(1, 1.0f / values.Count) : new Vector2(1.0f / values.Count, 1); + bar.Bar.Length = bar.Value / (MaxValue ?? value.Max()); + bar.Bar.Size = (direction & BarDirection.Horizontal) > 0 ? new Vector2(1, 1.0f / value.Count()) : new Vector2(1.0f / value.Count(), 1); } else Add(new Bar { RelativeSizeAxes = Axes.Both, - Size = (direction & BarDirection.Horizontal) > 0 ? new Vector2(1, 1.0f / values.Count) : new Vector2(1.0f / values.Count, 1), - Length = values[i] / (MaxValue ?? values.Max()), + Size = (direction & BarDirection.Horizontal) > 0 ? new Vector2(1, 1.0f / value.Count()) : new Vector2(1.0f / value.Count(), 1), + Length = bar.Value / (MaxValue ?? value.Max()), Direction = Direction, }); - Remove(Children.Where((bar, index) => index >= values.Count).ToList()); + Remove(Children.Where((bar, index) => index >= value.Count()).ToList()); } } } diff --git a/osu.Game/Screens/Select/BeatmapDetails.cs b/osu.Game/Screens/Select/BeatmapDetails.cs index 559f159e49..b5a666e556 100644 --- a/osu.Game/Screens/Select/BeatmapDetails.cs +++ b/osu.Game/Screens/Select/BeatmapDetails.cs @@ -49,7 +49,6 @@ namespace osu.Game.Screens.Select } set { - if (beatmap == value) return; beatmap = value; description.Text = beatmap.Version; @@ -62,11 +61,9 @@ namespace osu.Game.Screens.Select approachRate.Value = beatmap.Difficulty.ApproachRate; stars.Value = (float)beatmap.StarDifficulty; - if (beatmap.Metric?.Ratings == null) - ratingsContainer.Hide(); - else + if (beatmap.Metric?.Ratings.Count() > 0) { - List ratings = beatmap.Metric.Ratings; + List ratings = beatmap.Metric.Ratings.ToList(); ratingsContainer.Show(); negativeRatings.Text = ratings.GetRange(0, 5).Sum().ToString(); @@ -75,22 +72,24 @@ namespace osu.Game.Screens.Select ratingsGraph.Values = ratings.Select(rating => (float)rating); } - - if (beatmap.Metric?.Retries == null || beatmap.Metric?.Fails == null) - retryFailContainer.Hide(); else + ratingsContainer.Hide(); + + if (beatmap.Metric?.Retries.Count() > 0 && beatmap.Metric?.Retries.Count() > 0) { - List retries = beatmap.Metric.Retries; - List fails = beatmap.Metric.Fails; + IEnumerable retries = beatmap.Metric.Retries; + IEnumerable fails = beatmap.Metric.Fails; retryFailContainer.Show(); - float maxValue = fails.Select((fail, index) => fail + retries[index]).Max(); + 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.Select((retry, index) => retry + MathHelper.Clamp(fails[index], 0, maxValue)); + retryGraph.Values = retries.Zip(fails, (retry, fail) => retry + MathHelper.Clamp(fail, 0, maxValue)); } + else + retryFailContainer.Hide(); } }