From 6caecf79a012f988a9f08ab94fe6930631e6fd8f Mon Sep 17 00:00:00 2001 From: Henry Lin Date: Wed, 2 Mar 2022 20:06:28 +0800 Subject: [PATCH] Use smooth speed change --- osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs b/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs index 9a6705ea09..b6df56dd76 100644 --- a/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs +++ b/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs @@ -7,6 +7,7 @@ using System.Linq; using osu.Framework.Audio; using osu.Framework.Audio.Track; using osu.Framework.Bindables; +using osu.Framework.Graphics; using osu.Framework.Graphics.Audio; using osu.Framework.Utils; using osu.Game.Beatmaps; @@ -14,10 +15,11 @@ using osu.Game.Configuration; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.Play; namespace osu.Game.Rulesets.Mods { - public class ModAdaptiveSpeed : Mod, IApplicableToRate, IApplicableToDrawableHitObject, IApplicableToBeatmap + public class ModAdaptiveSpeed : Mod, IApplicableToRate, IApplicableToDrawableHitObject, IApplicableToBeatmap, IApplicableToHUD { // use a wider range so there's still room for adjustment when the initial rate is extreme private const double fastest_rate = 2.5f; @@ -65,6 +67,7 @@ namespace osu.Game.Rulesets.Mods }; private ITrack track; + private HUDOverlay overlay; private readonly List recentRates = Enumerable.Range(0, average_count).Select(_ => 1d).ToList(); @@ -82,6 +85,12 @@ namespace osu.Game.Rulesets.Mods AdjustPitch.BindValueChanged(applyPitchAdjustment); } + public void ApplyToHUD(HUDOverlay overlay) + { + // this is only used to transform the SpeedChange bindable + this.overlay = overlay; + } + public void ApplyToTrack(ITrack track) { this.track = track; @@ -127,7 +136,7 @@ namespace osu.Game.Rulesets.Mods recentRates.RemoveAt(0); } - SpeedChange.Value = recentRates.Average(); + overlay.TransformBindableTo(SpeedChange, recentRates.Average(), 100); }; drawable.OnRevertResult += (o, result) => { @@ -146,7 +155,7 @@ namespace osu.Game.Rulesets.Mods recentRates.RemoveAt(recentRates.Count - 1); } - SpeedChange.Value = recentRates.Average(); + overlay.TransformBindableTo(SpeedChange, recentRates.Average(), 100); }; }