Add processing overlay to lounge screen

This commit is contained in:
smoogipoo
2018-12-26 21:10:31 +09:00
parent 0c384417f1
commit 152f3b1da3
6 changed files with 49 additions and 47 deletions

View File

@ -7,6 +7,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Input.Events;
using osu.Framework.Screens;
using osu.Game.Graphics.UserInterface;
using osu.Game.Online.Multiplayer;
using osu.Game.Overlays.SearchableList;
using osu.Game.Screens.Multi.Lounge.Components;
@ -21,6 +22,7 @@ namespace osu.Game.Screens.Multi.Lounge
private readonly Container content;
private readonly RoomsContainer rooms;
private readonly Action<Screen> pushGameplayScreen;
private readonly ProcessingOverlay processingOverlay;
[Resolved(CanBeNull = true)]
private IRoomManager roomManager { get; set; }
@ -43,18 +45,26 @@ namespace osu.Game.Screens.Multi.Lounge
RelativeSizeAxes = Axes.Both,
Children = new Drawable[]
{
new ScrollContainer
new Container
{
RelativeSizeAxes = Axes.Both,
Width = 0.55f,
ScrollbarOverlapsContent = false,
Padding = new MarginPadding(10),
Child = new SearchContainer
Children = new Drawable[]
{
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Child = rooms = new RoomsContainer { JoinRequested = r => roomManager?.JoinRoom(r) }
},
new ScrollContainer
{
RelativeSizeAxes = Axes.Both,
ScrollbarOverlapsContent = false,
Padding = new MarginPadding(10),
Child = new SearchContainer
{
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Child = rooms = new RoomsContainer { JoinRequested = joinRequested }
},
},
processingOverlay = new ProcessingOverlay { Alpha = 0 }
}
},
inspector = new RoomInspector
{
@ -74,13 +84,6 @@ namespace osu.Game.Screens.Multi.Lounge
Filter.Search.Exit += Exit;
}
[BackgroundDependencyLoader]
private void load()
{
if (roomManager != null)
roomManager.RoomJoined += Push;
}
protected override void UpdateAfterChildren()
{
base.UpdateAfterChildren();
@ -123,6 +126,16 @@ namespace osu.Game.Screens.Multi.Lounge
roomManager?.Filter(Filter.CreateCriteria());
}
private void joinRequested(Room room)
{
processingOverlay.Show();
roomManager?.JoinRoom(room, r =>
{
Open(room);
processingOverlay.Hide();
}, _ => processingOverlay.Hide());
}
/// <summary>
/// Push a room as a new subscreen.
/// </summary>
@ -134,13 +147,5 @@ namespace osu.Game.Screens.Multi.Lounge
Push(new MatchSubScreen(room, s => pushGameplayScreen?.Invoke(s)));
}
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);
if (roomManager != null)
roomManager.RoomJoined -= Push;
}
}
}