// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Linq; using osu.Framework.Bindables; using osu.Framework.Graphics.Sprites; using osu.Framework.Localisation; using osu.Game.Configuration; namespace osu.Game.Rulesets.Mods { public class ModWindDown : ModTimeRamp { public override string Name => "Wind Down"; public override string Acronym => "WD"; public override LocalisableString Description => "Sloooow doooown..."; public override IconUsage? Icon => FontAwesome.Solid.ChevronCircleDown; [SettingSource("Initial rate", "The starting speed of the track")] public override BindableNumber InitialRate { get; } = new BindableDouble { MinValue = 0.51, MaxValue = 2, Default = 1, Value = 1, Precision = 0.01, }; [SettingSource("Final rate", "The speed increase to ramp towards")] public override BindableNumber FinalRate { get; } = new BindableDouble { MinValue = 0.5, MaxValue = 1.99, Default = 0.75, Value = 0.75, Precision = 0.01, }; [SettingSource("Adjust pitch", "Should pitch be adjusted with speed")] public override BindableBool AdjustPitch { get; } = new BindableBool { Default = true, Value = true }; public override Type[] IncompatibleMods => base.IncompatibleMods.Append(typeof(ModWindUp)).ToArray(); public ModWindDown() { InitialRate.BindValueChanged(val => { if (val.NewValue <= FinalRate.Value) FinalRate.Value = val.NewValue - FinalRate.Precision; }); FinalRate.BindValueChanged(val => { if (val.NewValue >= InitialRate.Value) InitialRate.Value = val.NewValue + InitialRate.Precision; }); } } }