1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-10 06:52:54 +08:00

Add support for bottom-anchored hit error display

This commit is contained in:
Dean Herbert 2020-10-15 19:11:40 +09:00
parent bfffad8fdb
commit 70806deba1
4 changed files with 62 additions and 18 deletions

View File

@ -22,8 +22,10 @@ namespace osu.Game.Tests.Visual.Gameplay
{ {
private BarHitErrorMeter barMeter; private BarHitErrorMeter barMeter;
private BarHitErrorMeter barMeter2; private BarHitErrorMeter barMeter2;
private BarHitErrorMeter barMeter3;
private ColourHitErrorMeter colourMeter; private ColourHitErrorMeter colourMeter;
private ColourHitErrorMeter colourMeter2; private ColourHitErrorMeter colourMeter2;
private ColourHitErrorMeter colourMeter3;
private HitWindows hitWindows; private HitWindows hitWindows;
public TestSceneHitErrorMeter() public TestSceneHitErrorMeter()
@ -115,6 +117,13 @@ namespace osu.Game.Tests.Visual.Gameplay
Origin = Anchor.CentreLeft, Origin = Anchor.CentreLeft,
}); });
Add(barMeter3 = new BarHitErrorMeter(hitWindows, true)
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.CentreLeft,
Rotation = 270,
});
Add(colourMeter = new ColourHitErrorMeter(hitWindows) Add(colourMeter = new ColourHitErrorMeter(hitWindows)
{ {
Anchor = Anchor.CentreRight, Anchor = Anchor.CentreRight,
@ -128,6 +137,14 @@ namespace osu.Game.Tests.Visual.Gameplay
Origin = Anchor.CentreLeft, Origin = Anchor.CentreLeft,
Margin = new MarginPadding { Left = 50 } Margin = new MarginPadding { Left = 50 }
}); });
Add(colourMeter3 = new ColourHitErrorMeter(hitWindows)
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.CentreLeft,
Rotation = 270,
Margin = new MarginPadding { Left = 50 }
});
} }
private void newJudgement(double offset = 0) private void newJudgement(double offset = 0)
@ -140,8 +157,10 @@ namespace osu.Game.Tests.Visual.Gameplay
barMeter.OnNewJudgement(judgement); barMeter.OnNewJudgement(judgement);
barMeter2.OnNewJudgement(judgement); barMeter2.OnNewJudgement(judgement);
barMeter3.OnNewJudgement(judgement);
colourMeter.OnNewJudgement(judgement); colourMeter.OnNewJudgement(judgement);
colourMeter2.OnNewJudgement(judgement); colourMeter2.OnNewJudgement(judgement);
colourMeter3.OnNewJudgement(judgement);
} }
} }
} }

View File

@ -16,7 +16,10 @@ namespace osu.Game.Configuration
[Description("Hit Error (right)")] [Description("Hit Error (right)")]
HitErrorRight, HitErrorRight,
[Description("Hit Error (both)")] [Description("Hit Error (bottom)")]
HitErrorBottom,
[Description("Hit Error (left+right)")]
HitErrorBoth, HitErrorBoth,
[Description("Colour (left)")] [Description("Colour (left)")]
@ -25,7 +28,10 @@ namespace osu.Game.Configuration
[Description("Colour (right)")] [Description("Colour (right)")]
ColourRight, ColourRight,
[Description("Colour (both)")] [Description("Colour (left+right)")]
ColourBoth, ColourBoth,
[Description("Colour (bottom)")]
ColourBottom,
} }
} }

View File

@ -66,54 +66,69 @@ namespace osu.Game.Screens.Play.HUD
switch (type.NewValue) switch (type.NewValue)
{ {
case ScoreMeterType.HitErrorBoth: case ScoreMeterType.HitErrorBoth:
createBar(false); createBar(Anchor.CentreLeft);
createBar(true); createBar(Anchor.CentreRight);
break; break;
case ScoreMeterType.HitErrorLeft: case ScoreMeterType.HitErrorLeft:
createBar(false); createBar(Anchor.CentreLeft);
break; break;
case ScoreMeterType.HitErrorRight: case ScoreMeterType.HitErrorRight:
createBar(true); createBar(Anchor.CentreRight);
break;
case ScoreMeterType.HitErrorBottom:
createBar(Anchor.BottomCentre);
break; break;
case ScoreMeterType.ColourBoth: case ScoreMeterType.ColourBoth:
createColour(false); createColour(Anchor.CentreLeft);
createColour(true); createColour(Anchor.CentreRight);
break; break;
case ScoreMeterType.ColourLeft: case ScoreMeterType.ColourLeft:
createColour(false); createColour(Anchor.CentreLeft);
break; break;
case ScoreMeterType.ColourRight: case ScoreMeterType.ColourRight:
createColour(true); createColour(Anchor.CentreRight);
break;
case ScoreMeterType.ColourBottom:
createColour(Anchor.BottomCentre);
break; break;
} }
} }
private void createBar(bool rightAligned) private void createBar(Anchor anchor)
{ {
bool rightAligned = (anchor & Anchor.x2) > 0;
bool bottomAligned = (anchor & Anchor.y2) > 0;
var display = new BarHitErrorMeter(hitWindows, rightAligned) var display = new BarHitErrorMeter(hitWindows, rightAligned)
{ {
Margin = new MarginPadding(margin), Margin = new MarginPadding(margin),
Anchor = rightAligned ? Anchor.CentreRight : Anchor.CentreLeft, Anchor = anchor,
Origin = rightAligned ? Anchor.CentreRight : Anchor.CentreLeft, Origin = bottomAligned ? Anchor.CentreLeft : anchor,
Alpha = 0, Alpha = 0,
Rotation = bottomAligned ? 270 : 0
}; };
completeDisplayLoading(display); completeDisplayLoading(display);
} }
private void createColour(bool rightAligned) private void createColour(Anchor anchor)
{ {
bool bottomAligned = (anchor & Anchor.y2) > 0;
var display = new ColourHitErrorMeter(hitWindows) var display = new ColourHitErrorMeter(hitWindows)
{ {
Margin = new MarginPadding(margin), Margin = new MarginPadding(margin),
Anchor = rightAligned ? Anchor.CentreRight : Anchor.CentreLeft, Anchor = anchor,
Origin = rightAligned ? Anchor.CentreRight : Anchor.CentreLeft, Origin = bottomAligned ? Anchor.CentreLeft : anchor,
Alpha = 0, Alpha = 0,
Rotation = bottomAligned ? 270 : 0
}; };
completeDisplayLoading(display); completeDisplayLoading(display);

View File

@ -99,7 +99,9 @@ namespace osu.Game.Screens.Play.HUD.HitErrorMeters
Size = new Vector2(10), Size = new Vector2(10),
Icon = FontAwesome.Solid.ShippingFast, Icon = FontAwesome.Solid.ShippingFast,
Anchor = Anchor.TopCentre, Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre, Origin = Anchor.Centre,
// undo any layout rotation to display the icon the correct orientation
Rotation = -Rotation,
}, },
new SpriteIcon new SpriteIcon
{ {
@ -107,7 +109,9 @@ namespace osu.Game.Screens.Play.HUD.HitErrorMeters
Size = new Vector2(10), Size = new Vector2(10),
Icon = FontAwesome.Solid.Bicycle, Icon = FontAwesome.Solid.Bicycle,
Anchor = Anchor.BottomCentre, Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre, Origin = Anchor.Centre,
// undo any layout rotation to display the icon the correct orientation
Rotation = -Rotation,
} }
} }
}, },