1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-13 17:13:06 +08:00

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

@ -71,14 +71,14 @@ namespace osu.Game.Tests.Visual
private class TestRoomManager : IRoomManager
{
public event Action<Room> RoomJoined;
public readonly BindableCollection<Room> Rooms = new BindableCollection<Room>();
IBindableCollection<Room> IRoomManager.Rooms => Rooms;
public void CreateRoom(Room room, Action onSuccess = null, Action<string> onError = null) => Rooms.Add(room);
public void CreateRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null) => Rooms.Add(room);
public void JoinRoom(Room room) => RoomJoined?.Invoke(room);
public void JoinRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null)
{
}
public void PartRoom()
{

View File

@ -136,11 +136,9 @@ namespace osu.Game.Tests.Visual
public Func<Room, bool> CreateRequested;
public event Action<Room> RoomJoined;
public IBindableCollection<Room> Rooms { get; } = null;
public void CreateRoom(Room room, Action onSuccess = null, Action<string> onError = null)
public void CreateRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null)
{
if (CreateRequested == null)
return;
@ -148,10 +146,10 @@ namespace osu.Game.Tests.Visual
if (!CreateRequested.Invoke(room))
onError?.Invoke(FAILED_TEXT);
else
onSuccess?.Invoke();
onSuccess?.Invoke(room);
}
public void JoinRoom(Room room) => throw new NotImplementedException();
public void JoinRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null) => throw new NotImplementedException();
public void PartRoom() => throw new NotImplementedException();

View File

@ -10,11 +10,6 @@ namespace osu.Game.Screens.Multi
{
public interface IRoomManager
{
/// <summary>
/// Invoked when a room is joined.
/// </summary>
event Action<Room> RoomJoined;
/// <summary>
/// All the active <see cref="Room"/>s.
/// </summary>
@ -26,13 +21,15 @@ namespace osu.Game.Screens.Multi
/// <param name="room">The <see cref="Room"/> to create.</param>
/// <param name="onSuccess">An action to be invoked if the creation succeeds.</param>
/// <param name="onError">An action to be invoked if an error occurred.</param>
void CreateRoom(Room room, Action onSuccess = null, Action<string> onError = null);
void CreateRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null);
/// <summary>
/// Joins a <see cref="Room"/>.
/// </summary>
/// <param name="room">The <see cref="Room"/> to join. <see cref="Room.RoomID"/> must be populated.</param>
void JoinRoom(Room room);
/// <param name="onSuccess"></param>
/// <param name="onError"></param>
void JoinRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null);
/// <summary>
/// Parts the currently-joined <see cref="Room"/>.

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,19 +45,27 @@ namespace osu.Game.Screens.Multi.Lounge
RelativeSizeAxes = Axes.Both,
Children = new Drawable[]
{
new ScrollContainer
new Container
{
RelativeSizeAxes = Axes.Both,
Width = 0.55f,
Children = new Drawable[]
{
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 = r => roomManager?.JoinRoom(r) }
Child = rooms = new RoomsContainer { JoinRequested = joinRequested }
},
},
processingOverlay = new ProcessingOverlay { Alpha = 0 }
}
},
inspector = new RoomInspector
{
Anchor = Anchor.TopRight,
@ -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;
}
}
}

View File

@ -301,7 +301,7 @@ namespace osu.Game.Screens.Multi.Match.Components
private void hideError() => ErrorText.FadeOut(50);
private void onSuccess() => processingOverlay.Hide();
private void onSuccess(Room room) => processingOverlay.Hide();
private void onError(string text)
{

View File

@ -19,8 +19,6 @@ namespace osu.Game.Screens.Multi
{
public class RoomManager : PollingComponent, IRoomManager
{
public event Action<Room> RoomJoined;
private readonly BindableCollection<Room> rooms = new BindableCollection<Room>();
public IBindableCollection<Room> Rooms => rooms;
@ -48,7 +46,7 @@ namespace osu.Game.Screens.Multi
PartRoom();
}
public void CreateRoom(Room room, Action onSuccess = null, Action<string> onError = null)
public void CreateRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null)
{
room.Host.Value = api.LocalUser;
@ -58,7 +56,7 @@ namespace osu.Game.Screens.Multi
update(room, result);
addRoom(room);
onSuccess?.Invoke();
onSuccess?.Invoke(room);
};
req.Failure += exception =>
@ -74,7 +72,7 @@ namespace osu.Game.Screens.Multi
private JoinRoomRequest currentJoinRoomRequest;
public void JoinRoom(Room room)
public void JoinRoom(Room room, Action<Room> onSuccess = null, Action<string> onError = null)
{
currentJoinRoomRequest?.Cancel();
currentJoinRoomRequest = null;
@ -83,10 +81,14 @@ namespace osu.Game.Screens.Multi
currentJoinRoomRequest.Success += () =>
{
currentRoom = room;
RoomJoined?.Invoke(room);
onSuccess?.Invoke(room);
};
currentJoinRoomRequest.Failure += exception => Logger.Log($"Failed to join room: {exception}", level: LogLevel.Important);
currentJoinRoomRequest.Failure += exception =>
{
Logger.Log($"Failed to join room: {exception}", level: LogLevel.Important);
onError?.Invoke(exception.ToString());
};
api.Queue(currentJoinRoomRequest);
}