diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModDifficultyAdjust.cs b/osu.Game.Rulesets.Catch/Mods/CatchModDifficultyAdjust.cs
index 6d0025b236..a60b35739e 100644
--- a/osu.Game.Rulesets.Catch/Mods/CatchModDifficultyAdjust.cs
+++ b/osu.Game.Rulesets.Catch/Mods/CatchModDifficultyAdjust.cs
@@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using System;
+using System.Linq;
using osu.Framework.Bindables;
using osu.Game.Beatmaps;
using osu.Game.Configuration;
@@ -35,15 +36,15 @@ namespace osu.Game.Rulesets.Catch.Mods
{
get
{
- string circleSize = CircleSize.IsDefault ? "" : $"CS {CircleSize.Value}";
- string drainRate = DrainRate.IsDefault ? "" : $"HP {DrainRate.Value}";
- string overallDifficulty = OverallDifficulty.IsDefault ? "" : $"OD {OverallDifficulty.Value}";
- string approachRate = ApproachRate.IsDefault ? "" : $"AR {ApproachRate.Value}";
+ string circleSize = CircleSize.IsDefault ? string.Empty : $"CS {CircleSize.Value}";
+ string approachRate = ApproachRate.IsDefault ? string.Empty : $"AR {ApproachRate.Value}";
- string[] settings = { circleSize, drainRate, overallDifficulty, approachRate };
- // filter out empty strings so we don't have orphaned commas
- settings = Array.FindAll(settings, s => !string.IsNullOrEmpty(s));
- return string.Join(", ", settings);
+ return string.Join(", ", new[]
+ {
+ circleSize,
+ base.SettingDescription,
+ approachRate
+ }.Where(s => !string.IsNullOrEmpty(s)));
}
}
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs
index 307fe3da4a..18492828f0 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs
@@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using System;
+using System.Linq;
using osu.Framework.Bindables;
using osu.Game.Beatmaps;
using osu.Game.Configuration;
@@ -35,15 +36,15 @@ namespace osu.Game.Rulesets.Osu.Mods
{
get
{
- string circleSize = CircleSize.IsDefault ? "" : $"CS {CircleSize.Value}";
- string drainRate = DrainRate.IsDefault ? "" : $"HP {DrainRate.Value}";
- string overallDifficulty = OverallDifficulty.IsDefault ? "" : $"OD {OverallDifficulty.Value}";
- string approachRate = ApproachRate.IsDefault ? "" : $"AR {ApproachRate.Value}";
+ string circleSize = CircleSize.IsDefault ? string.Empty : $"CS {CircleSize.Value}";
+ string approachRate = ApproachRate.IsDefault ? string.Empty : $"AR {ApproachRate.Value}";
- string[] settings = { circleSize, drainRate, overallDifficulty, approachRate };
- // filter out empty strings so we don't have orphaned commas
- settings = Array.FindAll(settings, s => !string.IsNullOrEmpty(s));
- return string.Join(", ", settings);
+ return string.Join(", ", new[]
+ {
+ circleSize,
+ base.SettingDescription,
+ approachRate
+ }.Where(s => !string.IsNullOrEmpty(s)));
}
}
diff --git a/osu.Game/Rulesets/Mods/Mod.cs b/osu.Game/Rulesets/Mods/Mod.cs
index 231b95f974..95e8ff86eb 100644
--- a/osu.Game/Rulesets/Mods/Mod.cs
+++ b/osu.Game/Rulesets/Mods/Mod.cs
@@ -2,8 +2,13 @@
// See the LICENCE file in the repository root for full licence text.
using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
using Newtonsoft.Json;
+using osu.Framework.Bindables;
using osu.Framework.Graphics.Sprites;
+using osu.Game.Configuration;
using osu.Game.IO.Serialization;
using osu.Game.Rulesets.UI;
@@ -67,7 +72,26 @@ namespace osu.Game.Rulesets.Mods
/// Parentheses are added to the tooltip, surrounding the value of this property. If this property is string.Empty,
/// the tooltip will not have parentheses.
///
- public virtual string SettingDescription => string.Empty;
+ public virtual string SettingDescription
+ {
+ get
+ {
+ var tooltipTexts = new List();
+
+ foreach ((SettingSourceAttribute attr, PropertyInfo property) in this.GetOrderedSettingsSourceProperties())
+ {
+ object bindableObj = property.GetValue(this);
+ bool? settingIsDefault = (bindableObj as IHasDefaultValue)?.IsDefault;
+ string tooltipText = settingIsDefault == true ? string.Empty : attr.Label + " " + bindableObj.ToString();
+ tooltipTexts.Add(tooltipText);
+ }
+
+ // filter out empty strings so we don't have orphaned commas
+ //tooltipTexts = tooltipTexts.Where(s => !string.IsNullOrEmpty(s)).ToList();
+ string joinedTooltipText = string.Join(", ", tooltipTexts);
+ return $"{Name}{joinedTooltipText}";
+ }
+ }
///
/// The score multiplier of this mod.
diff --git a/osu.Game/Rulesets/Mods/ModDifficultyAdjust.cs b/osu.Game/Rulesets/Mods/ModDifficultyAdjust.cs
index f8341e6cdb..1baf9f7057 100644
--- a/osu.Game/Rulesets/Mods/ModDifficultyAdjust.cs
+++ b/osu.Game/Rulesets/Mods/ModDifficultyAdjust.cs
@@ -7,6 +7,7 @@ using osu.Framework.Graphics.Sprites;
using System;
using System.Collections.Generic;
using osu.Game.Configuration;
+using System.Linq;
namespace osu.Game.Rulesets.Mods
{
@@ -56,13 +57,14 @@ namespace osu.Game.Rulesets.Mods
{
get
{
- string drainRate = DrainRate.IsDefault ? "" : $"HP {DrainRate.Value}";
- string overallDifficulty = OverallDifficulty.IsDefault ? "" : $"OD {OverallDifficulty.Value}";
+ string drainRate = DrainRate.IsDefault ? string.Empty : $"HP {DrainRate.Value}";
+ string overallDifficulty = OverallDifficulty.IsDefault ? string.Empty : $"OD {OverallDifficulty.Value}";
- string[] settings = { drainRate, overallDifficulty };
- // filter out empty strings so we don't have orphaned commas
- settings = Array.FindAll(settings, s => !string.IsNullOrEmpty(s));
- return string.Join(", ", settings);
+ return string.Join(", ", new[]
+ {
+ drainRate,
+ overallDifficulty
+ }.Where(s => !string.IsNullOrEmpty(s)));
}
}
diff --git a/osu.Game/Rulesets/Mods/ModDoubleTime.cs b/osu.Game/Rulesets/Mods/ModDoubleTime.cs
index 05a8dbfa56..7d86190134 100644
--- a/osu.Game/Rulesets/Mods/ModDoubleTime.cs
+++ b/osu.Game/Rulesets/Mods/ModDoubleTime.cs
@@ -31,6 +31,6 @@ namespace osu.Game.Rulesets.Mods
Precision = 0.01,
};
- public override string SettingDescription => SpeedChange.IsDefault ? "" : $"{SpeedChange.Value}x";
+ public override string SettingDescription => SpeedChange.IsDefault ? string.Empty : $"{SpeedChange.Value}x";
}
}
diff --git a/osu.Game/Rulesets/Mods/ModEasy.cs b/osu.Game/Rulesets/Mods/ModEasy.cs
index a1dd6c088d..c1c4124b98 100644
--- a/osu.Game/Rulesets/Mods/ModEasy.cs
+++ b/osu.Game/Rulesets/Mods/ModEasy.cs
@@ -29,7 +29,7 @@ namespace osu.Game.Rulesets.Mods
MaxValue = 10
};
- public override string SettingDescription => Retries.IsDefault ? "" : $"{"lives".ToQuantity(Retries.Value)}";
+ public override string SettingDescription => Retries.IsDefault ? string.Empty : $"{"lives".ToQuantity(Retries.Value)}";
private int retries;
diff --git a/osu.Game/Rulesets/Mods/ModHalfTime.cs b/osu.Game/Rulesets/Mods/ModHalfTime.cs
index 5252ce8d89..ec215369a3 100644
--- a/osu.Game/Rulesets/Mods/ModHalfTime.cs
+++ b/osu.Game/Rulesets/Mods/ModHalfTime.cs
@@ -31,6 +31,6 @@ namespace osu.Game.Rulesets.Mods
Precision = 0.01,
};
- public override string SettingDescription => SpeedChange.IsDefault ? "" : $"{SpeedChange.Value}x";
+ public override string SettingDescription => SpeedChange.IsDefault ? string.Empty : $"{SpeedChange.Value}x";
}
}