From 725ff93f34e9b49cca90e1006089d512e9891f06 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Tue, 10 May 2022 18:02:32 +0300 Subject: [PATCH] Define local adjustments component for mods in `MusicController` Isolates `CurrentTrack` from being directly adjusted by the mod, which could lead to issues depending on how the mod adds adjustments (i.e. `ModTimeRamp`, which adds adjustments based on changes to a setting bindable). --- osu.Game/Overlays/MusicController.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index 5fc0da8891..0373856ace 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -377,6 +377,8 @@ namespace osu.Game.Overlays } } + private readonly AudioAdjustments modTrackAdjustments = new AudioAdjustments(); + /// /// Resets the adjustments currently applied on and applies the mod adjustments if is true. /// @@ -385,15 +387,27 @@ namespace osu.Game.Overlays /// public void ResetTrackAdjustments() { + // todo: we probably want a helper method rather than this. CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Balance); CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Frequency); CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Tempo); CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Volume); - if (allowTrackAdjustments) + modTrackAdjustments.RemoveAllAdjustments(AdjustableProperty.Balance); + modTrackAdjustments.RemoveAllAdjustments(AdjustableProperty.Frequency); + modTrackAdjustments.RemoveAllAdjustments(AdjustableProperty.Tempo); + modTrackAdjustments.RemoveAllAdjustments(AdjustableProperty.Volume); + + var applicableToTrack = mods.Value.OfType(); + + if (!allowTrackAdjustments || !applicableToTrack.Any()) + CurrentTrack.UnbindAdjustments(modTrackAdjustments); + else { - foreach (var mod in mods.Value.OfType()) - mod.ApplyToTrack(CurrentTrack); + CurrentTrack.BindAdjustments(modTrackAdjustments); + + foreach (var mod in applicableToTrack) + mod.ApplyToTrack(modTrackAdjustments); } } }