mirror of
https://github.com/osukey/osukey.git
synced 2025-05-01 03:37:17 +09:00
Add tiered level badge colouring
This commit is contained in:
parent
43a037c189
commit
24ed84aad0
58
osu.Game.Tests/Visual/Online/TestSceneLevelBadge.cs
Normal file
58
osu.Game.Tests/Visual/Online/TestSceneLevelBadge.cs
Normal file
@ -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 System;
|
||||||
using osu.Framework.Extensions.Color4Extensions;
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Online.Rooms;
|
using osu.Game.Online.Rooms;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
@ -187,6 +188,41 @@ namespace osu.Game.Graphics
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
/// <summary>
|
||||||
/// Returns a foreground text colour that is supposed to contrast well with
|
/// Returns a foreground text colour that is supposed to contrast well with
|
||||||
/// the supplied <paramref name="backgroundColour"/>.
|
/// the supplied <paramref name="backgroundColour"/>.
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Cursor;
|
using osu.Framework.Graphics.Cursor;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
@ -12,6 +13,7 @@ using osu.Framework.Localisation;
|
|||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Resources.Localisation.Web;
|
using osu.Game.Resources.Localisation.Web;
|
||||||
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Users;
|
using osu.Game.Users;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Profile.Header.Components
|
namespace osu.Game.Overlays.Profile.Header.Components
|
||||||
@ -23,6 +25,10 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
public LocalisableString TooltipText { get; private set; }
|
public LocalisableString TooltipText { get; private set; }
|
||||||
|
|
||||||
private OsuSpriteText levelText = null!;
|
private OsuSpriteText levelText = null!;
|
||||||
|
private Sprite sprite = null!;
|
||||||
|
|
||||||
|
[Resolved]
|
||||||
|
private OsuColour osuColour { get; set; } = null!;
|
||||||
|
|
||||||
public LevelBadge()
|
public LevelBadge()
|
||||||
{
|
{
|
||||||
@ -34,7 +40,7 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
{
|
{
|
||||||
InternalChildren = new Drawable[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
new Sprite
|
sprite = new Sprite
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Texture = textures.Get("Profile/levelbadge"),
|
Texture = textures.Get("Profile/levelbadge"),
|
||||||
@ -58,9 +64,34 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
|
|
||||||
private void updateLevel(UserStatistics.LevelInfo? levelInfo)
|
private void updateLevel(UserStatistics.LevelInfo? levelInfo)
|
||||||
{
|
{
|
||||||
string level = levelInfo?.Current.ToString() ?? "0";
|
int level = levelInfo?.Current ?? 0;
|
||||||
levelText.Text = level;
|
|
||||||
TooltipText = UsersStrings.ShowStatsLevel(level);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
17
osu.Game/Scoring/RankingTier.cs
Normal file
17
osu.Game/Scoring/RankingTier.cs
Normal file
@ -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…
x
Reference in New Issue
Block a user