// Copyright (c) ppy Pty Ltd <[email protected]>. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using osu.Framework.Audio; using osu.Framework.Bindables; using osu.Framework.Graphics.Sprites; using osu.Framework.Localisation; using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Overlays.Settings; namespace osu.Game.Rulesets.Mods { public abstract class ModDoubleTime : ModRateAdjust { public override string Name => "Double Time"; public override string Acronym => "DT"; public override IconUsage? Icon => OsuIcon.ModDoubleTime; public override ModType Type => ModType.DifficultyIncrease; public override LocalisableString Description => "Zoooooooooom..."; public override bool Ranked => SpeedChange.IsDefault; [SettingSource("Speed increase", "The actual increase to apply", SettingControlType = typeof(MultiplierSettingsSlider))] public override BindableNumber<double> SpeedChange { get; } = new BindableDouble(1.5) { MinValue = 1.01, MaxValue = 2, Precision = 0.01, }; [SettingSource("Adjust pitch", "Should pitch be adjusted with speed")] public virtual BindableBool AdjustPitch { get; } = new BindableBool(); public override IEnumerable<(LocalisableString setting, LocalisableString value)> SettingDescription { get { foreach (var description in base.SettingDescription) yield return description; if (!AdjustPitch.IsDefault) yield return ("Adjust pitch", AdjustPitch.Value ? "On" : "Off"); } } private readonly RateAdjustModHelper rateAdjustHelper; protected ModDoubleTime() { rateAdjustHelper = new RateAdjustModHelper(SpeedChange); rateAdjustHelper.HandleAudioAdjustments(AdjustPitch); } public override void ApplyToTrack(IAdjustableAudioComponent track) { rateAdjustHelper.ApplyToTrack(track); } public override double ScoreMultiplier => rateAdjustHelper.ScoreMultiplier; } }