mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 23:52:57 +08:00
Don't present Meh hit windows if it has no value
This commit is contained in:
parent
f1c3a60660
commit
50c47568e4
@ -14,6 +14,8 @@ using osu.Game.Rulesets.Judgements;
|
||||
using osu.Game.Rulesets.Scoring;
|
||||
using osu.Framework.MathUtils;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Sprites;
|
||||
|
||||
namespace osu.Game.Tests.Visual.Gameplay
|
||||
{
|
||||
@ -95,7 +97,24 @@ namespace osu.Game.Tests.Visual.Gameplay
|
||||
|
||||
private void recreateDisplay(HitWindows hitWindows, float overallDifficulty)
|
||||
{
|
||||
hitWindows.SetDifficulty(overallDifficulty);
|
||||
|
||||
Clear();
|
||||
|
||||
Add(new FillFlowContainer
|
||||
{
|
||||
Anchor = Anchor.CentreLeft,
|
||||
Origin = Anchor.CentreLeft,
|
||||
Direction = FillDirection.Vertical,
|
||||
AutoSizeAxes = Axes.Both,
|
||||
Children = new[]
|
||||
{
|
||||
new SpriteText { Text = $@"Great: {hitWindows.Great}" },
|
||||
new SpriteText { Text = $@"Good: {hitWindows.Good}" },
|
||||
new SpriteText { Text = $@"Meh: {hitWindows.Meh}" },
|
||||
}
|
||||
});
|
||||
|
||||
Add(display = new DefaultHitErrorDisplay(overallDifficulty, hitWindows)
|
||||
{
|
||||
Anchor = Anchor.Centre,
|
||||
|
@ -32,12 +32,14 @@ namespace osu.Game.Screens.Play.HitErrorDisplay
|
||||
private readonly FillFlowContainer bar;
|
||||
private readonly Container judgementsContainer;
|
||||
private readonly Queue<double> judgementOffsets = new Queue<double>();
|
||||
private readonly double maxHitWindows;
|
||||
|
||||
public DefaultHitErrorDisplay(float overallDifficulty, HitWindows hitWindows, bool reversed = false)
|
||||
: base(overallDifficulty, hitWindows)
|
||||
{
|
||||
AutoSizeAxes = Axes.Both;
|
||||
maxHitWindows = HitWindows.Meh == 0 ? HitWindows.Good : HitWindows.Meh;
|
||||
|
||||
AutoSizeAxes = Axes.Both;
|
||||
AddInternal(new FillFlowContainer
|
||||
{
|
||||
AutoSizeAxes = Axes.X,
|
||||
@ -83,48 +85,52 @@ namespace osu.Game.Screens.Play.HitErrorDisplay
|
||||
[BackgroundDependencyLoader]
|
||||
private void load(OsuColour colours)
|
||||
{
|
||||
bar.AddRange(new Drawable[]
|
||||
{
|
||||
new Box
|
||||
Box topGreenBox;
|
||||
Box bottomGreenBox;
|
||||
|
||||
if (HitWindows.Meh != 0)
|
||||
bar.Add(new Box
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Colour = ColourInfo.GradientVertical(colours.Yellow.Opacity(0), colours.Yellow),
|
||||
Height = (float)((getMehHitWindows() - HitWindows.Good) / (getMehHitWindows() * 2))
|
||||
},
|
||||
new Box
|
||||
Height = (float)((maxHitWindows - HitWindows.Good) / (maxHitWindows * 2))
|
||||
});
|
||||
|
||||
bar.AddRange(new Drawable[]
|
||||
{
|
||||
topGreenBox = new Box
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Colour = colours.Green,
|
||||
Height = (float)((HitWindows.Good - HitWindows.Great) / (getMehHitWindows() * 2))
|
||||
Height = (float)((HitWindows.Good - HitWindows.Great) / (maxHitWindows * 2))
|
||||
},
|
||||
new Box
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Colour = colours.BlueLight,
|
||||
Height = (float)(HitWindows.Great / getMehHitWindows())
|
||||
Height = (float)(HitWindows.Great / maxHitWindows)
|
||||
},
|
||||
new Box
|
||||
bottomGreenBox = new Box
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Colour = colours.Green,
|
||||
Height = (float)((HitWindows.Good - HitWindows.Great) / (getMehHitWindows() * 2))
|
||||
},
|
||||
new Box
|
||||
Height = (float)((HitWindows.Good - HitWindows.Great) / (maxHitWindows * 2))
|
||||
}
|
||||
});;
|
||||
|
||||
if (HitWindows.Meh != 0)
|
||||
bar.Add(new Box
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Colour = ColourInfo.GradientVertical(colours.Yellow, colours.Yellow.Opacity(0)),
|
||||
Height = (float)((getMehHitWindows() - HitWindows.Good) / (getMehHitWindows() * 2))
|
||||
}
|
||||
});
|
||||
}
|
||||
Height = (float)((maxHitWindows - HitWindows.Good) / (maxHitWindows * 2))
|
||||
});
|
||||
|
||||
private double getMehHitWindows()
|
||||
{
|
||||
// In case if ruleset has no Meh hit windows (like Taiko)
|
||||
if (HitWindows.Meh == 0)
|
||||
return HitWindows.Good + 40;
|
||||
|
||||
return HitWindows.Meh;
|
||||
{
|
||||
topGreenBox.Colour = ColourInfo.GradientVertical(colours.Green.Opacity(0), colours.Green);
|
||||
bottomGreenBox.Colour = ColourInfo.GradientVertical(colours.Green, colours.Green.Opacity(0));
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNewJudgement(JudgementResult newJudgement)
|
||||
@ -157,7 +163,7 @@ namespace osu.Game.Screens.Play.HitErrorDisplay
|
||||
}
|
||||
};
|
||||
|
||||
private float getRelativeJudgementPosition(double value) => (float)(value / getMehHitWindows());
|
||||
private float getRelativeJudgementPosition(double value) => (float)(value / maxHitWindows);
|
||||
|
||||
private float calculateArrowPosition(JudgementResult newJudgement)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user