Merge pull request #26549 from bdach/hit-error-meter-pooling-bad

Fix `ColourHitErrorMeter` not loading pooled drawables ahead of time
This commit is contained in:
Dean Herbert 2024-01-17 18:43:47 +09:00 committed by GitHub
commit 456a8e6e82
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 13 additions and 14 deletions

View File

@ -15,7 +15,6 @@
using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Scoring;
using osuTK; using osuTK;
using osuTK.Graphics;
namespace osu.Game.Screens.Play.HUD.HitErrorMeters namespace osu.Game.Screens.Play.HUD.HitErrorMeters
{ {
@ -42,16 +41,21 @@ public partial class ColourHitErrorMeter : HitErrorMeter
[SettingSource(typeof(ColourHitErrorMeterStrings), nameof(ColourHitErrorMeterStrings.JudgementShape), nameof(ColourHitErrorMeterStrings.JudgementShapeDescription))] [SettingSource(typeof(ColourHitErrorMeterStrings), nameof(ColourHitErrorMeterStrings.JudgementShape), nameof(ColourHitErrorMeterStrings.JudgementShapeDescription))]
public Bindable<ShapeStyle> JudgementShape { get; } = new Bindable<ShapeStyle>(); public Bindable<ShapeStyle> JudgementShape { get; } = new Bindable<ShapeStyle>();
private readonly DrawablePool<HitErrorShape> judgementShapePool;
private readonly JudgementFlow judgementsFlow; private readonly JudgementFlow judgementsFlow;
public ColourHitErrorMeter() public ColourHitErrorMeter()
{ {
AutoSizeAxes = Axes.Both; AutoSizeAxes = Axes.Both;
InternalChild = judgementsFlow = new JudgementFlow InternalChildren = new Drawable[]
{ {
JudgementShape = { BindTarget = JudgementShape }, judgementShapePool = new DrawablePool<HitErrorShape>(50),
JudgementSpacing = { BindTarget = JudgementSpacing }, judgementsFlow = new JudgementFlow
JudgementCount = { BindTarget = JudgementCount } {
JudgementShape = { BindTarget = JudgementShape },
JudgementSpacing = { BindTarget = JudgementSpacing },
JudgementCount = { BindTarget = JudgementCount }
}
}; };
} }
@ -60,7 +64,7 @@ protected override void OnNewJudgement(JudgementResult judgement)
if (!judgement.Type.IsScorable() || judgement.Type.IsBonus()) if (!judgement.Type.IsScorable() || judgement.Type.IsBonus())
return; return;
judgementsFlow.Push(GetColourForHitResult(judgement.Type)); judgementsFlow.Push(judgementShapePool.Get(shape => shape.Colour = GetColourForHitResult(judgement.Type)));
} }
public override void Clear() public override void Clear()
@ -105,15 +109,10 @@ protected override void LoadComplete()
private readonly DrawablePool<HitErrorShape> judgementLinePool = new DrawablePool<HitErrorShape>(50); private readonly DrawablePool<HitErrorShape> judgementLinePool = new DrawablePool<HitErrorShape>(50);
public void Push(Color4 colour) public void Push(HitErrorShape shape)
{ {
judgementLinePool.Get(shape => Add(shape);
{ removeExtraJudgements();
shape.Colour = colour;
Add(shape);
removeExtraJudgements();
});
} }
private void removeExtraJudgements() private void removeExtraJudgements()