Improve safety of bindings in HealthDisplay

This commit is contained in:
Dean Herbert
2021-05-12 12:53:30 +09:00
parent 8e226319e2
commit 184dbaf202

View File

@ -17,7 +17,7 @@ namespace osu.Game.Screens.Play.HUD
/// </summary> /// </summary>
public abstract class HealthDisplay : Container public abstract class HealthDisplay : Container
{ {
private Bindable<bool> showHealthbar; private readonly Bindable<bool> showHealthbar = new Bindable<bool>(true);
[Resolved] [Resolved]
protected HealthProcessor HealthProcessor { get; private set; } protected HealthProcessor HealthProcessor { get; private set; }
@ -32,19 +32,22 @@ namespace osu.Game.Screens.Play.HUD
{ {
} }
[BackgroundDependencyLoader(true)] [Resolved(canBeNull: true)]
private void load(HUDOverlay hud) private HUDOverlay hudOverlay { get; set; }
{
Current.BindTo(HealthProcessor.Health);
protected override void LoadComplete()
{
base.LoadComplete();
Current.BindTo(HealthProcessor.Health);
HealthProcessor.NewJudgement += onNewJudgement; HealthProcessor.NewJudgement += onNewJudgement;
if (hud != null) if (hudOverlay != null)
{ showHealthbar.BindTo(hudOverlay.ShowHealthbar);
showHealthbar = hud.ShowHealthbar.GetBoundCopy();
// this probably shouldn't be operating on `this.`
showHealthbar.BindValueChanged(healthBar => this.FadeTo(healthBar.NewValue ? 1 : 0, HUDOverlay.FADE_DURATION, HUDOverlay.FADE_EASING), true); showHealthbar.BindValueChanged(healthBar => this.FadeTo(healthBar.NewValue ? 1 : 0, HUDOverlay.FADE_DURATION, HUDOverlay.FADE_EASING), true);
} }
}
private void onNewJudgement(JudgementResult judgement) private void onNewJudgement(JudgementResult judgement)
{ {