1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-15 12:42:54 +08:00

Enable spectating multiplayer matches

This commit is contained in:
smoogipoo 2021-04-09 21:03:45 +09:00
parent 3e46d6401e
commit 6eddc6c59e
3 changed files with 20 additions and 9 deletions
osu.Game
Online/Multiplayer
Screens/OnlinePlay

View File

@ -96,9 +96,6 @@ namespace osu.Game.Online.Multiplayer
if (!IsConnected.Value)
return Task.CompletedTask;
if (newState == MultiplayerUserState.Spectating)
return Task.CompletedTask; // Not supported yet.
return connection.InvokeAsync(nameof(IMultiplayerServer.ChangeState), newState);
}

View File

@ -148,10 +148,12 @@ namespace osu.Game.Screens.OnlinePlay.Match
return base.OnExiting(next);
}
protected void StartPlay(Func<Player> player)
protected void StartPlay(Func<Player> player) => PushTopLevelScreen(() => new PlayerLoader(player));
protected void PushTopLevelScreen(Func<Screen> screen)
{
sampleStart?.Play();
ParentScreen?.Push(new PlayerLoader(player));
ParentScreen?.Push(screen());
}
private void selectedItemChanged()

View File

@ -25,6 +25,7 @@ using osu.Game.Screens.OnlinePlay.Match;
using osu.Game.Screens.OnlinePlay.Match.Components;
using osu.Game.Screens.OnlinePlay.Multiplayer.Match;
using osu.Game.Screens.OnlinePlay.Multiplayer.Participants;
using osu.Game.Screens.OnlinePlay.Multiplayer.Spectate;
using osu.Game.Screens.Play.HUD;
using osu.Game.Users;
using osuTK;
@ -405,11 +406,22 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
}
}
private void onRoomUpdated()
private void onRoomUpdated() => Scheduler.Add(() =>
{
// user mods may have changed.
Scheduler.AddOnce(UpdateMods);
}
if (client.Room == null)
return;
Debug.Assert(client.LocalUser != null);
UpdateMods();
if (client.LocalUser.State == MultiplayerUserState.Spectating
&& (client.Room.State == MultiplayerRoomState.Playing || client.Room.State == MultiplayerRoomState.WaitingForLoad)
&& ParentScreen.IsCurrentScreen())
{
PushTopLevelScreen(() => new MultiplayerSpectator(client.CurrentMatchPlayingUserIds.ToArray()));
}
});
private void onLoadRequested()
{