1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-13 16:13:34 +08:00

Add unranked indicator to song select footer too

This commit is contained in:
Bartłomiej Dach 2024-02-01 21:51:41 +01:00
parent f87ab19731
commit 865f4d76ff
No known key found for this signature in database
2 changed files with 60 additions and 9 deletions

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using osu.Framework.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Mods;
@ -67,6 +68,15 @@ namespace osu.Game.Tests.Visual.UserInterface
AddAssert(@"Check empty multiplier", () => assertModsMultiplier(Array.Empty<Mod>()));
}
[Test]
public void TestUnrankedBadge()
{
AddStep(@"Add unranked mod", () => changeMods(new[] { new OsuModDeflate() }));
AddAssert("Unranked badge shown", () => footerButtonMods.UnrankedBadge.Alpha == 1);
AddStep(@"Clear selected mod", () => changeMods(Array.Empty<Mod>()));
AddAssert("Unranked badge not shown", () => footerButtonMods.UnrankedBadge.Alpha == 0);
}
private void changeMods(IReadOnlyList<Mod> mods)
{
footerButtonMods.Current.Value = mods;
@ -83,6 +93,7 @@ namespace osu.Game.Tests.Visual.UserInterface
private partial class TestFooterButtonMods : FooterButtonMods
{
public new OsuSpriteText MultiplierText => base.MultiplierText;
public new Drawable UnrankedBadge => base.UnrankedBadge;
}
}
}

View File

@ -9,6 +9,9 @@ using System.Collections.Generic;
using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Extensions.LocalisationExtensions;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.UserInterface;
using osu.Game.Configuration;
using osu.Game.Graphics;
@ -16,6 +19,7 @@ using osu.Game.Graphics.Sprites;
using osuTK;
using osuTK.Graphics;
using osu.Game.Input.Bindings;
using osu.Game.Localisation;
using osu.Game.Utils;
namespace osu.Game.Screens.Select
@ -29,13 +33,27 @@ namespace osu.Game.Screens.Select
}
protected OsuSpriteText MultiplierText { get; private set; } = null!;
private ModDisplay modDisplay = null!;
protected Container UnrankedBadge { get; private set; } = null!;
private readonly ModDisplay modDisplay;
private ModSettingChangeTracker? modSettingChangeTracker;
private Color4 lowMultiplierColour;
private Color4 highMultiplierColour;
public FooterButtonMods()
{
// must be created in ctor for correct operation of `Current`.
modDisplay = new ModDisplay
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = new Vector2(0.8f),
ExpansionMode = ExpansionMode.AlwaysContracted,
};
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
@ -48,19 +66,38 @@ namespace osu.Game.Screens.Select
ButtonContentContainer.AddRange(new Drawable[]
{
modDisplay = new ModDisplay
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = new Vector2(0.8f),
ExpansionMode = ExpansionMode.AlwaysContracted,
},
modDisplay,
MultiplierText = new OsuSpriteText
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Font = OsuFont.GetFont(weight: FontWeight.Bold),
}
},
UnrankedBadge = new Container
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
AutoSizeAxes = Axes.Both,
Children = new Drawable[]
{
new Circle
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Colour = colours.Yellow,
RelativeSizeAxes = Axes.Both,
},
new OsuSpriteText
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Colour = colours.Gray2,
Padding = new MarginPadding(5),
UseFullGlyphHeight = false,
Text = ModSelectOverlayStrings.Unranked.ToLower()
}
}
},
});
}
@ -98,6 +135,9 @@ namespace osu.Game.Screens.Select
modDisplay.FadeIn();
else
modDisplay.FadeOut();
bool anyUnrankedMods = Current.Value?.Any(m => !m.Ranked) == true;
UnrankedBadge.FadeTo(anyUnrankedMods ? 1 : 0);
});
}
}