mirror of
https://github.com/ppy/osu.git
synced 2024-09-21 19:27:24 +08:00
Join multiplayer match when clicking the invite notification
This commit is contained in:
parent
8e73dbc894
commit
a171fa7649
@ -46,6 +46,7 @@ using osu.Game.IO;
|
||||
using osu.Game.Localisation;
|
||||
using osu.Game.Online;
|
||||
using osu.Game.Online.Chat;
|
||||
using osu.Game.Online.Rooms;
|
||||
using osu.Game.Overlays;
|
||||
using osu.Game.Overlays.BeatmapListing;
|
||||
using osu.Game.Overlays.Music;
|
||||
@ -58,6 +59,7 @@ using osu.Game.Rulesets.Mods;
|
||||
using osu.Game.Scoring;
|
||||
using osu.Game.Screens;
|
||||
using osu.Game.Screens.Menu;
|
||||
using osu.Game.Screens.OnlinePlay.Multiplayer;
|
||||
using osu.Game.Screens.Play;
|
||||
using osu.Game.Screens.Ranking;
|
||||
using osu.Game.Screens.Select;
|
||||
@ -643,6 +645,25 @@ namespace osu.Game
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Join a multiplayer match immediately.
|
||||
/// </summary>
|
||||
/// <param name="room">The room to join.</param>
|
||||
/// <param name="password">The password to join the room, if any is given.</param>
|
||||
public void PresentMultiplayerMatch(Room room, string password)
|
||||
{
|
||||
PerformFromScreen(screen =>
|
||||
{
|
||||
Multiplayer multiplayer = new Multiplayer();
|
||||
multiplayer.OnLoadComplete += _ =>
|
||||
{
|
||||
multiplayer.Join(room, password);
|
||||
};
|
||||
|
||||
screen.Push(multiplayer);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Present a score's replay immediately.
|
||||
/// The user should have already requested this interactively.
|
||||
@ -853,6 +874,7 @@ namespace osu.Game
|
||||
ScoreManager.PresentImport = items => PresentScore(items.First().Value);
|
||||
|
||||
MultiplayerClient.PostNotification = n => Notifications.Post(n);
|
||||
MultiplayerClient.InviteAccepted = PresentMultiplayerMatch;
|
||||
|
||||
// make config aware of how to lookup skins for on-screen display purposes.
|
||||
// if this becomes a more common thing, tracked settings should be reconsidered to allow local DI.
|
||||
|
@ -7,6 +7,7 @@ using osu.Framework.Extensions.ObjectExtensions;
|
||||
using osu.Framework.Logging;
|
||||
using osu.Framework.Screens;
|
||||
using osu.Game.Online.Multiplayer;
|
||||
using osu.Game.Online.Rooms;
|
||||
using osu.Game.Screens.OnlinePlay.Components;
|
||||
using osu.Game.Screens.OnlinePlay.Lounge;
|
||||
|
||||
@ -90,6 +91,11 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
||||
|
||||
protected override LoungeSubScreen CreateLounge() => new MultiplayerLoungeSubScreen();
|
||||
|
||||
public void Join(Room room, string? password)
|
||||
{
|
||||
LoungeSubScreen.Join(room, password);
|
||||
}
|
||||
|
||||
protected override void Dispose(bool isDisposing)
|
||||
{
|
||||
base.Dispose(isDisposing);
|
||||
|
@ -32,8 +32,9 @@ namespace osu.Game.Screens.OnlinePlay
|
||||
// while leases may be taken out by a subscreen.
|
||||
public override bool DisallowExternalBeatmapRulesetChanges => true;
|
||||
|
||||
protected LoungeSubScreen LoungeSubScreen;
|
||||
|
||||
private MultiplayerWaveContainer waves;
|
||||
private LoungeSubScreen loungeSubScreen;
|
||||
private ScreenStack screenStack;
|
||||
|
||||
[Cached(Type = typeof(IRoomManager))]
|
||||
@ -89,7 +90,7 @@ namespace osu.Game.Screens.OnlinePlay
|
||||
screenStack.ScreenPushed += screenPushed;
|
||||
screenStack.ScreenExited += screenExited;
|
||||
|
||||
screenStack.Push(loungeSubScreen = CreateLounge());
|
||||
screenStack.Push(LoungeSubScreen = CreateLounge());
|
||||
|
||||
apiState.BindTo(API.State);
|
||||
apiState.BindValueChanged(onlineStateChanged, true);
|
||||
@ -120,10 +121,10 @@ namespace osu.Game.Screens.OnlinePlay
|
||||
|
||||
Mods.SetDefault();
|
||||
|
||||
if (loungeSubScreen.IsCurrentScreen())
|
||||
loungeSubScreen.OnEntering(e);
|
||||
if (LoungeSubScreen.IsCurrentScreen())
|
||||
LoungeSubScreen.OnEntering(e);
|
||||
else
|
||||
loungeSubScreen.MakeCurrent();
|
||||
LoungeSubScreen.MakeCurrent();
|
||||
}
|
||||
|
||||
public override void OnResuming(ScreenTransitionEvent e)
|
||||
@ -158,7 +159,7 @@ namespace osu.Game.Screens.OnlinePlay
|
||||
|
||||
public override bool OnExiting(ScreenExitEvent e)
|
||||
{
|
||||
while (screenStack.CurrentScreen != null && screenStack.CurrentScreen is not LoungeSubScreen)
|
||||
while (screenStack.CurrentScreen != null && screenStack.CurrentScreen is not Lounge.LoungeSubScreen)
|
||||
{
|
||||
var subScreen = (Screen)screenStack.CurrentScreen;
|
||||
if (subScreen.IsLoaded && subScreen.OnExiting(e))
|
||||
|
Loading…
Reference in New Issue
Block a user