From 187acb0718bda64c693f19ea9da3bb041d556161 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 1 Jun 2022 17:57:53 +0900 Subject: [PATCH] Simplify linq tracking logic --- osu.Game/Screens/Edit/Timing/TimingScreen.cs | 30 ++------------------ 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/osu.Game/Screens/Edit/Timing/TimingScreen.cs b/osu.Game/Screens/Edit/Timing/TimingScreen.cs index 0cf4fca58a..ebb958f884 100644 --- a/osu.Game/Screens/Edit/Timing/TimingScreen.cs +++ b/osu.Game/Screens/Edit/Timing/TimingScreen.cs @@ -156,35 +156,11 @@ namespace osu.Game.Screens.Edit.Timing { // We don't have an efficient way of looking up groups currently, only individual point types. // To improve the efficiency of this in the future, we should reconsider the overall structure of ControlPointInfo. - IEnumerable groups = Beatmap.ControlPointInfo.Groups; - - bool currentTimeBeforeSelectedGroup = clock.CurrentTimeAccurate < selectedGroup.Value.Time; - - // Decide whether we are searching backwards or forwards. - if (currentTimeBeforeSelectedGroup) - groups = groups.Reverse(); // Find the next group which has the same type as the selected one. - groups = groups.SkipWhile(g => g != selectedGroup.Value) - .Skip(1) - .Where(g => g.ControlPoints.Any(cp => cp.GetType() == selectedPointType)); - - ControlPointGroup newGroup = groups.FirstOrDefault(); - - if (newGroup != null) - { - if (currentTimeBeforeSelectedGroup) - { - // When seeking backwards, the first match from the LINQ query is always what we want. - selectedGroup.Value = newGroup; - } - else - { - // When seeking forwards, we also need to check that the next match is before the current time. - if (newGroup.Time <= clock.CurrentTimeAccurate) - selectedGroup.Value = newGroup; - } - } + selectedGroup.Value = Beatmap.ControlPointInfo.Groups + .Where(g => g.ControlPoints.Any(cp => cp.GetType() == selectedPointType)) + .LastOrDefault(g => g.Time <= clock.CurrentTimeAccurate); } }