Add additional information to the matchmaking queue screen#37229
Add additional information to the matchmaking queue screen#37229smoogipoo wants to merge 5 commits intoppy:masterfrom
Conversation
e822df9 to
c58b6d3
Compare
|
@smoogipoo are you actively changing anything here or safe to review this? (i will probably be making some minor design changes) |
|
I'm not making any changes here for the time being. |
|
|
||
| private void onSelectedPoolChanged(ValueChangedEvent<MatchmakingPool?> e) | ||
| { | ||
| userRating = null; |
There was a problem hiding this comment.
I'm not too sure on the local variable userRating usage in this class. Is it required? This seems to work:
diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Queue/ScreenQueue.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Queue/ScreenQueue.cs
index f94aebce71..19581eeac6 100644
--- a/osu.Game/Screens/OnlinePlay/Matchmaking/Queue/ScreenQueue.cs
+++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Queue/ScreenQueue.cs
@@ -95,8 +95,6 @@ public partial class ScreenQueue : OsuScreen
private SampleChannel? waitingLoopChannel;
private ScheduledDelegate? startLoopPlaybackDelegate;
- private int? userRating;
-
public ScreenQueue(MatchmakingPoolType poolType)
{
this.poolType = poolType;
@@ -273,10 +271,7 @@ private void onMatchmakingLobbyStatusChanged(MatchmakingLobbyStatus status) => S
Users = users.OfType<APIUser>().ToArray();
}), cancellation.Token);
- if (status.UserRating != null)
- userRating = status.UserRating;
-
- ratingGraph.SetData(status.RatingDistribution, userRating);
+ ratingGraph.SetData(status.RatingDistribution, status.UserRating);
foreach (var state in status.RecentMatches.OfType<RankedPlayRoomState>())
resultPanelContainer.Insert(-resultPanelContainer.Count, new RankedPlayMatchPanel(state));
@@ -284,7 +279,6 @@ private void onMatchmakingLobbyStatusChanged(MatchmakingLobbyStatus status) => S
private void onSelectedPoolChanged(ValueChangedEvent<MatchmakingPool?> e)
{
- userRating = null;
resultPanelContainer.Clear();
if (e.NewValue == null)
There was a problem hiding this comment.
The problem is that periodic lobby status updates don't contain the user rating, so it'll be set to null by the server.
To clarify, when a user opens this screen:
- They "join" the lobby.
- The server immediately sends them a status update containing: a sampling of users, their user rating, the rating distribution, and the most 50 recent completed matches.
- Every 5 seconds, the server sends a periodic status update containing: a new sampling of users, the rating distribution, and the most N recently completed matches since the ones from before. This update does NOT contain the user rating.
It's part of what I was trying to bring up IRL with this being retrofit into the status update model, which is somewhat unfit for the purpose.
There was a problem hiding this comment.
Yeah I see this now after reading more. I'll add a comment explaining 👍 .
osu.Game.Tests.2026-04-09.at.06.57.55.mp4Is it intended that the graph doesn't clear when switching between pools, but the recent match list does? I think either both should or neither should (and just wait for the next delivery, which should hopefully arrive within hundreds of milliseconds). |
Not intended, should be able fixed by calling |
0f29023 to
702be50
Compare


This adds two new components to the queue screen:
It looks something like this (fake data / test scene):
It's completely dev-design(TM), but I used Lichess as inspiration for the graph, and the original design document as inspiration for the panels.
As for the history, because these are completed matches one of the player life points will always be 0, but I've designed it so as to possibly support showing ongoing matches too in the future. It's only supported for ranked play right now, though there is no reason we couldn't track quick play rooms too (it's just... I'm not sure how to design the panels for quick play).