diff --git a/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs b/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs
index 4450f026b4..4962ac13b5 100644
--- a/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs
+++ b/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs
@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Linq;
using osu.Framework.Bindables;
using osu.Framework.Graphics.Performance;
using osu.Game.Rulesets.Judgements;
@@ -41,7 +40,22 @@ namespace osu.Game.Rulesets.Objects
///
/// Whether and all of its nested objects have been judged.
///
- public bool AllJudged => Judged && NestedEntries.All(h => h.AllJudged);
+ public bool AllJudged
+ {
+ get
+ {
+ if (!Judged)
+ return false;
+
+ foreach (var entry in NestedEntries)
+ {
+ if (!entry.AllJudged)
+ return false;
+ }
+
+ return true;
+ }
+ }
private readonly IBindable startTimeBindable = new BindableDouble();
diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs
index 32ebb82f15..2ec2a011a6 100644
--- a/osu.Game/Screens/Play/HUDOverlay.cs
+++ b/osu.Game/Screens/Play/HUDOverlay.cs
@@ -258,14 +258,10 @@ namespace osu.Game.Screens.Play
Vector2? highestBottomScreenSpace = null;
- foreach (var element in mainComponents.Components)
- processDrawable(element);
+ processDrawables(mainComponents);
if (rulesetComponents != null)
- {
- foreach (var element in rulesetComponents.Components)
- processDrawable(element);
- }
+ processDrawables(rulesetComponents);
if (lowestTopScreenSpaceRight.HasValue)
topRightElements.Y = MathHelper.Clamp(ToLocalSpace(new Vector2(0, lowestTopScreenSpaceRight.Value)).Y, 0, DrawHeight - topRightElements.DrawHeight);
@@ -282,6 +278,14 @@ namespace osu.Game.Screens.Play
else
bottomRightElements.Y = 0;
+ void processDrawables(SkinComponentsContainer components)
+ {
+ // Avoid using foreach due to missing GetEnumerator implementation.
+ // See https://github.com/ppy/osu-framework/blob/e10051e6643731e393b09de40a3a3d209a545031/osu.Framework/Bindables/IBindableList.cs#L41-L44.
+ for (int i = 0; i < components.Components.Count; i++)
+ processDrawable(components.Components[i]);
+ }
+
void processDrawable(ISerialisableDrawable element)
{
// Cast can be removed when IDrawable interface includes Anchor / RelativeSizeAxes.