mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 19:12:54 +08:00
Add extended limits to difficulty adjustment mod
This commit is contained in:
parent
0739f09930
commit
ac91f0e270
@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Catch.Mods
|
|||||||
public class CatchModDifficultyAdjust : ModDifficultyAdjust
|
public class CatchModDifficultyAdjust : ModDifficultyAdjust
|
||||||
{
|
{
|
||||||
[SettingSource("Circle Size", "Override a beatmap's set CS.", FIRST_SETTING_ORDER - 1)]
|
[SettingSource("Circle Size", "Override a beatmap's set CS.", FIRST_SETTING_ORDER - 1)]
|
||||||
public BindableNumber<float> CircleSize { get; } = new BindableFloat
|
public BindableNumber<float> CircleSize { get; } = new BindableFloatWithLimitExtension
|
||||||
{
|
{
|
||||||
Precision = 0.1f,
|
Precision = 0.1f,
|
||||||
MinValue = 1,
|
MinValue = 1,
|
||||||
@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Catch.Mods
|
|||||||
};
|
};
|
||||||
|
|
||||||
[SettingSource("Approach Rate", "Override a beatmap's set AR.", LAST_SETTING_ORDER + 1)]
|
[SettingSource("Approach Rate", "Override a beatmap's set AR.", LAST_SETTING_ORDER + 1)]
|
||||||
public BindableNumber<float> ApproachRate { get; } = new BindableFloat
|
public BindableNumber<float> ApproachRate { get; } = new BindableFloatWithLimitExtension
|
||||||
{
|
{
|
||||||
Precision = 0.1f,
|
Precision = 0.1f,
|
||||||
MinValue = 1,
|
MinValue = 1,
|
||||||
@ -31,6 +31,14 @@ namespace osu.Game.Rulesets.Catch.Mods
|
|||||||
Value = 5,
|
Value = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected override void ApplyLimits(bool extended)
|
||||||
|
{
|
||||||
|
base.ApplyLimits(extended);
|
||||||
|
|
||||||
|
CircleSize.MaxValue = extended ? 11 : 10;
|
||||||
|
ApproachRate.MaxValue = extended ? 11 : 10;
|
||||||
|
}
|
||||||
|
|
||||||
public override string SettingDescription
|
public override string SettingDescription
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
public class OsuModDifficultyAdjust : ModDifficultyAdjust
|
public class OsuModDifficultyAdjust : ModDifficultyAdjust
|
||||||
{
|
{
|
||||||
[SettingSource("Circle Size", "Override a beatmap's set CS.", FIRST_SETTING_ORDER - 1)]
|
[SettingSource("Circle Size", "Override a beatmap's set CS.", FIRST_SETTING_ORDER - 1)]
|
||||||
public BindableNumber<float> CircleSize { get; } = new BindableFloat
|
public BindableNumber<float> CircleSize { get; } = new BindableFloatWithLimitExtension
|
||||||
{
|
{
|
||||||
Precision = 0.1f,
|
Precision = 0.1f,
|
||||||
MinValue = 0,
|
MinValue = 0,
|
||||||
@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
};
|
};
|
||||||
|
|
||||||
[SettingSource("Approach Rate", "Override a beatmap's set AR.", LAST_SETTING_ORDER + 1)]
|
[SettingSource("Approach Rate", "Override a beatmap's set AR.", LAST_SETTING_ORDER + 1)]
|
||||||
public BindableNumber<float> ApproachRate { get; } = new BindableFloat
|
public BindableNumber<float> ApproachRate { get; } = new BindableFloatWithLimitExtension
|
||||||
{
|
{
|
||||||
Precision = 0.1f,
|
Precision = 0.1f,
|
||||||
MinValue = 0,
|
MinValue = 0,
|
||||||
@ -31,6 +31,14 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
Value = 5,
|
Value = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected override void ApplyLimits(bool extended)
|
||||||
|
{
|
||||||
|
base.ApplyLimits(extended);
|
||||||
|
|
||||||
|
CircleSize.MaxValue = extended ? 11 : 10;
|
||||||
|
ApproachRate.MaxValue = extended ? 11 : 10;
|
||||||
|
}
|
||||||
|
|
||||||
public override string SettingDescription
|
public override string SettingDescription
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -34,7 +34,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
protected const int LAST_SETTING_ORDER = 2;
|
protected const int LAST_SETTING_ORDER = 2;
|
||||||
|
|
||||||
[SettingSource("HP Drain", "Override a beatmap's set HP.", FIRST_SETTING_ORDER)]
|
[SettingSource("HP Drain", "Override a beatmap's set HP.", FIRST_SETTING_ORDER)]
|
||||||
public BindableNumber<float> DrainRate { get; } = new BindableFloat
|
public BindableNumber<float> DrainRate { get; } = new BindableFloatWithLimitExtension
|
||||||
{
|
{
|
||||||
Precision = 0.1f,
|
Precision = 0.1f,
|
||||||
MinValue = 0,
|
MinValue = 0,
|
||||||
@ -44,7 +44,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
};
|
};
|
||||||
|
|
||||||
[SettingSource("Accuracy", "Override a beatmap's set OD.", LAST_SETTING_ORDER)]
|
[SettingSource("Accuracy", "Override a beatmap's set OD.", LAST_SETTING_ORDER)]
|
||||||
public BindableNumber<float> OverallDifficulty { get; } = new BindableFloat
|
public BindableNumber<float> OverallDifficulty { get; } = new BindableFloatWithLimitExtension
|
||||||
{
|
{
|
||||||
Precision = 0.1f,
|
Precision = 0.1f,
|
||||||
MinValue = 0,
|
MinValue = 0,
|
||||||
@ -53,6 +53,24 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
Value = 5,
|
Value = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
[SettingSource("Extended Limits", "Adjust difficulty beyond sane limits.")]
|
||||||
|
public BindableBool ExtendedLimits { get; } = new BindableBool();
|
||||||
|
|
||||||
|
protected ModDifficultyAdjust()
|
||||||
|
{
|
||||||
|
ExtendedLimits.BindValueChanged(extend => ApplyLimits(extend.NewValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Changes the difficulty adjustment limits. Occurs when the value of <see cref="ExtendedLimits"/> is changed.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="extended">Whether limits should extend beyond sane ranges.</param>
|
||||||
|
protected virtual void ApplyLimits(bool extended)
|
||||||
|
{
|
||||||
|
DrainRate.MaxValue = extended ? 11 : 10;
|
||||||
|
OverallDifficulty.MaxValue = extended ? 11 : 10;
|
||||||
|
}
|
||||||
|
|
||||||
public override string SettingDescription
|
public override string SettingDescription
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -123,5 +141,62 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
difficulty.DrainRate = DrainRate.Value;
|
difficulty.DrainRate = DrainRate.Value;
|
||||||
difficulty.OverallDifficulty = OverallDifficulty.Value;
|
difficulty.OverallDifficulty = OverallDifficulty.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A <see cref="BindableDouble"/> that extends its min/max values to support any assigned value.
|
||||||
|
/// </summary>
|
||||||
|
protected class BindableDoubleWithLimitExtension : BindableDouble
|
||||||
|
{
|
||||||
|
public override double Value
|
||||||
|
{
|
||||||
|
get => base.Value;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < MinValue)
|
||||||
|
MinValue = value;
|
||||||
|
if (value > MaxValue)
|
||||||
|
MaxValue = value;
|
||||||
|
base.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A <see cref="BindableFloat"/> that extends its min/max values to support any assigned value.
|
||||||
|
/// </summary>
|
||||||
|
protected class BindableFloatWithLimitExtension : BindableFloat
|
||||||
|
{
|
||||||
|
public override float Value
|
||||||
|
{
|
||||||
|
get => base.Value;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < MinValue)
|
||||||
|
MinValue = value;
|
||||||
|
if (value > MaxValue)
|
||||||
|
MaxValue = value;
|
||||||
|
base.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A <see cref="BindableInt"/> that extends its min/max values to support any assigned value.
|
||||||
|
/// </summary>
|
||||||
|
protected class BindableIntWithLimitExtension : BindableInt
|
||||||
|
{
|
||||||
|
public override int Value
|
||||||
|
{
|
||||||
|
get => base.Value;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < MinValue)
|
||||||
|
MinValue = value;
|
||||||
|
if (value > MaxValue)
|
||||||
|
MaxValue = value;
|
||||||
|
base.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user