From b0bd39fc4972b46b3577d90feab9aa2a1521e201 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Nov 2021 16:36:28 +0900 Subject: [PATCH] Fix multiplayer room participants display not updating as new users join/leave Can add tests on request, but not sure the code around this area is here to stay permanently. Should be pretty low risk. - Closes https://github.com/ppy/osu/issues/14788. --- .../Online/Multiplayer/MultiplayerClient.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/osu.Game/Online/Multiplayer/MultiplayerClient.cs b/osu.Game/Online/Multiplayer/MultiplayerClient.cs index 28505f6b0e..bf4bb13655 100644 --- a/osu.Game/Online/Multiplayer/MultiplayerClient.cs +++ b/osu.Game/Online/Multiplayer/MultiplayerClient.cs @@ -148,6 +148,10 @@ namespace osu.Game.Online.Multiplayer { Room = joinedRoom; APIRoom = room; + + Debug.Assert(LocalUser != null); + addUserToAPIRoom(LocalUser); + foreach (var user in joinedRoom.Users) updateUserPlayingState(user.UserID, user.State); @@ -372,6 +376,8 @@ namespace osu.Game.Online.Multiplayer Room.Users.Add(user); + addUserToAPIRoom(user); + UserJoined?.Invoke(user); RoomUpdated?.Invoke(); }); @@ -391,6 +397,14 @@ namespace osu.Game.Online.Multiplayer return handleUserLeft(user, UserKicked); } + private void addUserToAPIRoom(MultiplayerRoomUser user) + { + Debug.Assert(APIRoom != null); + + APIRoom.RecentParticipants.Add(user.User); + APIRoom.ParticipantCount.Value++; + } + private Task handleUserLeft(MultiplayerRoomUser user, Action? callback) { if (Room == null) @@ -404,6 +418,10 @@ namespace osu.Game.Online.Multiplayer Room.Users.Remove(user); PlayingUserIds.Remove(user.UserID); + Debug.Assert(APIRoom != null); + APIRoom.RecentParticipants.RemoveAll(u => u.Id == user.UserID); + APIRoom.ParticipantCount.Value--; + callback?.Invoke(user); RoomUpdated?.Invoke(); }, false);