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

Make multiplayer screen handle user activity updates from subscreens.

This commit is contained in:
Lucas A 2020-11-08 13:16:27 +01:00
parent 55070556a7
commit 89b98b5388

View File

@ -24,6 +24,7 @@ using osu.Game.Screens.Multi.Lounge;
using osu.Game.Screens.Multi.Lounge.Components; using osu.Game.Screens.Multi.Lounge.Components;
using osu.Game.Screens.Multi.Match; using osu.Game.Screens.Multi.Match;
using osu.Game.Screens.Multi.Match.Components; using osu.Game.Screens.Multi.Match.Components;
using osu.Game.Users;
using osuTK; using osuTK;
namespace osu.Game.Screens.Multi namespace osu.Game.Screens.Multi
@ -140,10 +141,10 @@ namespace osu.Game.Screens.Multi
} }
}; };
screenStack.Push(loungeSubScreen = new LoungeSubScreen());
screenStack.ScreenPushed += screenPushed; screenStack.ScreenPushed += screenPushed;
screenStack.ScreenExited += screenExited; screenStack.ScreenExited += screenExited;
screenStack.Push(loungeSubScreen = new LoungeSubScreen());
} }
private readonly IBindable<APIState> apiState = new Bindable<APIState>(); private readonly IBindable<APIState> apiState = new Bindable<APIState>();
@ -311,18 +312,18 @@ namespace osu.Game.Screens.Multi
private void screenPushed(IScreen lastScreen, IScreen newScreen) private void screenPushed(IScreen lastScreen, IScreen newScreen)
{ {
subScreenChanged(newScreen); subScreenChanged(lastScreen, newScreen);
} }
private void screenExited(IScreen lastScreen, IScreen newScreen) private void screenExited(IScreen lastScreen, IScreen newScreen)
{ {
subScreenChanged(newScreen); subScreenChanged(lastScreen, newScreen);
if (screenStack.CurrentScreen == null && this.IsCurrentScreen()) if (screenStack.CurrentScreen == null && this.IsCurrentScreen())
this.Exit(); this.Exit();
} }
private void subScreenChanged(IScreen newScreen) private void subScreenChanged(IScreen lastScreen, IScreen newScreen)
{ {
switch (newScreen) switch (newScreen)
{ {
@ -337,6 +338,12 @@ namespace osu.Game.Screens.Multi
break; break;
} }
if (lastScreen is IOsuScreen lastOsuScreen)
Activity.UnbindFrom(lastOsuScreen.Activity);
if (newScreen is IOsuScreen newOsuScreen)
((IBindable<UserActivity>)Activity).BindTo(newOsuScreen.Activity);
updatePollingRate(isIdle.Value); updatePollingRate(isIdle.Value);
createButton.FadeTo(newScreen is LoungeSubScreen ? 1 : 0, 200); createButton.FadeTo(newScreen is LoungeSubScreen ? 1 : 0, 200);