diff --git a/osu.Game/Screens/Multi/Screens/Match/Match.cs b/osu.Game/Screens/Multi/Screens/Match/Match.cs index f444cb4073..40590a6982 100644 --- a/osu.Game/Screens/Multi/Screens/Match/Match.cs +++ b/osu.Game/Screens/Multi/Screens/Match/Match.cs @@ -32,8 +32,6 @@ namespace osu.Game.Screens.Multi.Screens.Match public override string ShortTitle => "room"; - private readonly Header header; - [Cached] private readonly Room room; @@ -55,6 +53,7 @@ namespace osu.Game.Screens.Multi.Screens.Match participantsBind.BindTo(room.Participants); maxParticipantsBind.BindTo(room.MaxParticipants); + Header header; RoomSettingsOverlay settings; Info info; @@ -81,8 +80,6 @@ namespace osu.Game.Screens.Multi.Screens.Match { RelativeSizeAxes = Axes.Both, Height = 0.9f, - Room = room, - ReadOnly = true }, }, }; @@ -98,14 +95,6 @@ namespace osu.Game.Screens.Multi.Screens.Match settings.Hide(); }; - settings.StateChanged += s => - { - if (s == Visibility.Hidden) - header.Tabs.Current.Value = new RoomMatchPage(); - }; - - settings.Applied = () => settings.Hide(); - info.Beatmap.BindTo(beatmapBind); info.Name.BindTo(nameBind); info.Status.BindTo(statusBind); diff --git a/osu.Game/Screens/Multi/Screens/Match/RoomSettingsOverlay.cs b/osu.Game/Screens/Multi/Screens/Match/RoomSettingsOverlay.cs index 7fba56b2d3..747c109e3f 100644 --- a/osu.Game/Screens/Multi/Screens/Match/RoomSettingsOverlay.cs +++ b/osu.Game/Screens/Multi/Screens/Match/RoomSettingsOverlay.cs @@ -1,12 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; @@ -23,15 +23,12 @@ namespace osu.Game.Screens.Multi.Screens.Match private const float transition_duration = 350; private const float field_padding = 45; - /// - /// Invoked when room settings were applied. - /// - public Action Applied; - private readonly Bindable nameBind = new Bindable(); + private readonly Bindable beatmapBind = new Bindable(); private readonly Bindable availabilityBind = new Bindable(); private readonly Bindable typeBind = new Bindable(); private readonly Bindable maxParticipantsBind = new Bindable(); + private readonly Bindable createdBind = new Bindable(); private readonly Container content; @@ -43,6 +40,9 @@ namespace osu.Game.Screens.Multi.Screens.Match protected readonly TriangleButton ApplyButton; protected readonly OsuPasswordTextBox PasswordField; + [Resolved] + private Room room { get; set; } + public RoomSettingsOverlay() { Masking = true; @@ -151,69 +151,35 @@ namespace osu.Game.Screens.Multi.Screens.Match availabilityBind.ValueChanged += a => AvailabilityPicker.Current.Value = a; typeBind.ValueChanged += t => TypePicker.Current.Value = t; maxParticipantsBind.ValueChanged += m => MaxParticipantsField.Text = m?.ToString(); - - Room = new Room(); } [BackgroundDependencyLoader] private void load(OsuColour colours) { typeLabel.Colour = colours.Yellow; + + nameBind.BindTo(room.Name); + beatmapBind.BindTo(room.Beatmap); + availabilityBind.BindTo(room.Availability); + typeBind.BindTo(room.Type); + maxParticipantsBind.BindTo(room.MaxParticipants); + createdBind.BindTo(room.Created); + + MaxParticipantsField.ReadOnly = true; + PasswordField.ReadOnly = true; + AvailabilityPicker.ReadOnly.Value = true; + TypePicker.ReadOnly.Value = true; + ApplyButton.Enabled.Value = false; } - private bool readOnly; - - public bool ReadOnly + protected override void Update() { - get => readOnly; - set - { - if (readOnly == value) - return; - readOnly = value; + base.Update(); - NameField.ReadOnly = value; - MaxParticipantsField.ReadOnly = value; - PasswordField.ReadOnly = value; - AvailabilityPicker.ReadOnly.Value = value; - TypePicker.ReadOnly.Value = value; - ApplyButton.Enabled.Value = !value; - } + ApplyButton.Enabled.Value = hasValidSettings; } - - private Room room; - - /// - /// The room which settings are being applied to. - /// - public virtual Room Room - { - get => room; - set - { - if (room == value) - return; - - if (room != null) - { - nameBind.UnbindFrom(room.Name); - availabilityBind.UnbindFrom(room.Availability); - typeBind.UnbindFrom(room.Type); - maxParticipantsBind.UnbindFrom(room.MaxParticipants); - } - - room = value; - - if (room != null) - { - nameBind.BindTo(room.Name); - availabilityBind.BindTo(room.Availability); - typeBind.BindTo(room.Type); - maxParticipantsBind.BindTo(room.MaxParticipants); - } - } - } + private bool hasValidSettings => NameField.Text.Length > 0 && beatmapBind.Value != null; protected override void PopIn() { @@ -245,7 +211,8 @@ namespace osu.Game.Screens.Multi.Screens.Match else maxParticipantsBind.Value = null; - Applied?.Invoke(); + // Todo: This should only be set after the room has been created server-side + createdBind.Value = true; } private class SettingsTextBox : OsuTextBox