From d8739d9dee1f0cb3e42608c0a98d7459e9958c45 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 4 Dec 2018 15:25:41 +0900 Subject: [PATCH] Fix creating a new room re-using the existing model --- osu.Game.Tests/Visual/TestCaseRoomSettings.cs | 2 +- .../Multi/Components/RoomSettingsOverlay.cs | 44 ++++++++++++++----- .../Screens/Multi/Screens/Lounge/Lounge.cs | 6 ++- osu.Game/Screens/Multi/Screens/Match/Match.cs | 3 +- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseRoomSettings.cs b/osu.Game.Tests/Visual/TestCaseRoomSettings.cs index 55e3df679d..83e589b260 100644 --- a/osu.Game.Tests/Visual/TestCaseRoomSettings.cs +++ b/osu.Game.Tests/Visual/TestCaseRoomSettings.cs @@ -105,7 +105,7 @@ namespace osu.Game.Tests.Visual set => TypePicker.Current.Value = value; } - public TestRoomSettingsOverlay(Room room) : base(room) + public TestRoomSettingsOverlay(Room room) : base() { } diff --git a/osu.Game/Screens/Multi/Components/RoomSettingsOverlay.cs b/osu.Game/Screens/Multi/Components/RoomSettingsOverlay.cs index b3d7937433..896017b219 100644 --- a/osu.Game/Screens/Multi/Components/RoomSettingsOverlay.cs +++ b/osu.Game/Screens/Multi/Components/RoomSettingsOverlay.cs @@ -27,11 +27,6 @@ namespace osu.Game.Screens.Multi.Components /// public Action Applied; - /// - /// The room which settings are being applied to. - /// - public readonly Room Room; - private readonly Bindable nameBind = new Bindable(); private readonly Bindable availabilityBind = new Bindable(); private readonly Bindable typeBind = new Bindable(); @@ -45,10 +40,8 @@ namespace osu.Game.Screens.Multi.Components protected readonly GameTypePicker TypePicker; protected readonly TriangleButton ApplyButton; - public RoomSettingsOverlay(Room room) + public RoomSettingsOverlay() { - Room = room; - Masking = true; Child = content = new Container @@ -156,10 +149,7 @@ namespace osu.Game.Screens.Multi.Components typeBind.ValueChanged += t => TypePicker.Current.Value = t; maxParticipantsBind.ValueChanged += m => MaxParticipantsField.Text = m?.ToString(); - nameBind.BindTo(room.Name); - availabilityBind.BindTo(room.Availability); - typeBind.BindTo(room.Type); - maxParticipantsBind.BindTo(room.MaxParticipants); + Room = new Room(); } [BackgroundDependencyLoader] @@ -168,6 +158,36 @@ namespace osu.Game.Screens.Multi.Components typeLabel.Colour = colours.Yellow; } + private Room room; + + /// + /// The room which settings are being applied to. + /// + public Room Room + { + get => room; + set + { + if (room == value) + return; + + room = value; + + nameBind.UnbindBindings(); + availabilityBind.UnbindBindings(); + typeBind.UnbindBindings(); + maxParticipantsBind.UnbindBindings(); + + if (room != null) + { + nameBind.BindTo(room.Name); + availabilityBind.BindTo(room.Availability); + typeBind.BindTo(room.Type); + maxParticipantsBind.BindTo(room.MaxParticipants); + } + } + } + protected override void PopIn() { // reapply the rooms values if the overlay was completely closed diff --git a/osu.Game/Screens/Multi/Screens/Lounge/Lounge.cs b/osu.Game/Screens/Multi/Screens/Lounge/Lounge.cs index 96728c01f9..475490e399 100644 --- a/osu.Game/Screens/Multi/Screens/Lounge/Lounge.cs +++ b/osu.Game/Screens/Multi/Screens/Lounge/Lounge.cs @@ -71,10 +71,11 @@ namespace osu.Game.Screens.Multi.Screens.Lounge new Container { RelativeSizeAxes = Axes.Both, - Child = settings = new RoomSettingsOverlay(new Room()) + Child = settings = new RoomSettingsOverlay { RelativeSizeAxes = Axes.Both, Height = 0.9f, + Room = new Room() }, }, }, @@ -153,6 +154,9 @@ namespace osu.Game.Screens.Multi.Screens.Lounge protected override void OnResuming(Screen last) { base.OnResuming(last); + + settings.Room = new Room(); + Filter.Search.HoldFocus = true; } diff --git a/osu.Game/Screens/Multi/Screens/Match/Match.cs b/osu.Game/Screens/Multi/Screens/Match/Match.cs index 339db2e158..f0f7a1dd6b 100644 --- a/osu.Game/Screens/Multi/Screens/Match/Match.cs +++ b/osu.Game/Screens/Multi/Screens/Match/Match.cs @@ -57,10 +57,11 @@ namespace osu.Game.Screens.Multi.Screens.Match { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Top = Header.HEIGHT }, - Child = settings = new RoomSettingsOverlay(room) + Child = settings = new RoomSettingsOverlay { RelativeSizeAxes = Axes.Both, Height = 0.9f, + Room = room }, }, };