1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 17:07:38 +08:00

Fix creating a new room re-using the existing model

This commit is contained in:
smoogipoo 2018-12-04 15:25:41 +09:00
parent e22cefc27d
commit d8739d9dee
4 changed files with 40 additions and 15 deletions

View File

@ -105,7 +105,7 @@ namespace osu.Game.Tests.Visual
set => TypePicker.Current.Value = value; set => TypePicker.Current.Value = value;
} }
public TestRoomSettingsOverlay(Room room) : base(room) public TestRoomSettingsOverlay(Room room) : base()
{ {
} }

View File

@ -27,11 +27,6 @@ namespace osu.Game.Screens.Multi.Components
/// </summary> /// </summary>
public Action Applied; public Action Applied;
/// <summary>
/// The room which settings are being applied to.
/// </summary>
public readonly Room Room;
private readonly Bindable<string> nameBind = new Bindable<string>(); private readonly Bindable<string> nameBind = new Bindable<string>();
private readonly Bindable<RoomAvailability> availabilityBind = new Bindable<RoomAvailability>(); private readonly Bindable<RoomAvailability> availabilityBind = new Bindable<RoomAvailability>();
private readonly Bindable<GameType> typeBind = new Bindable<GameType>(); private readonly Bindable<GameType> typeBind = new Bindable<GameType>();
@ -45,10 +40,8 @@ namespace osu.Game.Screens.Multi.Components
protected readonly GameTypePicker TypePicker; protected readonly GameTypePicker TypePicker;
protected readonly TriangleButton ApplyButton; protected readonly TriangleButton ApplyButton;
public RoomSettingsOverlay(Room room) public RoomSettingsOverlay()
{ {
Room = room;
Masking = true; Masking = true;
Child = content = new Container Child = content = new Container
@ -156,10 +149,7 @@ namespace osu.Game.Screens.Multi.Components
typeBind.ValueChanged += t => TypePicker.Current.Value = t; typeBind.ValueChanged += t => TypePicker.Current.Value = t;
maxParticipantsBind.ValueChanged += m => MaxParticipantsField.Text = m?.ToString(); maxParticipantsBind.ValueChanged += m => MaxParticipantsField.Text = m?.ToString();
nameBind.BindTo(room.Name); Room = new Room();
availabilityBind.BindTo(room.Availability);
typeBind.BindTo(room.Type);
maxParticipantsBind.BindTo(room.MaxParticipants);
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
@ -168,6 +158,36 @@ namespace osu.Game.Screens.Multi.Components
typeLabel.Colour = colours.Yellow; typeLabel.Colour = colours.Yellow;
} }
private Room room;
/// <summary>
/// The room which settings are being applied to.
/// </summary>
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() protected override void PopIn()
{ {
// reapply the rooms values if the overlay was completely closed // reapply the rooms values if the overlay was completely closed

View File

@ -71,10 +71,11 @@ namespace osu.Game.Screens.Multi.Screens.Lounge
new Container new Container
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Child = settings = new RoomSettingsOverlay(new Room()) Child = settings = new RoomSettingsOverlay
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Height = 0.9f, Height = 0.9f,
Room = new Room()
}, },
}, },
}, },
@ -153,6 +154,9 @@ namespace osu.Game.Screens.Multi.Screens.Lounge
protected override void OnResuming(Screen last) protected override void OnResuming(Screen last)
{ {
base.OnResuming(last); base.OnResuming(last);
settings.Room = new Room();
Filter.Search.HoldFocus = true; Filter.Search.HoldFocus = true;
} }

View File

@ -57,10 +57,11 @@ namespace osu.Game.Screens.Multi.Screens.Match
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Padding = new MarginPadding { Top = Header.HEIGHT }, Padding = new MarginPadding { Top = Header.HEIGHT },
Child = settings = new RoomSettingsOverlay(room) Child = settings = new RoomSettingsOverlay
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Height = 0.9f, Height = 0.9f,
Room = room
}, },
}, },
}; };