1
0
mirror of https://github.com/ppy/osu.git synced 2026-06-13 12:34:41 +08:00
Files
osu-lazer/osu.Game/Online/Multiplayer/MatchRoomState.cs
T
Bartłomiej Dach 4671d1fe74 Add client-side support for slots in multiplayer rooms (#37741)
- Part of https://github.com/ppy/osu-server-spectator/issues/405

<img width="1624" height="900" alt="Screenshot 2026-05-13 at 12 40 07"
src="https://github.com/user-attachments/assets/a7f36d54-4cc6-49c9-8e89-ee0d049bb637"
/>
<img width="1624" height="900" alt="Screenshot 2026-05-13 at 12 31 40"
src="https://github.com/user-attachments/assets/0c054dfd-addd-4d00-bbca-119b4c3ec3cb"
/>

Will not work until relevant server-side support is in.

---

I was in two minds whether to PR this all at once or to PR only
https://github.com/ppy/osu/commit/693e4ef4b095042f7a171672224e10f9c4f47c1c
to begin with to unblock server-side implementation. In the end I opted
for one PR because usage informs the model, so I find everything else
relevant as part of review of the model design. If there are concerns
about this making it into a release without server-side support and
therefore things looking broken I will split the commit out on request.

I put in some effort to add relevant logic in test multiplayer client to
simulate the server side but I may well have missed something.

---------

Co-authored-by: Dean Herbert <pe@ppy.sh>
2026-05-21 20:01:34 +09:00

26 lines
939 B
C#

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System;
using MessagePack;
using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking;
using osu.Game.Online.Multiplayer.MatchTypes.RankedPlay;
using osu.Game.Online.Multiplayer.MatchTypes.TeamVersus;
namespace osu.Game.Online.Multiplayer
{
/// <summary>
/// Room-wide state for the current match type.
/// Can be used to contain any state which should be used before or during match gameplay.
/// </summary>
[Serializable]
[MessagePackObject]
[Union(0, typeof(TeamVersusRoomState))] // IMPORTANT: Add rules to SignalRUnionWorkaroundResolver for new derived types.
[Union(1, typeof(MatchmakingRoomState))]
[Union(2, typeof(RankedPlayRoomState))]
[Union(3, typeof(StandardMatchRoomState))]
public abstract class MatchRoomState
{
}
}