Refactor colour selection.

This commit is contained in:
Dean Herbert
2017-05-08 11:33:22 +09:00
parent df4a737c9b
commit 2f4fad9d41
2 changed files with 46 additions and 32 deletions

View File

@ -55,7 +55,7 @@ namespace osu.Game.Overlays.Mods
iconsContainer.RotateTo(Selected ? 5f : 0f, 300, EasingTypes.OutElastic); iconsContainer.RotateTo(Selected ? 5f : 0f, 300, EasingTypes.OutElastic);
iconsContainer.ScaleTo(Selected ? 1.1f : 1f, 300, EasingTypes.OutElastic); iconsContainer.ScaleTo(Selected ? 1.1f : 1f, 300, EasingTypes.OutElastic);
foregroundIcon.Colour = Selected ? SelectedColour : ButtonColour; foregroundIcon.Highlighted = Selected;
if (mod != null) if (mod != null)
displayMod(SelectedMod ?? Mods[0]); displayMod(SelectedMod ?? Mods[0]);
@ -64,12 +64,6 @@ namespace osu.Game.Overlays.Mods
public bool Selected => selectedIndex != -1; public bool Selected => selectedIndex != -1;
private Color4 buttonColour;
public Color4 ButtonColour
{
get { return buttonColour; }
set { buttonColour = value; }
}
private Color4 selectedColour; private Color4 selectedColour;
public Color4 SelectedColour public Color4 SelectedColour
@ -198,8 +192,6 @@ namespace osu.Game.Overlays.Mods
AutoSizeAxes = Axes.Both, AutoSizeAxes = Axes.Both,
}); });
} }
buttonColour = foregroundIcon.Colour;
} }
public ModButton(Mod mod) public ModButton(Mod mod)

View File

@ -3,6 +3,7 @@
using System; using System;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Game.Graphics; using osu.Game.Graphics;
@ -17,65 +18,86 @@ namespace osu.Game.Rulesets.UI
private const float icon_size = 80; private const float icon_size = 80;
public new Color4 Colour
{
get { return background.Colour; }
set { background.Colour = value; }
}
public FontAwesome Icon public FontAwesome Icon
{ {
get { return modIcon.Icon; } get { return modIcon.Icon; }
set { modIcon.Icon = value; } set { modIcon.Icon = value; }
} }
private ModType type;
public ModIcon(Mod mod) public ModIcon(Mod mod)
{ {
if (mod == null) throw new ArgumentNullException(nameof(mod)); if (mod == null) throw new ArgumentNullException(nameof(mod));
type = mod.Type;
Children = new Drawable[] Children = new Drawable[]
{ {
background = new TextAwesome background = new TextAwesome
{ {
Origin = Anchor.Centre, Origin = Anchor.Centre,
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
TextSize = icon_size,
Icon = FontAwesome.fa_osu_mod_bg, Icon = FontAwesome.fa_osu_mod_bg,
Colour = getBackgroundColourFromMod(mod),
Shadow = true, Shadow = true,
TextSize = 20
}, },
modIcon = new TextAwesome modIcon = new TextAwesome
{ {
Origin = Anchor.Centre, Origin = Anchor.Centre,
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Colour = OsuColour.Gray(84), Colour = OsuColour.Gray(84),
TextSize = 20, TextSize = icon_size - 35,
Icon = mod.Icon Icon = mod.Icon
}, },
}; };
reapplySize();
} }
private void reapplySize() private Color4 backgroundColour;
{ private Color4 highlightedColour;
background.TextSize = icon_size;
modIcon.TextSize = icon_size - 35;
}
private Color4 getBackgroundColourFromMod(Mod mod) [BackgroundDependencyLoader]
private void load(OsuColour colours)
{ {
switch (mod.Type) switch (type)
{ {
default:
case ModType.DifficultyIncrease: case ModType.DifficultyIncrease:
return OsuColour.FromHex(@"ffcc22"); backgroundColour = colours.Yellow;
highlightedColour = colours.YellowLight;
break;
case ModType.DifficultyReduction: case ModType.DifficultyReduction:
return OsuColour.FromHex(@"88b300"); backgroundColour = colours.Green;
highlightedColour = colours.GreenLight;
break;
case ModType.Special: case ModType.Special:
return OsuColour.FromHex(@"66ccff"); backgroundColour = colours.Blue;
highlightedColour = colours.BlueLight;
default: return Color4.White; break;
} }
applyStyle();
}
private bool highlighted;
public bool Highlighted
{
get
{
return highlighted;
}
set
{
highlighted = value;
applyStyle();
}
}
private void applyStyle()
{
background.Colour = highlighted ? highlightedColour : backgroundColour;
} }
} }
} }