From be314c4d8e6ca2d3927394697cc7ec4226faa989 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Tue, 16 Apr 2024 15:06:01 -0700 Subject: [PATCH] feat(ModAudioPreview): add enabled option --- .../Mods/AudioPreview/AudioPreviewOptions.cs | 30 +++++++++++++++++++ .../Mods/AudioPreview/ModAudioEffects.cs | 3 +- .../AudioPreview/ModSelectAudioPreview.cs | 8 ++++- .../AudioPreview/TrackUpdatePreviewMusic.cs | 8 ++++- Osu.Patcher.Hook/Settings.cs | 2 ++ 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 Osu.Patcher.Hook/Patches/Mods/AudioPreview/AudioPreviewOptions.cs diff --git a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/AudioPreviewOptions.cs b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/AudioPreviewOptions.cs new file mode 100644 index 0000000..979d674 --- /dev/null +++ b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/AudioPreviewOptions.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using Osu.Stubs.GameModes.Options; +using Osu.Stubs.Wrappers; + +namespace Osu.Patcher.Hook.Patches.Mods.AudioPreview; + +[UsedImplicitly] +internal class AudioPreviewOptions : PatchOptions +{ + /// + /// Global toggle for disabling and enabling the patch. + /// + public static readonly BindableWrapper Enabled = + new(BindableType.Bool, false, Settings.Default.EnableModAudioPreview); + + public override IEnumerable CreateOptions() => + [ + OptionCheckbox.Constructor.Invoke([ + /* title: */ "Apply DT/NC/HT audio effects live", + /* tooltip: */ "Applies the speed & pitch modifiers during song selection, like osu!lazer.", + /* binding: */ Enabled.Bindable, + /* onChange: */ new EventHandler((_, _) => ModAudioEffects.ApplyModEffects(!Enabled.Value)), + ]), + ]; + + public override void Load(Settings config) => Enabled.Value = config.EnableModAudioPreview; + public override void Save(Settings config) => config.EnableModAudioPreview = Enabled.Value; +} \ No newline at end of file diff --git a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModAudioEffects.cs b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModAudioEffects.cs index 98c5bd2..6078466 100644 --- a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModAudioEffects.cs +++ b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModAudioEffects.cs @@ -13,9 +13,10 @@ internal static class ModAudioEffects /// /// Applies the audio changes to the AudioEngine based on the current global mods. /// - internal static void ApplyModEffects() + internal static void ApplyModEffects(bool clear = false) { ResetChanges(); + if (clear) return; var mods = ModManager.ModStatus.Get(); diff --git a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModSelectAudioPreview.cs b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModSelectAudioPreview.cs index 0057419..960ab7e 100644 --- a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModSelectAudioPreview.cs +++ b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/ModSelectAudioPreview.cs @@ -20,5 +20,11 @@ internal class ModSelectAudioPreview [UsedImplicitly] [HarmonyPostfix] - private static void After() => Task.Run(ModAudioEffects.ApplyModEffects); + private static void After() + { + if (!AudioPreviewOptions.Enabled.Value) + return; + + Task.Run(() => ModAudioEffects.ApplyModEffects()); + } } \ No newline at end of file diff --git a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/TrackUpdatePreviewMusic.cs b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/TrackUpdatePreviewMusic.cs index 39cabf0..a6483d0 100644 --- a/Osu.Patcher.Hook/Patches/Mods/AudioPreview/TrackUpdatePreviewMusic.cs +++ b/Osu.Patcher.Hook/Patches/Mods/AudioPreview/TrackUpdatePreviewMusic.cs @@ -20,5 +20,11 @@ public class TrackUpdatePreviewMusic [HarmonyPostfix] [UsedImplicitly] - private static void After() => Task.Run(ModAudioEffects.ApplyModEffects); + private static void After() + { + if (!AudioPreviewOptions.Enabled.Value) + return; + + Task.Run(() => ModAudioEffects.ApplyModEffects()); + } } \ No newline at end of file diff --git a/Osu.Patcher.Hook/Settings.cs b/Osu.Patcher.Hook/Settings.cs index c52d37f..2e05370 100644 --- a/Osu.Patcher.Hook/Settings.cs +++ b/Osu.Patcher.Hook/Settings.cs @@ -70,5 +70,7 @@ public static void WriteToDisk(Settings settings, string osuDir) #region Options + public bool EnableModAudioPreview { get; set; } = true; + #endregion } \ No newline at end of file