Skip to content

Commit

Permalink
Merge pull request #29714 from Crystallized21/total-participation-too…
Browse files Browse the repository at this point in the history
…ltip

Add Total Participation stat to users profile Daily Challenge Tooltip
  • Loading branch information
peppy authored Sep 8, 2024
2 parents 139fc07 + 7f814d3 commit 4a6266e
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ private void update(Action<APIUserDailyChallengeStatistics> change)
[Test]
public void TestPlayCountRankingTier()
{
AddAssert("1 before silver", () => DailyChallengeStatsDisplay.TierForPlayCount(30) == RankingTier.Bronze);
AddAssert("first silver", () => DailyChallengeStatsDisplay.TierForPlayCount(31) == RankingTier.Silver);
AddAssert("1 before silver", () => DailyChallengeStatsTooltip.TierForPlayCount(30) == RankingTier.Bronze);
AddAssert("first silver", () => DailyChallengeStatsTooltip.TierForPlayCount(31) == RankingTier.Silver);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Copyright (c) ppy Pty Ltd <[email protected]>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Extensions.LocalisationExtensions;
Expand All @@ -14,7 +13,6 @@
using osu.Game.Graphics.Sprites;
using osu.Game.Localisation;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Scoring;

namespace osu.Game.Overlays.Profile.Header.Components
{
Expand Down Expand Up @@ -99,27 +97,28 @@ protected override void LoadComplete()

private void updateDisplay()
{
if (User.Value == null || User.Value.Ruleset.OnlineID != 0)
if (User.Value == null)
{
Hide();
return;
}

APIUserDailyChallengeStatistics stats = User.Value.User.DailyChallengeStatistics;

if (stats.PlayCount == 0)
{
Hide();
return;
}

dailyPlayCount.Text = DailyChallengeStatsDisplayStrings.UnitDay(stats.PlayCount.ToLocalisableString("N0"));
dailyPlayCount.Colour = colours.ForRankingTier(TierForPlayCount(stats.PlayCount));
dailyPlayCount.Colour = colours.ForRankingTier(DailyChallengeStatsTooltip.TierForPlayCount(stats.PlayCount));

TooltipContent = new DailyChallengeTooltipData(colourProvider, stats);

Show();
}

// Rounding up is needed here to ensure the overlay shows the same colour as osu-web for the play count.
// This is because, for example, 31 / 3 > 10 in JavaScript because floats are used, while here it would
// get truncated to 10 with an integer division and show a lower tier.
public static RankingTier TierForPlayCount(int playCount) => DailyChallengeStatsTooltip.TierForDaily((int)Math.Ceiling(playCount / 3.0d));

public ITooltip<DailyChallengeTooltipData> GetCustomTooltip() => new DailyChallengeStatsTooltip();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) ppy Pty Ltd <[email protected]>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System;
using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Extensions.LocalisationExtensions;
Expand All @@ -26,6 +27,7 @@ public partial class DailyChallengeStatsTooltip : VisibilityContainer, ITooltip<
{
private StreakPiece currentDaily = null!;
private StreakPiece currentWeekly = null!;
private StreakPiece totalParticipation = null!;
private StatisticsPiece bestDaily = null!;
private StatisticsPiece bestWeekly = null!;
private StatisticsPiece topTen = null!;
Expand Down Expand Up @@ -80,6 +82,7 @@ private void load()
Spacing = new Vector2(30f),
Children = new[]
{
totalParticipation = new StreakPiece(UsersStrings.ShowDailyChallengePlaycount),
currentDaily = new StreakPiece(UsersStrings.ShowDailyChallengeDailyStreakCurrent),
currentWeekly = new StreakPiece(UsersStrings.ShowDailyChallengeWeeklyStreakCurrent),
}
Expand Down Expand Up @@ -113,6 +116,9 @@ public void SetContent(DailyChallengeTooltipData content)
background.Colour = colourProvider.Background4;
topBackground.Colour = colourProvider.Background5;

totalParticipation.Value = DailyChallengeStatsDisplayStrings.UnitDay(statistics.PlayCount.ToLocalisableString(@"N0"));
totalParticipation.ValueColour = colours.ForRankingTier(TierForPlayCount(statistics.PlayCount));

currentDaily.Value = DailyChallengeStatsDisplayStrings.UnitDay(content.Statistics.DailyStreakCurrent.ToLocalisableString(@"N0"));
currentDaily.ValueColour = colours.ForRankingTier(TierForDaily(statistics.DailyStreakCurrent));

Expand All @@ -132,7 +138,13 @@ public void SetContent(DailyChallengeTooltipData content)
topFifty.ValueColour = colourProvider.Content2;
}

// reference: https://github.com/ppy/osu-web/blob/8206e0e91eeea80ccf92f0586561346dd40e085e/resources/js/profile-page/daily-challenge.tsx#L13-L43
// reference: https://github.com/ppy/osu-web/blob/adf1e94754ba9625b85eba795f4a310caf169eec/resources/js/profile-page/daily-challenge.tsx#L13-L47

// Rounding up is needed here to ensure the overlay shows the same colour as osu-web for the play count.
// This is because, for example, 31 / 3 > 10 in JavaScript because floats are used, while here it would
// get truncated to 10 with an integer division and show a lower tier.
public static RankingTier TierForPlayCount(int playCount) => TierForDaily((int)Math.Ceiling(playCount / 3.0d));

public static RankingTier TierForDaily(int daily)
{
if (daily > 360)
Expand Down

0 comments on commit 4a6266e

Please sign in to comment.