1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-21 17:27:24 +08:00

Merge pull request #26711 from EVAST9919/hud-linq-remove

Remove LINQ cast in `HUDOverlay`
This commit is contained in:
Dean Herbert 2024-01-26 16:13:21 +09:00 committed by GitHub
commit 86027268a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,7 +5,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
@ -259,13 +258,12 @@ namespace osu.Game.Screens.Play
Vector2? highestBottomScreenSpace = null; Vector2? highestBottomScreenSpace = null;
// LINQ cast can be removed when IDrawable interface includes Anchor / RelativeSizeAxes. foreach (var element in mainComponents.Components)
foreach (var element in mainComponents.Components.Cast<Drawable>())
processDrawable(element); processDrawable(element);
if (rulesetComponents != null) if (rulesetComponents != null)
{ {
foreach (var element in rulesetComponents.Components.Cast<Drawable>()) foreach (var element in rulesetComponents.Components)
processDrawable(element); processDrawable(element);
} }
@ -284,33 +282,36 @@ namespace osu.Game.Screens.Play
else else
bottomRightElements.Y = 0; bottomRightElements.Y = 0;
void processDrawable(Drawable element) void processDrawable(ISerialisableDrawable element)
{ {
// Cast can be removed when IDrawable interface includes Anchor / RelativeSizeAxes.
Drawable drawable = (Drawable)element;
// for now align some top components with the bottom-edge of the lowest top-anchored hud element. // for now align some top components with the bottom-edge of the lowest top-anchored hud element.
if (element.Anchor.HasFlagFast(Anchor.y0)) if (drawable.Anchor.HasFlagFast(Anchor.y0))
{ {
// health bars are excluded for the sake of hacky legacy skins which extend the health bar to take up the full screen area. // health bars are excluded for the sake of hacky legacy skins which extend the health bar to take up the full screen area.
if (element is LegacyHealthDisplay) if (element is LegacyHealthDisplay)
return; return;
float bottom = element.ScreenSpaceDrawQuad.BottomRight.Y; float bottom = drawable.ScreenSpaceDrawQuad.BottomRight.Y;
bool isRelativeX = element.RelativeSizeAxes == Axes.X; bool isRelativeX = drawable.RelativeSizeAxes == Axes.X;
if (element.Anchor.HasFlagFast(Anchor.TopRight) || isRelativeX) if (drawable.Anchor.HasFlagFast(Anchor.TopRight) || isRelativeX)
{ {
if (lowestTopScreenSpaceRight == null || bottom > lowestTopScreenSpaceRight.Value) if (lowestTopScreenSpaceRight == null || bottom > lowestTopScreenSpaceRight.Value)
lowestTopScreenSpaceRight = bottom; lowestTopScreenSpaceRight = bottom;
} }
if (element.Anchor.HasFlagFast(Anchor.TopLeft) || isRelativeX) if (drawable.Anchor.HasFlagFast(Anchor.TopLeft) || isRelativeX)
{ {
if (lowestTopScreenSpaceLeft == null || bottom > lowestTopScreenSpaceLeft.Value) if (lowestTopScreenSpaceLeft == null || bottom > lowestTopScreenSpaceLeft.Value)
lowestTopScreenSpaceLeft = bottom; lowestTopScreenSpaceLeft = bottom;
} }
} }
// and align bottom-right components with the top-edge of the highest bottom-anchored hud element. // and align bottom-right components with the top-edge of the highest bottom-anchored hud element.
else if (element.Anchor.HasFlagFast(Anchor.BottomRight) || (element.Anchor.HasFlagFast(Anchor.y2) && element.RelativeSizeAxes == Axes.X)) else if (drawable.Anchor.HasFlagFast(Anchor.BottomRight) || (drawable.Anchor.HasFlagFast(Anchor.y2) && drawable.RelativeSizeAxes == Axes.X))
{ {
var topLeft = element.ScreenSpaceDrawQuad.TopLeft; var topLeft = element.ScreenSpaceDrawQuad.TopLeft;
if (highestBottomScreenSpace == null || topLeft.Y < highestBottomScreenSpace.Value.Y) if (highestBottomScreenSpace == null || topLeft.Y < highestBottomScreenSpace.Value.Y)