mirror of https://github.com/ppy/osu
Add tiered level badge colouring
This commit is contained in:
parent
43a037c189
commit
24ed84aad0
|
@ -0,0 +1,58 @@
|
|||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Shapes;
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Graphics.Containers;
|
||||
using osu.Game.Overlays.Profile.Header.Components;
|
||||
using osu.Game.Users;
|
||||
using osuTK;
|
||||
|
||||
namespace osu.Game.Tests.Visual.Online
|
||||
{
|
||||
[TestFixture]
|
||||
public partial class TestSceneLevelBadge : OsuTestScene
|
||||
{
|
||||
public TestSceneLevelBadge()
|
||||
{
|
||||
var levels = new List<UserStatistics.LevelInfo>();
|
||||
|
||||
for (int i = 0; i < 11; i++)
|
||||
{
|
||||
levels.Add(new UserStatistics.LevelInfo
|
||||
{
|
||||
Current = i * 10
|
||||
});
|
||||
}
|
||||
|
||||
levels.Add(new UserStatistics.LevelInfo { Current = 101 });
|
||||
levels.Add(new UserStatistics.LevelInfo { Current = 105 });
|
||||
levels.Add(new UserStatistics.LevelInfo { Current = 110 });
|
||||
levels.Add(new UserStatistics.LevelInfo { Current = 115 });
|
||||
levels.Add(new UserStatistics.LevelInfo { Current = 120 });
|
||||
|
||||
Children = new Drawable[]
|
||||
{
|
||||
new FillFlowContainer<LevelBadge>
|
||||
{
|
||||
Anchor = Anchor.Centre,
|
||||
Origin = Anchor.Centre,
|
||||
RelativeSizeAxes = Axes.X,
|
||||
AutoSizeAxes = Axes.Y,
|
||||
Direction = FillDirection.Horizontal,
|
||||
Spacing = new Vector2(5),
|
||||
ChildrenEnumerable = levels.Select(l => new LevelBadge
|
||||
{
|
||||
Size = new Vector2(60),
|
||||
LevelInfo = { Value = l }
|
||||
})
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
using System;
|
||||
using osu.Framework.Extensions.Color4Extensions;
|
||||
using osu.Framework.Graphics.Colour;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Online.Rooms;
|
||||
using osu.Game.Overlays;
|
||||
|
@ -187,6 +188,41 @@ public Color4 ForModType(ModType modType)
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves colour for a <see cref="RankingTier"/>.
|
||||
/// See https://www.figma.com/file/YHWhp9wZ089YXgB7pe6L1k/Tier-Colours
|
||||
/// </summary>
|
||||
public ColourInfo ForRankingTiers(RankingTier tier)
|
||||
{
|
||||
switch (tier)
|
||||
{
|
||||
default:
|
||||
case RankingTier.Iron:
|
||||
return Color4Extensions.FromHex(@"BAB3AB");
|
||||
|
||||
case RankingTier.Bronze:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"B88F7A"), Color4Extensions.FromHex(@"855C47"));
|
||||
|
||||
case RankingTier.Silver:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"E0E0EB"), Color4Extensions.FromHex(@"A3A3C2"));
|
||||
|
||||
case RankingTier.Gold:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"F0E4A8"), Color4Extensions.FromHex(@"E0C952"));
|
||||
|
||||
case RankingTier.Platinum:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"A8F0EF"), Color4Extensions.FromHex(@"52E0DF"));
|
||||
|
||||
case RankingTier.Rhodium:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"D9F8D3"), Color4Extensions.FromHex(@"A0CF96"));
|
||||
|
||||
case RankingTier.Radiant:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"97DCFF"), Color4Extensions.FromHex(@"ED82FF"));
|
||||
|
||||
case RankingTier.Lustrous:
|
||||
return ColourInfo.GradientVertical(Color4Extensions.FromHex(@"FFE600"), Color4Extensions.FromHex(@"ED82FF"));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a foreground text colour that is supposed to contrast well with
|
||||
/// the supplied <paramref name="backgroundColour"/>.
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Colour;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Cursor;
|
||||
using osu.Framework.Graphics.Sprites;
|
||||
|
@ -12,6 +13,7 @@
|
|||
using osu.Game.Graphics;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using osu.Game.Resources.Localisation.Web;
|
||||
using osu.Game.Scoring;
|
||||
using osu.Game.Users;
|
||||
|
||||
namespace osu.Game.Overlays.Profile.Header.Components
|
||||
|
@ -23,6 +25,10 @@ public partial class LevelBadge : CompositeDrawable, IHasTooltip
|
|||
public LocalisableString TooltipText { get; private set; }
|
||||
|
||||
private OsuSpriteText levelText = null!;
|
||||
private Sprite sprite = null!;
|
||||
|
||||
[Resolved]
|
||||
private OsuColour osuColour { get; set; } = null!;
|
||||
|
||||
public LevelBadge()
|
||||
{
|
||||
|
@ -34,7 +40,7 @@ private void load(OsuColour colours, TextureStore textures)
|
|||
{
|
||||
InternalChildren = new Drawable[]
|
||||
{
|
||||
new Sprite
|
||||
sprite = new Sprite
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Texture = textures.Get("Profile/levelbadge"),
|
||||
|
@ -58,9 +64,34 @@ protected override void LoadComplete()
|
|||
|
||||
private void updateLevel(UserStatistics.LevelInfo? levelInfo)
|
||||
{
|
||||
string level = levelInfo?.Current.ToString() ?? "0";
|
||||
levelText.Text = level;
|
||||
TooltipText = UsersStrings.ShowStatsLevel(level);
|
||||
int level = levelInfo?.Current ?? 0;
|
||||
|
||||
levelText.Text = level.ToString();
|
||||
TooltipText = UsersStrings.ShowStatsLevel(level.ToString());
|
||||
|
||||
sprite.Colour = mapLevelToTierColour(level);
|
||||
}
|
||||
|
||||
private ColourInfo mapLevelToTierColour(int level)
|
||||
{
|
||||
var tier = RankingTier.Iron;
|
||||
|
||||
if (level > 0)
|
||||
{
|
||||
tier = (RankingTier)(level / 20);
|
||||
}
|
||||
|
||||
if (level >= 105)
|
||||
{
|
||||
tier = RankingTier.Radiant;
|
||||
}
|
||||
|
||||
if (level >= 110)
|
||||
{
|
||||
tier = RankingTier.Lustrous;
|
||||
}
|
||||
|
||||
return osuColour.ForRankingTiers(tier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
namespace osu.Game.Scoring
|
||||
{
|
||||
public enum RankingTier
|
||||
{
|
||||
Iron,
|
||||
Bronze,
|
||||
Silver,
|
||||
Gold,
|
||||
Platinum,
|
||||
Rhodium,
|
||||
Radiant,
|
||||
Lustrous
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue