1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-06 21:02:59 +08:00

Make RoomsContainer/DrawableRoom not resolve via DI

This commit is contained in:
smoogipoo 2021-08-19 16:49:08 +09:00
parent 3a1154c00e
commit 00be7f4cca
5 changed files with 30 additions and 31 deletions

View File

@ -24,12 +24,11 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
public class TestSceneDrawableRoom : OsuTestScene public class TestSceneDrawableRoom : OsuTestScene
{ {
[Cached]
private readonly Bindable<Room> selectedRoom = new Bindable<Room>();
[Cached] [Cached]
protected readonly OverlayColourProvider ColourProvider = new OverlayColourProvider(OverlayColourScheme.Plum); protected readonly OverlayColourProvider ColourProvider = new OverlayColourProvider(OverlayColourScheme.Plum);
private readonly Bindable<Room> selectedRoom = new Bindable<Room>();
[Test] [Test]
public void TestMultipleStatuses() public void TestMultipleStatuses()
{ {
@ -153,7 +152,11 @@ namespace osu.Game.Tests.Visual.Multiplayer
})); }));
} }
return new DrawableLoungeRoom(room) { MatchingFilter = true }; return new DrawableLoungeRoom(room)
{
MatchingFilter = true,
SelectedRoom = { BindTarget = selectedRoom }
};
} }
} }
} }

View File

@ -30,6 +30,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Width = 0.5f, Width = 0.5f,
SelectedRoom = { BindTarget = SelectedRoom }
}; };
}); });

View File

@ -23,16 +23,13 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
{ {
public class RoomsContainer : CompositeDrawable, IKeyBindingHandler<GlobalAction> public class RoomsContainer : CompositeDrawable, IKeyBindingHandler<GlobalAction>
{ {
private readonly IBindableList<Room> rooms = new BindableList<Room>(); public readonly Bindable<Room> SelectedRoom = new Bindable<Room>();
public readonly Bindable<FilterCriteria> Filter = new Bindable<FilterCriteria>();
private readonly FillFlowContainer<DrawableLoungeRoom> roomFlow;
public IReadOnlyList<DrawableRoom> Rooms => roomFlow.FlowingChildren.Cast<DrawableRoom>().ToArray(); public IReadOnlyList<DrawableRoom> Rooms => roomFlow.FlowingChildren.Cast<DrawableRoom>().ToArray();
public readonly Bindable<FilterCriteria> Filter = new Bindable<FilterCriteria>(); private readonly IBindableList<Room> rooms = new BindableList<Room>();
private readonly FillFlowContainer<DrawableLoungeRoom> roomFlow;
[Resolved]
private Bindable<Room> selectedRoom { get; set; }
[Resolved] [Resolved]
private IRoomManager roomManager { get; set; } private IRoomManager roomManager { get; set; }
@ -112,9 +109,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
private void addRooms(IEnumerable<Room> rooms) private void addRooms(IEnumerable<Room> rooms)
{ {
foreach (var room in rooms) foreach (var room in rooms)
{ roomFlow.Add(new DrawableLoungeRoom(room) { SelectedRoom = { BindTarget = SelectedRoom } });
roomFlow.Add(new DrawableLoungeRoom(room));
}
applyFilterCriteria(Filter?.Value); applyFilterCriteria(Filter?.Value);
} }
@ -126,8 +121,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
roomFlow.RemoveAll(d => d.Room == r); roomFlow.RemoveAll(d => d.Room == r);
// selection may have a lease due to being in a sub screen. // selection may have a lease due to being in a sub screen.
if (!selectedRoom.Disabled) if (!SelectedRoom.Disabled)
selectedRoom.Value = null; SelectedRoom.Value = null;
} }
} }
@ -139,8 +134,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
protected override bool OnClick(ClickEvent e) protected override bool OnClick(ClickEvent e)
{ {
if (!selectedRoom.Disabled) if (!SelectedRoom.Disabled)
selectedRoom.Value = null; SelectedRoom.Value = null;
return base.OnClick(e); return base.OnClick(e);
} }
@ -202,26 +197,26 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
private void selectNext(int direction) private void selectNext(int direction)
{ {
if (selectedRoom.Disabled) if (SelectedRoom.Disabled)
return; return;
var visibleRooms = Rooms.AsEnumerable().Where(r => r.IsPresent); var visibleRooms = Rooms.AsEnumerable().Where(r => r.IsPresent);
Room room; Room room;
if (selectedRoom.Value == null) if (SelectedRoom.Value == null)
room = visibleRooms.FirstOrDefault()?.Room; room = visibleRooms.FirstOrDefault()?.Room;
else else
{ {
if (direction < 0) if (direction < 0)
visibleRooms = visibleRooms.Reverse(); visibleRooms = visibleRooms.Reverse();
room = visibleRooms.SkipWhile(r => r.Room != selectedRoom.Value).Skip(1).FirstOrDefault()?.Room; room = visibleRooms.SkipWhile(r => r.Room != SelectedRoom.Value).Skip(1).FirstOrDefault()?.Room;
} }
// we already have a valid selection only change selection if we still have a room to switch to. // we already have a valid selection only change selection if we still have a room to switch to.
if (room != null) if (room != null)
selectedRoom.Value = room; SelectedRoom.Value = room;
} }
#endregion #endregion

View File

@ -34,11 +34,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
private const float transition_duration = 60; private const float transition_duration = 60;
private const float selection_border_width = 4; private const float selection_border_width = 4;
[Resolved(canBeNull: true)] public readonly Bindable<Room> SelectedRoom = new Bindable<Room>();
private LoungeSubScreen lounge { get; set; }
[Resolved(canBeNull: true)] [Resolved(canBeNull: true)]
private Bindable<Room> selectedRoom { get; set; } private LoungeSubScreen lounge { get; set; }
private Sample sampleSelect; private Sample sampleSelect;
private Sample sampleJoin; private Sample sampleJoin;
@ -89,7 +88,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
else else
Alpha = 0; Alpha = 0;
selectedRoom.BindValueChanged(updateSelectedRoom, true); SelectedRoom.BindValueChanged(updateSelectedRoom, true);
} }
private void updateSelectedRoom(ValueChangedEvent<Room> selected) private void updateSelectedRoom(ValueChangedEvent<Room> selected)
@ -135,7 +134,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
public bool OnPressed(GlobalAction action) public bool OnPressed(GlobalAction action)
{ {
if (selectedRoom.Value != Room) if (SelectedRoom.Value != Room)
return false; return false;
switch (action) switch (action)
@ -152,14 +151,14 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
{ {
} }
protected override bool ShouldBeConsideredForInput(Drawable child) => selectedRoom.Value == Room || child is HoverSounds; protected override bool ShouldBeConsideredForInput(Drawable child) => SelectedRoom.Value == Room || child is HoverSounds;
protected override bool OnClick(ClickEvent e) protected override bool OnClick(ClickEvent e)
{ {
if (Room != selectedRoom.Value) if (Room != SelectedRoom.Value)
{ {
sampleSelect?.Play(); sampleSelect?.Play();
selectedRoom.Value = Room; SelectedRoom.Value = Room;
return true; return true;
} }

View File

@ -159,7 +159,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
ScrollbarOverlapsContent = false, ScrollbarOverlapsContent = false,
Child = roomsContainer = new RoomsContainer Child = roomsContainer = new RoomsContainer
{ {
Filter = { BindTarget = filter } Filter = { BindTarget = filter },
SelectedRoom = { BindTarget = selectedRoom }
} }
}, },
} }