diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs
index e8ee9fe012..116349c71e 100644
--- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs
@@ -49,11 +49,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("start players silently", () =>
{
- Client.CurrentMatchPlayingUserIds.Add(PLAYER_1_ID);
- Client.CurrentMatchPlayingUserIds.Add(PLAYER_2_ID);
-
- OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_1_ID });
- OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_2_ID });
+ OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_1_ID }, true);
+ OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_2_ID }, true);
playingUserIds.Add(PLAYER_1_ID);
playingUserIds.Add(PLAYER_2_ID);
@@ -87,16 +84,13 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("start players", () =>
{
- Client.CurrentMatchPlayingUserIds.Add(PLAYER_1_ID);
- Client.CurrentMatchPlayingUserIds.Add(PLAYER_2_ID);
-
- var player1 = OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_1_ID });
+ var player1 = OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_1_ID }, true);
player1.MatchState = new TeamVersusUserState
{
TeamID = 0,
};
- var player2 = OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_2_ID });
+ var player2 = OnlinePlayDependencies.Client.AddUser(new User { Id = PLAYER_2_ID }, true);
player2.MatchState = new TeamVersusUserState
{
TeamID = 1,
@@ -305,8 +299,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
foreach (int id in userIds)
{
- Client.CurrentMatchPlayingUserIds.Add(id);
- OnlinePlayDependencies.Client.AddUser(new User { Id = id });
+ OnlinePlayDependencies.Client.AddUser(new User { Id = id }, true);
SpectatorClient.StartPlay(id, beatmapId ?? importedBeatmapId);
playingUserIds.Add(id);
diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboard.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboard.cs
index 0aa47f0899..8121492a0b 100644
--- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboard.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboard.cs
@@ -56,12 +56,9 @@ namespace osu.Game.Tests.Visual.Multiplayer
foreach (var user in users)
{
SpectatorClient.StartPlay(user, Beatmap.Value.BeatmapInfo.OnlineBeatmapID ?? 0);
- OnlinePlayDependencies.Client.AddUser(new User { Id = user });
+ OnlinePlayDependencies.Client.AddUser(new User { Id = user }, true);
}
- // Todo: This is REALLY bad.
- Client.CurrentMatchPlayingUserIds.AddRange(users);
-
Children = new Drawable[]
{
scoreProcessor = new OsuScoreProcessor(),
diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs
index 8eaa63a166..d363c6eed4 100644
--- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs
@@ -60,7 +60,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
foreach (var user in users)
{
SpectatorClient.StartPlay(user, Beatmap.Value.BeatmapInfo.OnlineBeatmapID ?? 0);
- var roomUser = OnlinePlayDependencies.Client.AddUser(new User { Id = user });
+ var roomUser = OnlinePlayDependencies.Client.AddUser(new User { Id = user }, true);
roomUser.MatchState = new TeamVersusUserState
{
@@ -68,9 +68,6 @@ namespace osu.Game.Tests.Visual.Multiplayer
};
}
- // Todo: This is REALLY bad.
- Client.CurrentMatchPlayingUserIds.AddRange(users);
-
Children = new Drawable[]
{
scoreProcessor = new OsuScoreProcessor(),
diff --git a/osu.Game/Online/Multiplayer/MultiplayerClient.cs b/osu.Game/Online/Multiplayer/MultiplayerClient.cs
index bffb2d341a..14beb38cde 100644
--- a/osu.Game/Online/Multiplayer/MultiplayerClient.cs
+++ b/osu.Game/Online/Multiplayer/MultiplayerClient.cs
@@ -62,7 +62,9 @@ namespace osu.Game.Online.Multiplayer
///
/// The users in the joined which are participating in the current gameplay loop.
///
- public readonly BindableList CurrentMatchPlayingUserIds = new BindableList();
+ public IBindableList CurrentMatchPlayingUserIds => PlayingUserIds;
+
+ protected readonly BindableList PlayingUserIds = new BindableList();
public readonly Bindable CurrentMatchPlayingItem = new Bindable();
@@ -179,7 +181,7 @@ namespace osu.Game.Online.Multiplayer
{
APIRoom = null;
Room = null;
- CurrentMatchPlayingUserIds.Clear();
+ PlayingUserIds.Clear();
RoomUpdated?.Invoke();
});
@@ -376,7 +378,7 @@ namespace osu.Game.Online.Multiplayer
return;
Room.Users.Remove(user);
- CurrentMatchPlayingUserIds.Remove(user.UserID);
+ PlayingUserIds.Remove(user.UserID);
RoomUpdated?.Invoke();
}, false);
@@ -659,16 +661,16 @@ namespace osu.Game.Online.Multiplayer
/// The new state of the user.
private void updateUserPlayingState(int userId, MultiplayerUserState state)
{
- bool wasPlaying = CurrentMatchPlayingUserIds.Contains(userId);
+ bool wasPlaying = PlayingUserIds.Contains(userId);
bool isPlaying = state >= MultiplayerUserState.WaitingForLoad && state <= MultiplayerUserState.FinishedPlay;
if (isPlaying == wasPlaying)
return;
if (isPlaying)
- CurrentMatchPlayingUserIds.Add(userId);
+ PlayingUserIds.Add(userId);
else
- CurrentMatchPlayingUserIds.Remove(userId);
+ PlayingUserIds.Remove(userId);
}
private Task scheduleAsync(Action action, CancellationToken cancellationToken = default)
diff --git a/osu.Game/Screens/Play/HUD/MultiplayerGameplayLeaderboard.cs b/osu.Game/Screens/Play/HUD/MultiplayerGameplayLeaderboard.cs
index 2895d0cb5c..4968dc0706 100644
--- a/osu.Game/Screens/Play/HUD/MultiplayerGameplayLeaderboard.cs
+++ b/osu.Game/Screens/Play/HUD/MultiplayerGameplayLeaderboard.cs
@@ -41,7 +41,7 @@ namespace osu.Game.Screens.Play.HUD
private UserLookupCache userLookupCache { get; set; }
private readonly ScoreProcessor scoreProcessor;
- private readonly BindableList playingUsers;
+ private readonly IBindableList playingUsers;
private Bindable scoringMode;
private bool hasTeams => TeamScores.Count > 0;
diff --git a/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs b/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs
index db491aac25..cffaea5c94 100644
--- a/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs
+++ b/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs
@@ -50,10 +50,14 @@ namespace osu.Game.Tests.Visual.Multiplayer
public void Disconnect() => isConnected.Value = false;
- public MultiplayerRoomUser AddUser(User user)
+ public MultiplayerRoomUser AddUser(User user, bool markAsPlaying = false)
{
var roomUser = new MultiplayerRoomUser(user.Id) { User = user };
((IMultiplayerClient)this).UserJoined(roomUser);
+
+ if (markAsPlaying)
+ PlayingUserIds.Add(user.Id);
+
return roomUser;
}