mirror of
https://github.com/ppy/osu.git
synced 2024-12-13 04:32:57 +08:00
Apply partial fade on pp display on results screen when score will not give pp
This commit is contained in:
parent
320ca04d98
commit
e06df34a1c
@ -14,13 +14,16 @@ using osu.Framework.Graphics.Shapes;
|
||||
using osu.Framework.Testing;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using osu.Game.Localisation;
|
||||
using osu.Game.Models;
|
||||
using osu.Game.Rulesets;
|
||||
using osu.Game.Rulesets.Mods;
|
||||
using osu.Game.Rulesets.Osu;
|
||||
using osu.Game.Rulesets.Osu.Mods;
|
||||
using osu.Game.Scoring;
|
||||
using osu.Game.Screens.Ranking;
|
||||
using osu.Game.Screens.Ranking.Expanded;
|
||||
using osu.Game.Screens.Ranking.Expanded.Statistics;
|
||||
using osu.Game.Tests.Beatmaps;
|
||||
using osu.Game.Tests.Resources;
|
||||
using osuTK;
|
||||
@ -67,6 +70,40 @@ namespace osu.Game.Tests.Visual.Ranking
|
||||
AddAssert("play time displayed", () => this.ChildrenOfType<ExpandedPanelMiddleContent.PlayedOnText>().Any());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestPPShownAsProvisionalWhenBeatmapHasNoLeaderboard()
|
||||
{
|
||||
AddStep("show example score", () =>
|
||||
{
|
||||
var beatmap = createTestBeatmap(new RealmUser());
|
||||
beatmap.Status = BeatmapOnlineStatus.Graveyard;
|
||||
showPanel(TestResources.CreateTestScoreInfo(beatmap));
|
||||
});
|
||||
|
||||
AddAssert("pp display faded out", () =>
|
||||
{
|
||||
var ppDisplay = this.ChildrenOfType<PerformanceStatistic>().Single();
|
||||
return ppDisplay.Alpha == 0.5 && ppDisplay.TooltipText == ResultsScreenStrings.NoPPForUnrankedBeatmaps;
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestPPShownAsProvisionalWhenUnrankedModsArePresent()
|
||||
{
|
||||
AddStep("show example score", () =>
|
||||
{
|
||||
var score = TestResources.CreateTestScoreInfo(createTestBeatmap(new RealmUser()));
|
||||
score.Mods = score.Mods.Append(new OsuModDifficultyAdjust()).ToArray();
|
||||
showPanel(score);
|
||||
});
|
||||
|
||||
AddAssert("pp display faded out", () =>
|
||||
{
|
||||
var ppDisplay = this.ChildrenOfType<PerformanceStatistic>().Single();
|
||||
return ppDisplay.Alpha == 0.5 && ppDisplay.TooltipText == ResultsScreenStrings.NoPPForUnrankedMods;
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestWithDefaultDate()
|
||||
{
|
||||
|
24
osu.Game/Localisation/ResultsScreenStrings.cs
Normal file
24
osu.Game/Localisation/ResultsScreenStrings.cs
Normal file
@ -0,0 +1,24 @@
|
||||
// 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 osu.Framework.Localisation;
|
||||
|
||||
namespace osu.Game.Localisation
|
||||
{
|
||||
public static class ResultsScreenStrings
|
||||
{
|
||||
private const string prefix = @"osu.Game.Resources.Localisation.ResultsScreen";
|
||||
|
||||
/// <summary>
|
||||
/// "Performance points are not granted for this score because the beatmap is not ranked."
|
||||
/// </summary>
|
||||
public static LocalisableString NoPPForUnrankedBeatmaps => new TranslatableString(getKey(@"no_pp_for_unranked_beatmaps"), @"Performance points are not granted for this score because the beatmap is not ranked.");
|
||||
|
||||
/// <summary>
|
||||
/// "Performance points are not granted for this score because of unranked mods."
|
||||
/// </summary>
|
||||
public static LocalisableString NoPPForUnrankedMods => new TranslatableString(getKey(@"no_pp_for_unranked_mods"), @"Performance points are not granted for this score because of unranked mods.");
|
||||
|
||||
private static string getKey(string key) => $@"{prefix}:{key}";
|
||||
}
|
||||
}
|
@ -4,20 +4,26 @@
|
||||
#nullable disable
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Cursor;
|
||||
using osu.Framework.Localisation;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Graphics.UserInterface;
|
||||
using osu.Game.Resources.Localisation.Web;
|
||||
using osu.Game.Scoring;
|
||||
using osu.Game.Localisation;
|
||||
|
||||
namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
||||
{
|
||||
public partial class PerformanceStatistic : StatisticDisplay
|
||||
public partial class PerformanceStatistic : StatisticDisplay, IHasTooltip
|
||||
{
|
||||
public LocalisableString TooltipText { get; private set; }
|
||||
|
||||
private readonly ScoreInfo score;
|
||||
|
||||
private readonly Bindable<int> performance = new Bindable<int>();
|
||||
@ -37,7 +43,7 @@ namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
||||
{
|
||||
if (score.PP.HasValue)
|
||||
{
|
||||
setPerformanceValue(score.PP.Value);
|
||||
setPerformanceValue(score, score.PP.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -52,15 +58,33 @@ namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
||||
|
||||
var result = await performanceCalculator.CalculateAsync(score, attributes.Value.Attributes, cancellationToken ?? default).ConfigureAwait(false);
|
||||
|
||||
Schedule(() => setPerformanceValue(result.Total));
|
||||
Schedule(() => setPerformanceValue(score, result.Total));
|
||||
}, cancellationToken ?? default);
|
||||
}
|
||||
}
|
||||
|
||||
private void setPerformanceValue(double? pp)
|
||||
private void setPerformanceValue(ScoreInfo scoreInfo, double? pp)
|
||||
{
|
||||
if (pp.HasValue)
|
||||
{
|
||||
performance.Value = (int)Math.Round(pp.Value, MidpointRounding.AwayFromZero);
|
||||
|
||||
if (!scoreInfo.BeatmapInfo!.Status.GrantsPerformancePoints())
|
||||
{
|
||||
Alpha = 0.5f;
|
||||
TooltipText = ResultsScreenStrings.NoPPForUnrankedBeatmaps;
|
||||
}
|
||||
else if (scoreInfo.Mods.Any(m => !m.Ranked))
|
||||
{
|
||||
Alpha = 0.5f;
|
||||
TooltipText = ResultsScreenStrings.NoPPForUnrankedMods;
|
||||
}
|
||||
else
|
||||
{
|
||||
Alpha = 1f;
|
||||
TooltipText = default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Appear()
|
||||
|
Loading…
Reference in New Issue
Block a user