diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs index eaaf1c3c14..8acc43c091 100644 --- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs +++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs @@ -212,6 +212,13 @@ namespace osu.Game.Screens.Play.HUD glowBar.Alpha = (float)Interpolation.DampContinuously(glowBar.Alpha, GlowBarValue > 0 ? 1 : 0, 40, Time.Elapsed); } + protected override void FinishInitialAnimation(double value) + { + base.FinishInitialAnimation(value); + this.TransformTo(nameof(HealthBarValue), value, 500, Easing.OutQuint); + this.TransformTo(nameof(GlowBarValue), value, 250, Easing.OutQuint); + } + protected override void Flash() { base.Flash(); diff --git a/osu.Game/Screens/Play/HUD/HealthDisplay.cs b/osu.Game/Screens/Play/HUD/HealthDisplay.cs index 13dc05229e..7747036826 100644 --- a/osu.Game/Screens/Play/HUD/HealthDisplay.cs +++ b/osu.Game/Screens/Play/HUD/HealthDisplay.cs @@ -58,7 +58,9 @@ namespace osu.Game.Screens.Play.HUD health = HealthProcessor.Health.GetBoundCopy(); health.BindValueChanged(h => { - finishInitialAnimation(); + if (initialIncrease != null) + FinishInitialAnimation(h.OldValue); + Current.Value = h.NewValue; }); @@ -90,16 +92,16 @@ namespace osu.Game.Screens.Play.HUD Scheduler.AddOnce(Flash); if (newValue >= health.Value) - finishInitialAnimation(); + FinishInitialAnimation(health.Value); }, increase_delay, true); } - private void finishInitialAnimation() + protected virtual void FinishInitialAnimation(double value) { if (initialIncrease == null) return; - initialIncrease?.Cancel(); + initialIncrease.Cancel(); initialIncrease = null; // aside from the repeating `initialIncrease` scheduled task,