// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Game.Online.API; using osu.Game.Online.Rooms; using osu.Game.Scoring; namespace osu.Game.Screens.Play { /// /// A player instance which submits to a room backing. This is generally used by playlists and multiplayer. /// public abstract class RoomSubmittingPlayer : SubmittingPlayer { [Resolved(typeof(Room), nameof(Room.RoomID))] protected Bindable RoomId { get; private set; } protected readonly PlaylistItem PlaylistItem; protected RoomSubmittingPlayer(PlaylistItem playlistItem, PlayerConfiguration configuration = null) : base(configuration) { PlaylistItem = playlistItem; } protected override APIRequest CreateTokenRequest() { if (!(RoomId.Value is long roomId)) return null; return new CreateRoomScoreRequest(roomId, PlaylistItem.ID, Game.VersionHash); } protected override APIRequest CreateSubmissionRequest(Score score, long token) => new SubmitRoomScoreRequest(token, RoomId.Value ?? 0, PlaylistItem.ID, score.ScoreInfo); } }