Skip to content

Add additional information to the matchmaking queue screen#37229

Open
smoogipoo wants to merge 5 commits intoppy:masterfrom
smoogipoo:rp-queue-improvements
Open

Add additional information to the matchmaking queue screen#37229
smoogipoo wants to merge 5 commits intoppy:masterfrom
smoogipoo:rp-queue-improvements

Conversation

@smoogipoo
Copy link
Copy Markdown
Contributor

@smoogipoo smoogipoo commented Apr 7, 2026

This adds two new components to the queue screen:

  • A listing of the most recently completed matches (global).
  • A rank distribution graph.

It looks something like this (fake data / test scene):

image

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).

@smoogipoo smoogipoo force-pushed the rp-queue-improvements branch from e822df9 to c58b6d3 Compare April 7, 2026 08:38
@peppy peppy self-requested a review April 9, 2026 06:11
@peppy
Copy link
Copy Markdown
Member

peppy commented Apr 9, 2026

@smoogipoo are you actively changing anything here or safe to review this? (i will probably be making some minor design changes)

@smoogipoo
Copy link
Copy Markdown
Contributor Author

I'm not making any changes here for the time being.


private void onSelectedPoolChanged(ValueChangedEvent<MatchmakingPool?> e)
{
userRating = null;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

Copy link
Copy Markdown
Contributor Author

@smoogipoo smoogipoo Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I see this now after reading more. I'll add a comment explaining 👍 .

@peppy
Copy link
Copy Markdown
Member

peppy commented Apr 9, 2026

osu Game Tests 2026-04-09 at 06 48 09

Not too sure about this icon choice, feels inverse of what it's showing, unless I'm misunderstanding. Would a trophy or medal not work better?

@peppy
Copy link
Copy Markdown
Member

peppy commented Apr 9, 2026

osu.Game.Tests.2026-04-09.at.06.57.55.mp4

Is 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).

@peppy
Copy link
Copy Markdown
Member

peppy commented Apr 9, 2026

A few immediate visual fixes I'd propose:

osu Game Tests 2026-04-09 at 07 02 21

I'd also give the scroll container a background to match the other boxes on the screen.

@smoogipoo
Copy link
Copy Markdown
Contributor Author

Is it intended that the graph doesn't clear when switching between pools

Not intended, should be able fixed by calling SetData([]) on the graph.

@peppy peppy self-requested a review April 9, 2026 08:16
@peppy peppy force-pushed the rp-queue-improvements branch from 0f29023 to 702be50 Compare April 12, 2026 04:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants