From dd0c04ea366ff94b72a6d562c759960bb733d631 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 22 Dec 2018 12:45:36 +0900 Subject: [PATCH] Move RoomManager to multiplayer screen --- osu.Game/Screens/Multi/Lounge/LoungeScreen.cs | 27 ++++++++++++++----- osu.Game/Screens/Multi/Multiplayer.cs | 6 ++++- osu.Game/Screens/Multi/RoomManager.cs | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/osu.Game/Screens/Multi/Lounge/LoungeScreen.cs b/osu.Game/Screens/Multi/Lounge/LoungeScreen.cs index 562dfaa347..a6d4d845e0 100644 --- a/osu.Game/Screens/Multi/Lounge/LoungeScreen.cs +++ b/osu.Game/Screens/Multi/Lounge/LoungeScreen.cs @@ -22,8 +22,8 @@ public class LoungeScreen : MultiplayerScreen private readonly RoomsContainer rooms; private readonly Action pushGameplayScreen; - [Cached] - private readonly RoomManager manager; + [Resolved] + private RoomManager roomManager { get; set; } public override string Title => "Lounge"; @@ -56,7 +56,7 @@ public LoungeScreen(Action pushGameplayScreen) { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, - Child = rooms = new RoomsContainer { JoinRequested = r => manager?.JoinRoom(r) } + Child = rooms = new RoomsContainer { JoinRequested = r => roomManager?.JoinRoom(r) } }, }, inspector = new RoomInspector @@ -68,7 +68,6 @@ public LoungeScreen(Action pushGameplayScreen) }, }, }, - manager = new RoomManager { OpenRequested = Open } }; inspector.Room.BindTo(rooms.SelectedRoom); @@ -78,6 +77,12 @@ public LoungeScreen(Action pushGameplayScreen) Filter.Search.Exit += Exit; } + [BackgroundDependencyLoader] + private void load() + { + roomManager.OpenRequested += Open; + } + protected override void UpdateAfterChildren() { base.UpdateAfterChildren(); @@ -103,7 +108,7 @@ protected override void OnEntering(Screen last) protected override bool OnExiting(Screen next) { - manager?.PartRoom(); + roomManager?.PartRoom(); Filter.Search.HoldFocus = false; return base.OnExiting(next); @@ -111,7 +116,7 @@ protected override bool OnExiting(Screen next) protected override void OnResuming(Screen last) { - manager?.PartRoom(); + roomManager?.PartRoom(); base.OnResuming(last); } @@ -125,7 +130,7 @@ protected override void OnSuspending(Screen next) private void filterRooms() { rooms.Filter(Filter.CreateCriteria()); - manager.Filter(Filter.CreateCriteria()); + roomManager.Filter(Filter.CreateCriteria()); } public void Open(Room room) @@ -136,5 +141,13 @@ public void Open(Room room) Push(new MatchScreen(room, s => pushGameplayScreen?.Invoke(s))); } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (roomManager != null) + roomManager.OpenRequested -= Open; + } } } diff --git a/osu.Game/Screens/Multi/Multiplayer.cs b/osu.Game/Screens/Multi/Multiplayer.cs index 9339c6693f..116d4137d5 100644 --- a/osu.Game/Screens/Multi/Multiplayer.cs +++ b/osu.Game/Screens/Multi/Multiplayer.cs @@ -31,6 +31,9 @@ public class Multiplayer : OsuScreen private OsuScreen currentScreen; + [Cached] + private RoomManager roomManager; + public Multiplayer() { Child = waves = new MultiplayerWaveContainer @@ -80,7 +83,8 @@ public Multiplayer() }, Text = "Create room", Action = () => loungeScreen.Open(new Room()) - } + }, + roomManager = new RoomManager() }); screenAdded(loungeScreen); diff --git a/osu.Game/Screens/Multi/RoomManager.cs b/osu.Game/Screens/Multi/RoomManager.cs index b3bb9cb147..dbc0fd3491 100644 --- a/osu.Game/Screens/Multi/RoomManager.cs +++ b/osu.Game/Screens/Multi/RoomManager.cs @@ -23,7 +23,7 @@ namespace osu.Game.Screens.Multi { public class RoomManager : PollingComponent { - public Action OpenRequested; + public event Action OpenRequested; public IBindableCollection Rooms => rooms; private readonly BindableCollection rooms = new BindableCollection();