mirror of
https://github.com/ppy/osu.git
synced 2025-01-15 14:12:54 +08:00
Remove HitErrorDisplay
container and hook up data
This commit is contained in:
parent
42d2711dc6
commit
7137315fa7
@ -1,127 +0,0 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
|
||||||
using osu.Framework.Bindables;
|
|
||||||
using osu.Framework.Extensions.IEnumerableExtensions;
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osu.Game.Configuration;
|
|
||||||
using osu.Game.Rulesets.Scoring;
|
|
||||||
using osu.Game.Screens.Play.HUD.HitErrorMeters;
|
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play.HUD
|
|
||||||
{
|
|
||||||
public class HitErrorDisplay : Container<HitErrorMeter>
|
|
||||||
{
|
|
||||||
private const int fade_duration = 200;
|
|
||||||
private const int margin = 10;
|
|
||||||
|
|
||||||
private readonly Bindable<ScoreMeterType> type = new Bindable<ScoreMeterType>();
|
|
||||||
|
|
||||||
private readonly HitWindows hitWindows;
|
|
||||||
|
|
||||||
public HitErrorDisplay(HitWindows hitWindows)
|
|
||||||
{
|
|
||||||
this.hitWindows = hitWindows;
|
|
||||||
|
|
||||||
RelativeSizeAxes = Axes.Both;
|
|
||||||
}
|
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(OsuConfigManager config)
|
|
||||||
{
|
|
||||||
config.BindWith(OsuSetting.ScoreMeter, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void LoadComplete()
|
|
||||||
{
|
|
||||||
base.LoadComplete();
|
|
||||||
type.BindValueChanged(typeChanged, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void typeChanged(ValueChangedEvent<ScoreMeterType> type)
|
|
||||||
{
|
|
||||||
Children.ForEach(c => c.FadeOut(fade_duration, Easing.OutQuint));
|
|
||||||
|
|
||||||
if (hitWindows == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (type.NewValue)
|
|
||||||
{
|
|
||||||
case ScoreMeterType.HitErrorBoth:
|
|
||||||
createBar(Anchor.CentreLeft);
|
|
||||||
createBar(Anchor.CentreRight);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.HitErrorLeft:
|
|
||||||
createBar(Anchor.CentreLeft);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.HitErrorRight:
|
|
||||||
createBar(Anchor.CentreRight);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.HitErrorBottom:
|
|
||||||
createBar(Anchor.BottomCentre);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.ColourBoth:
|
|
||||||
createColour(Anchor.CentreLeft);
|
|
||||||
createColour(Anchor.CentreRight);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.ColourLeft:
|
|
||||||
createColour(Anchor.CentreLeft);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.ColourRight:
|
|
||||||
createColour(Anchor.CentreRight);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ScoreMeterType.ColourBottom:
|
|
||||||
createColour(Anchor.BottomCentre);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createBar(Anchor anchor)
|
|
||||||
{
|
|
||||||
bool rightAligned = (anchor & Anchor.x2) > 0;
|
|
||||||
bool bottomAligned = (anchor & Anchor.y2) > 0;
|
|
||||||
|
|
||||||
var display = new BarHitErrorMeter(hitWindows, rightAligned)
|
|
||||||
{
|
|
||||||
Margin = new MarginPadding(margin),
|
|
||||||
Anchor = anchor,
|
|
||||||
Origin = bottomAligned ? Anchor.CentreLeft : anchor,
|
|
||||||
Alpha = 0,
|
|
||||||
Rotation = bottomAligned ? 270 : 0
|
|
||||||
};
|
|
||||||
|
|
||||||
completeDisplayLoading(display);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createColour(Anchor anchor)
|
|
||||||
{
|
|
||||||
bool bottomAligned = (anchor & Anchor.y2) > 0;
|
|
||||||
|
|
||||||
var display = new ColourHitErrorMeter(hitWindows)
|
|
||||||
{
|
|
||||||
Margin = new MarginPadding(margin),
|
|
||||||
Anchor = anchor,
|
|
||||||
Origin = bottomAligned ? Anchor.CentreLeft : anchor,
|
|
||||||
Alpha = 0,
|
|
||||||
Rotation = bottomAligned ? 270 : 0
|
|
||||||
};
|
|
||||||
|
|
||||||
completeDisplayLoading(display);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void completeDisplayLoading(HitErrorMeter display)
|
|
||||||
{
|
|
||||||
Add(display);
|
|
||||||
display.FadeInFromZero(fade_duration, Easing.OutQuint);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -43,10 +43,10 @@ namespace osu.Game.Screens.Play.HUD.HitErrorMeters
|
|||||||
|
|
||||||
private double maxHitWindow;
|
private double maxHitWindow;
|
||||||
|
|
||||||
public BarHitErrorMeter(HitWindows hitWindows, bool rightAligned = false)
|
public BarHitErrorMeter()
|
||||||
: base(hitWindows)
|
|
||||||
{
|
{
|
||||||
alignment = rightAligned ? Anchor.x0 : Anchor.x2;
|
// todo: investigate.
|
||||||
|
alignment = false ? Anchor.x0 : Anchor.x2;
|
||||||
|
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
}
|
}
|
||||||
@ -152,14 +152,17 @@ namespace osu.Game.Screens.Play.HUD.HitErrorMeters
|
|||||||
{
|
{
|
||||||
var windows = HitWindows.GetAllAvailableWindows().ToArray();
|
var windows = HitWindows.GetAllAvailableWindows().ToArray();
|
||||||
|
|
||||||
maxHitWindow = windows.First().length;
|
// max to avoid div-by-zero.
|
||||||
|
maxHitWindow = Math.Max(1, windows.First().length);
|
||||||
|
|
||||||
for (var i = 0; i < windows.Length; i++)
|
for (var i = 0; i < windows.Length; i++)
|
||||||
{
|
{
|
||||||
var (result, length) = windows[i];
|
var (result, length) = windows[i];
|
||||||
|
|
||||||
colourBarsEarly.Add(createColourBar(result, (float)(length / maxHitWindow), i == 0));
|
var hitWindow = (float)(length / maxHitWindow);
|
||||||
colourBarsLate.Add(createColourBar(result, (float)(length / maxHitWindow), i == 0));
|
|
||||||
|
colourBarsEarly.Add(createColourBar(result, hitWindow, i == 0));
|
||||||
|
colourBarsLate.Add(createColourBar(result, hitWindow, i == 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
// a little nub to mark the centre point.
|
// a little nub to mark the centre point.
|
||||||
|
@ -7,7 +7,6 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Game.Rulesets.Judgements;
|
using osu.Game.Rulesets.Judgements;
|
||||||
using osu.Game.Rulesets.Scoring;
|
|
||||||
using osuTK;
|
using osuTK;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
|
|
||||||
@ -19,8 +18,7 @@ namespace osu.Game.Screens.Play.HUD.HitErrorMeters
|
|||||||
|
|
||||||
private readonly JudgementFlow judgementsFlow;
|
private readonly JudgementFlow judgementsFlow;
|
||||||
|
|
||||||
public ColourHitErrorMeter(HitWindows hitWindows)
|
public ColourHitErrorMeter()
|
||||||
: base(hitWindows)
|
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
InternalChild = judgementsFlow = new JudgementFlow();
|
InternalChild = judgementsFlow = new JudgementFlow();
|
||||||
|
@ -6,13 +6,15 @@ using osu.Framework.Graphics.Containers;
|
|||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Rulesets.Judgements;
|
using osu.Game.Rulesets.Judgements;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
using osu.Game.Rulesets.UI;
|
||||||
|
using osu.Game.Skinning;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play.HUD.HitErrorMeters
|
namespace osu.Game.Screens.Play.HUD.HitErrorMeters
|
||||||
{
|
{
|
||||||
public abstract class HitErrorMeter : CompositeDrawable
|
public abstract class HitErrorMeter : CompositeDrawable, ISkinnableDrawable
|
||||||
{
|
{
|
||||||
protected readonly HitWindows HitWindows;
|
protected HitWindows HitWindows { get; private set; }
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private ScoreProcessor processor { get; set; }
|
private ScoreProcessor processor { get; set; }
|
||||||
@ -20,9 +22,10 @@ namespace osu.Game.Screens.Play.HUD.HitErrorMeters
|
|||||||
[Resolved]
|
[Resolved]
|
||||||
private OsuColour colours { get; set; }
|
private OsuColour colours { get; set; }
|
||||||
|
|
||||||
protected HitErrorMeter(HitWindows hitWindows)
|
[BackgroundDependencyLoader(true)]
|
||||||
|
private void load(DrawableRuleset drawableRuleset)
|
||||||
{
|
{
|
||||||
HitWindows = hitWindows;
|
HitWindows = drawableRuleset?.FirstAvailableHitWindows ?? HitWindows.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
|
@ -87,22 +87,10 @@ namespace osu.Game.Screens.Play
|
|||||||
visibilityContainer = new Container
|
visibilityContainer = new Container
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Children = new Drawable[]
|
Child = mainComponents = new SkinnableTargetContainer(SkinnableTarget.MainHUDComponents)
|
||||||
{
|
{
|
||||||
mainComponents = new SkinnableTargetContainer(SkinnableTarget.MainHUDComponents)
|
RelativeSizeAxes = Axes.Both,
|
||||||
{
|
},
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
},
|
|
||||||
new Container
|
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
Children = new Drawable[]
|
|
||||||
{
|
|
||||||
// still need to be migrated; a bit more involved.
|
|
||||||
new HitErrorDisplay(this.drawableRuleset?.FirstAvailableHitWindows),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
topRightElements = new FillFlowContainer
|
topRightElements = new FillFlowContainer
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user