diff --git a/osu.Game/Localisation/SkinComponents/SkinnableModDisplayStrings.cs b/osu.Game/Localisation/SkinComponents/SkinnableModDisplayStrings.cs
index d3e8c0f8c8..22f9fe6d02 100644
--- a/osu.Game/Localisation/SkinComponents/SkinnableModDisplayStrings.cs
+++ b/osu.Game/Localisation/SkinComponents/SkinnableModDisplayStrings.cs
@@ -17,7 +17,13 @@ namespace osu.Game.Localisation.SkinComponents
///
/// "Whether to show extended information for each mod."
///
- public static LocalisableString ShowExtendedInformationDescription => new TranslatableString(getKey(@"whether_to_show_extended_information"), @"Whether to show extended information for each mod.");
+ public static LocalisableString ShowExtendedInformationDescription =>
+ new TranslatableString(getKey(@"whether_to_show_extended_information"), @"Whether to show extended information for each mod.");
+
+ ///
+ /// "Display direction"
+ ///
+ public static LocalisableString DisplayDirection => new TranslatableString(getKey(@"display_direction"), "Display direction");
///
/// "Expansion mode"
diff --git a/osu.Game/Screens/Play/HUD/ModDisplay.cs b/osu.Game/Screens/Play/HUD/ModDisplay.cs
index 3ab4c15154..011b2b950a 100644
--- a/osu.Game/Screens/Play/HUD/ModDisplay.cs
+++ b/osu.Game/Screens/Play/HUD/ModDisplay.cs
@@ -67,6 +67,12 @@ namespace osu.Game.Screens.Play.HUD
}
}
+ public FillDirection FillDirection
+ {
+ get => iconsContainer.Direction;
+ set => iconsContainer.Direction = value;
+ }
+
private readonly FillFlowContainer iconsContainer;
public ModDisplay(bool showExtendedInformation = true)
@@ -122,13 +128,13 @@ namespace osu.Game.Screens.Play.HUD
private void expand(double duration = 500)
{
if (ExpansionMode != ExpansionMode.AlwaysContracted)
- iconsContainer.TransformSpacingTo(new Vector2(5, 0), duration, Easing.OutQuint);
+ iconsContainer.TransformSpacingTo(new Vector2(5), duration, Easing.OutQuint);
}
private void contract(double duration = 500)
{
if (ExpansionMode != ExpansionMode.AlwaysExpanded)
- iconsContainer.TransformSpacingTo(new Vector2(-25, 0), duration, Easing.OutQuint);
+ iconsContainer.TransformSpacingTo(new Vector2(-25), duration, Easing.OutQuint);
}
protected override bool OnHover(HoverEvent e)
diff --git a/osu.Game/Screens/Play/HUD/SkinnableModDisplay.cs b/osu.Game/Screens/Play/HUD/SkinnableModDisplay.cs
index 59bb1ade41..29b8429539 100644
--- a/osu.Game/Screens/Play/HUD/SkinnableModDisplay.cs
+++ b/osu.Game/Screens/Play/HUD/SkinnableModDisplay.cs
@@ -30,6 +30,9 @@ namespace osu.Game.Screens.Play.HUD
[SettingSource(typeof(SkinnableModDisplayStrings), nameof(SkinnableModDisplayStrings.ExpansionMode), nameof(SkinnableModDisplayStrings.ExpansionModeDescription))]
public Bindable ExpansionModeSetting { get; } = new Bindable();
+ [SettingSource(typeof(SkinnableModDisplayStrings), nameof(SkinnableModDisplayStrings.DisplayDirection))]
+ public Bindable Direction { get; } = new Bindable();
+
[BackgroundDependencyLoader]
private void load()
{
@@ -50,6 +53,7 @@ namespace osu.Game.Screens.Play.HUD
ShowExtendedInformation.BindValueChanged(_ => modDisplay.ShowExtendedInformation = ShowExtendedInformation.Value, true);
ExpansionModeSetting.BindValueChanged(_ => modDisplay.ExpansionMode = ExpansionModeSetting.Value, true);
+ Direction.BindValueChanged(_ => modDisplay.FillDirection = Direction.Value == Framework.Graphics.Direction.Horizontal ? FillDirection.Horizontal : FillDirection.Vertical, true);
FinishTransforms(true);
}