// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; using osu.Game.Online.Multiplayer; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Users; namespace osu.Game.Screens.Multi { public class MultiplayerComposite : CompositeDrawable { [Resolved] protected Room Room { get; private set; } [Resolved(typeof(Room))] protected Bindable RoomID { get; private set; } [Resolved(typeof(Room))] protected Bindable Name { get; private set; } [Resolved(typeof(Room))] protected Bindable Host { get; private set; } [Resolved(typeof(Room))] protected Bindable Status { get; private set; } [Resolved(typeof(Room))] protected Bindable Type { get; private set; } [Resolved(typeof(Room))] protected BindableList Playlist { get; private set; } [Resolved(typeof(Room))] protected Bindable> Participants { get; private set; } [Resolved(typeof(Room))] protected Bindable ParticipantCount { get; private set; } [Resolved(typeof(Room))] protected Bindable MaxParticipants { get; private set; } [Resolved(typeof(Room))] protected Bindable EndDate { get; private set; } [Resolved(typeof(Room))] protected Bindable Availability { get; private set; } [Resolved(typeof(Room))] protected Bindable Duration { get; private set; } private readonly Bindable currentBeatmap = new Bindable(); protected IBindable CurrentBeatmap => currentBeatmap; private readonly Bindable> currentMods = new Bindable>(); protected IBindable> CurrentMods => currentMods; private readonly Bindable currentRuleset = new Bindable(); protected IBindable CurrentRuleset => currentRuleset; protected override void LoadComplete() { base.LoadComplete(); Playlist.ItemsAdded += _ => updatePlaylist(); Playlist.ItemsRemoved += _ => updatePlaylist(); updatePlaylist(); } private void updatePlaylist() { // Todo: We only ever have one playlist item for now. In the future, this will be user-settable var playlistItem = Playlist.FirstOrDefault(); currentBeatmap.Value = playlistItem?.Beatmap; currentMods.Value = playlistItem?.RequiredMods ?? Enumerable.Empty(); currentRuleset.Value = playlistItem?.Ruleset; } } }