// 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] public Room Room { get; private set; } [Resolved(typeof(Room))] public Bindable RoomID { get; private set; } [Resolved(typeof(Room))] public Bindable Name { get; private set; } [Resolved(typeof(Room))] public Bindable Host { get; private set; } [Resolved(typeof(Room))] public Bindable Status { get; private set; } [Resolved(typeof(Room))] public Bindable Type { get; private set; } [Resolved(typeof(Room))] public BindableList Playlist { get; private set; } [Resolved(typeof(Room))] public Bindable> Participants { get; private set; } [Resolved(typeof(Room))] public Bindable ParticipantCount { get; private set; } [Resolved(typeof(Room))] public Bindable MaxParticipants { get; private set; } [Resolved(typeof(Room))] public Bindable EndDate { get; private set; } [Resolved(typeof(Room))] public Bindable Availability { get; private set; } [Resolved(typeof(Room))] public Bindable Duration { get; private set; } private readonly Bindable currentBeatmap = new Bindable(); public IBindable CurrentBeatmap => currentBeatmap; private readonly Bindable> currentMods = new Bindable>(); public IBindable> CurrentMods => currentMods; private readonly Bindable currentRuleset = new Bindable(); public 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; } } }