mirror of
https://github.com/ppy/osu.git
synced 2025-01-26 16:12:54 +08:00
Merge pull request #27107 from Joehuu/rank-highest-tooltip
Add highest rank tooltip to global rank display
This commit is contained in:
commit
57bb0b85a1
@ -137,6 +137,11 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
@"top_ranks",
|
@"top_ranks",
|
||||||
@"medals"
|
@"medals"
|
||||||
},
|
},
|
||||||
|
RankHighest = new APIUser.UserRankHighest
|
||||||
|
{
|
||||||
|
Rank = 1,
|
||||||
|
UpdatedAt = DateTimeOffset.Now,
|
||||||
|
},
|
||||||
Statistics = new UserStatistics
|
Statistics = new UserStatistics
|
||||||
{
|
{
|
||||||
IsRanked = true,
|
IsRanked = true,
|
||||||
|
@ -34,6 +34,19 @@ namespace osu.Game.Online.API.Requests.Responses
|
|||||||
[JsonProperty(@"previous_usernames")]
|
[JsonProperty(@"previous_usernames")]
|
||||||
public string[] PreviousUsernames;
|
public string[] PreviousUsernames;
|
||||||
|
|
||||||
|
[JsonProperty(@"rank_highest")]
|
||||||
|
[CanBeNull]
|
||||||
|
public UserRankHighest RankHighest;
|
||||||
|
|
||||||
|
public class UserRankHighest
|
||||||
|
{
|
||||||
|
[JsonProperty(@"rank")]
|
||||||
|
public int Rank;
|
||||||
|
|
||||||
|
[JsonProperty(@"updated_at")]
|
||||||
|
public DateTimeOffset UpdatedAt;
|
||||||
|
}
|
||||||
|
|
||||||
[JsonProperty(@"country_code")]
|
[JsonProperty(@"country_code")]
|
||||||
private string countryCodeString;
|
private string countryCodeString;
|
||||||
|
|
||||||
|
@ -143,6 +143,13 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
scoreRankInfo.Value.RankCount = user?.Statistics?.GradesCount[scoreRankInfo.Key] ?? 0;
|
scoreRankInfo.Value.RankCount = user?.Statistics?.GradesCount[scoreRankInfo.Key] ?? 0;
|
||||||
|
|
||||||
detailGlobalRank.Content = user?.Statistics?.GlobalRank?.ToLocalisableString("\\##,##0") ?? (LocalisableString)"-";
|
detailGlobalRank.Content = user?.Statistics?.GlobalRank?.ToLocalisableString("\\##,##0") ?? (LocalisableString)"-";
|
||||||
|
|
||||||
|
var rankHighest = user?.RankHighest;
|
||||||
|
|
||||||
|
detailGlobalRank.ContentTooltipText = rankHighest != null
|
||||||
|
? UsersStrings.ShowRankHighest(rankHighest.Rank.ToLocalisableString("\\##,##0"), rankHighest.UpdatedAt.ToLocalisableString(@"d MMM yyyy"))
|
||||||
|
: string.Empty;
|
||||||
|
|
||||||
detailCountryRank.Content = user?.Statistics?.CountryRank?.ToLocalisableString("\\##,##0") ?? (LocalisableString)"-";
|
detailCountryRank.Content = user?.Statistics?.CountryRank?.ToLocalisableString("\\##,##0") ?? (LocalisableString)"-";
|
||||||
|
|
||||||
rankGraph.Statistics.Value = user?.Statistics;
|
rankGraph.Statistics.Value = user?.Statistics;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Cursor;
|
||||||
using osu.Framework.Localisation;
|
using osu.Framework.Localisation;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
@ -13,7 +14,7 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
public partial class ProfileValueDisplay : CompositeDrawable
|
public partial class ProfileValueDisplay : CompositeDrawable
|
||||||
{
|
{
|
||||||
private readonly OsuSpriteText title;
|
private readonly OsuSpriteText title;
|
||||||
private readonly OsuSpriteText content;
|
private readonly ContentText content;
|
||||||
|
|
||||||
public LocalisableString Title
|
public LocalisableString Title
|
||||||
{
|
{
|
||||||
@ -25,6 +26,11 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
set => content.Text = value;
|
set => content.Text = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LocalisableString ContentTooltipText
|
||||||
|
{
|
||||||
|
set => content.TooltipText = value;
|
||||||
|
}
|
||||||
|
|
||||||
public ProfileValueDisplay(bool big = false, int minimumWidth = 60)
|
public ProfileValueDisplay(bool big = false, int minimumWidth = 60)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
@ -38,9 +44,9 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
{
|
{
|
||||||
Font = OsuFont.GetFont(size: 12)
|
Font = OsuFont.GetFont(size: 12)
|
||||||
},
|
},
|
||||||
content = new OsuSpriteText
|
content = new ContentText
|
||||||
{
|
{
|
||||||
Font = OsuFont.GetFont(size: big ? 30 : 20, weight: FontWeight.Light)
|
Font = OsuFont.GetFont(size: big ? 30 : 20, weight: FontWeight.Light),
|
||||||
},
|
},
|
||||||
new Container // Add a minimum size to the FillFlowContainer
|
new Container // Add a minimum size to the FillFlowContainer
|
||||||
{
|
{
|
||||||
@ -56,5 +62,10 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
title.Colour = colourProvider.Content1;
|
title.Colour = colourProvider.Content1;
|
||||||
content.Colour = colourProvider.Content2;
|
content.Colour = colourProvider.Content2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private partial class ContentText : OsuSpriteText, IHasTooltip
|
||||||
|
{
|
||||||
|
public LocalisableString TooltipText { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,25 +5,19 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Cursor;
|
|
||||||
using osu.Framework.Localisation;
|
|
||||||
using osu.Game.Resources.Localisation.Web;
|
using osu.Game.Resources.Localisation.Web;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Profile.Header.Components
|
namespace osu.Game.Overlays.Profile.Header.Components
|
||||||
{
|
{
|
||||||
public partial class TotalPlayTime : CompositeDrawable, IHasTooltip
|
public partial class TotalPlayTime : CompositeDrawable
|
||||||
{
|
{
|
||||||
public readonly Bindable<UserProfileData?> User = new Bindable<UserProfileData?>();
|
public readonly Bindable<UserProfileData?> User = new Bindable<UserProfileData?>();
|
||||||
|
|
||||||
public LocalisableString TooltipText { get; set; }
|
|
||||||
|
|
||||||
private ProfileValueDisplay info = null!;
|
private ProfileValueDisplay info = null!;
|
||||||
|
|
||||||
public TotalPlayTime()
|
public TotalPlayTime()
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
|
|
||||||
TooltipText = "0 hours";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -32,6 +26,7 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
InternalChild = info = new ProfileValueDisplay(minimumWidth: 140)
|
InternalChild = info = new ProfileValueDisplay(minimumWidth: 140)
|
||||||
{
|
{
|
||||||
Title = UsersStrings.ShowStatsPlayTime,
|
Title = UsersStrings.ShowStatsPlayTime,
|
||||||
|
ContentTooltipText = "0 hours",
|
||||||
};
|
};
|
||||||
|
|
||||||
User.BindValueChanged(updateTime, true);
|
User.BindValueChanged(updateTime, true);
|
||||||
@ -40,7 +35,7 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
private void updateTime(ValueChangedEvent<UserProfileData?> user)
|
private void updateTime(ValueChangedEvent<UserProfileData?> user)
|
||||||
{
|
{
|
||||||
int? playTime = user.NewValue?.User.Statistics?.PlayTime;
|
int? playTime = user.NewValue?.User.Statistics?.PlayTime;
|
||||||
TooltipText = (playTime ?? 0) / 3600 + " hours";
|
info.ContentTooltipText = (playTime ?? 0) / 3600 + " hours";
|
||||||
info.Content = formatTime(playTime);
|
info.Content = formatTime(playTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +166,9 @@ namespace osu.Game.Users
|
|||||||
globalRankDisplay = new ProfileValueDisplay(true)
|
globalRankDisplay = new ProfileValueDisplay(true)
|
||||||
{
|
{
|
||||||
Title = UsersStrings.ShowRankGlobalSimple,
|
Title = UsersStrings.ShowRankGlobalSimple,
|
||||||
|
// TODO: implement highest rank tooltip
|
||||||
|
// `RankHighest` resides in `APIUser`, but `api.LocalUser` doesn't update
|
||||||
|
// maybe move to `UserStatistics` in api, so `SoloStatisticsWatcher` can update the value
|
||||||
},
|
},
|
||||||
countryRankDisplay = new ProfileValueDisplay(true)
|
countryRankDisplay = new ProfileValueDisplay(true)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user