diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneTimeshiftResultsScreen.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneTimeshiftResultsScreen.cs
index 628d08a314..03fd2b968c 100644
--- a/osu.Game.Tests/Visual/Multiplayer/TestSceneTimeshiftResultsScreen.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneTimeshiftResultsScreen.cs
@@ -244,6 +244,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
EndedAt = userScore.Date,
Passed = userScore.Passed,
Rank = userScore.Rank,
+ Position = 200,
MaxCombo = userScore.MaxCombo,
TotalScore = userScore.TotalScore,
User = userScore.User,
diff --git a/osu.Game/Screens/Multi/Ranking/TimeshiftResultsScreen.cs b/osu.Game/Screens/Multi/Ranking/TimeshiftResultsScreen.cs
index e212bd4a82..232f368fb3 100644
--- a/osu.Game/Screens/Multi/Ranking/TimeshiftResultsScreen.cs
+++ b/osu.Game/Screens/Multi/Ranking/TimeshiftResultsScreen.cs
@@ -84,12 +84,18 @@ namespace osu.Game.Screens.Multi.Ranking
{
allScores.AddRange(userScore.ScoresAround.Higher.Scores);
higherScores = userScore.ScoresAround.Higher;
+
+ Debug.Assert(userScore.Position != null);
+ setPositions(higherScores, userScore.Position.Value, -1);
}
if (userScore.ScoresAround?.Lower != null)
{
allScores.AddRange(userScore.ScoresAround.Lower.Scores);
lowerScores = userScore.ScoresAround.Lower;
+
+ Debug.Assert(userScore.Position != null);
+ setPositions(lowerScores, userScore.Position.Value, 1);
}
performSuccessCallback(scoresCallback, allScores);
@@ -134,9 +140,15 @@ namespace osu.Game.Screens.Multi.Ranking
indexReq.Success += r =>
{
if (pivot == lowerScores)
+ {
lowerScores = r;
+ setPositions(r, pivot, 1);
+ }
else
+ {
higherScores = r;
+ setPositions(r, pivot, -1);
+ }
performSuccessCallback(scoresCallback, r.Scores, r);
};
@@ -183,6 +195,30 @@ namespace osu.Game.Screens.Multi.Ranking
LeftSpinner.Hide();
}
+ ///
+ /// Applies positions to all s from a given pivot.
+ ///
+ /// The to set positions on.
+ /// The pivot.
+ /// The amount to increment the pivot position by for each in .
+ private void setPositions([NotNull] MultiplayerScores scores, [CanBeNull] MultiplayerScores pivot, int increment)
+ => setPositions(scores, pivot?.Scores[^1].Position ?? 0, increment);
+
+ ///
+ /// Applies positions to all s from a given pivot.
+ ///
+ /// The to set positions on.
+ /// The pivot position.
+ /// The amount to increment the pivot position by for each in .
+ private void setPositions([NotNull] MultiplayerScores scores, int pivotPosition, int increment)
+ {
+ foreach (var s in scores.Scores)
+ {
+ pivotPosition += increment;
+ s.Position = pivotPosition;
+ }
+ }
+
private class PanelListLoadingSpinner : LoadingSpinner
{
private readonly ScorePanelList list;