Fix mod icons potentially having incorrect colours

This commit is contained in:
smoogipoo
2021-02-01 19:05:02 +09:00
parent ee92ec0a5c
commit 76ebb3811a

View File

@ -26,8 +26,6 @@ namespace osu.Game.Rulesets.UI
private const float size = 80; private const float size = 80;
private readonly ModType type;
public virtual string TooltipText => mod.IconTooltip; public virtual string TooltipText => mod.IconTooltip;
private Mod mod; private Mod mod;
@ -38,16 +36,22 @@ namespace osu.Game.Rulesets.UI
set set
{ {
mod = value; mod = value;
updateMod(value);
if (LoadState >= LoadState.Ready)
updateMod(value);
} }
} }
[Resolved]
private OsuColour colours { get; set; }
private Color4 backgroundColour;
private Color4 highlightedColour;
public ModIcon(Mod mod) public ModIcon(Mod mod)
{ {
this.mod = mod ?? throw new ArgumentNullException(nameof(mod)); this.mod = mod ?? throw new ArgumentNullException(nameof(mod));
type = mod.Type;
Size = new Vector2(size); Size = new Vector2(size);
Children = new Drawable[] Children = new Drawable[]
@ -79,10 +83,20 @@ namespace osu.Game.Rulesets.UI
Icon = FontAwesome.Solid.Question Icon = FontAwesome.Solid.Question
}, },
}; };
}
[BackgroundDependencyLoader]
private void load()
{
updateMod(mod); updateMod(mod);
} }
protected override void LoadComplete()
{
base.LoadComplete();
Selected.BindValueChanged(_ => updateColour(), true);
}
private void updateMod(Mod value) private void updateMod(Mod value)
{ {
modAcronym.Text = value.Acronym; modAcronym.Text = value.Acronym;
@ -92,20 +106,14 @@ namespace osu.Game.Rulesets.UI
{ {
modIcon.FadeOut(); modIcon.FadeOut();
modAcronym.FadeIn(); modAcronym.FadeIn();
return; }
else
{
modIcon.FadeIn();
modAcronym.FadeOut();
} }
modIcon.FadeIn(); switch (value.Type)
modAcronym.FadeOut();
}
private Color4 backgroundColour;
private Color4 highlightedColour;
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
switch (type)
{ {
default: default:
case ModType.DifficultyIncrease: case ModType.DifficultyIncrease:
@ -139,12 +147,13 @@ namespace osu.Game.Rulesets.UI
modIcon.Colour = colours.Yellow; modIcon.Colour = colours.Yellow;
break; break;
} }
updateColour();
} }
protected override void LoadComplete() private void updateColour()
{ {
base.LoadComplete(); background.Colour = Selected.Value ? highlightedColour : backgroundColour;
Selected.BindValueChanged(selected => background.Colour = selected.NewValue ? highlightedColour : backgroundColour, true);
} }
} }
} }