2021-10-29 12:56:07 +08:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System.Linq ;
using NUnit.Framework ;
using osu.Framework.Allocation ;
using osu.Framework.Audio ;
2022-01-03 16:02:15 +08:00
using osu.Framework.Extensions ;
2021-10-29 12:56:07 +08:00
using osu.Framework.Platform ;
2021-10-29 14:44:48 +08:00
using osu.Framework.Screens ;
2021-10-29 12:56:07 +08:00
using osu.Framework.Testing ;
using osu.Game.Beatmaps ;
2024-08-28 18:19:04 +08:00
using osu.Game.Database ;
2021-10-29 14:44:48 +08:00
using osu.Game.Online.Multiplayer ;
2021-10-29 12:56:07 +08:00
using osu.Game.Online.Rooms ;
using osu.Game.Rulesets ;
using osu.Game.Rulesets.Osu ;
2023-01-29 05:24:05 +08:00
using osu.Game.Screens.OnlinePlay ;
2021-10-29 12:56:07 +08:00
using osu.Game.Screens.OnlinePlay.Lounge ;
using osu.Game.Screens.OnlinePlay.Multiplayer ;
using osu.Game.Screens.OnlinePlay.Multiplayer.Match ;
2021-10-29 14:44:48 +08:00
using osu.Game.Screens.Play ;
using osu.Game.Tests.Resources ;
2021-10-29 12:56:07 +08:00
2021-11-19 14:43:11 +08:00
namespace osu.Game.Tests.Visual.Multiplayer
2021-10-29 12:56:07 +08:00
{
2022-11-24 13:32:20 +08:00
public abstract partial class QueueModeTestScene : ScreenTestScene
2021-10-29 12:56:07 +08:00
{
2021-11-16 13:53:10 +08:00
protected abstract QueueMode Mode { get ; }
2021-10-29 12:56:07 +08:00
2024-11-13 15:55:18 +08:00
protected BeatmapInfo InitialBeatmap { get ; private set ; } = null ! ;
protected BeatmapInfo OtherBeatmap { get ; private set ; } = null ! ;
2021-10-29 14:44:48 +08:00
2021-12-20 17:24:59 +08:00
protected IScreen CurrentScreen = > multiplayerComponents . CurrentScreen ;
protected IScreen CurrentSubScreen = > multiplayerComponents . MultiplayerScreen . CurrentSubScreen ;
2021-10-29 14:44:48 +08:00
2024-11-13 15:55:18 +08:00
private BeatmapManager beatmaps = null ! ;
private BeatmapSetInfo importedSet = null ! ;
2021-10-29 12:56:07 +08:00
2024-11-13 15:55:18 +08:00
private TestMultiplayerComponents multiplayerComponents = null ! ;
2021-10-29 12:56:07 +08:00
2022-02-16 08:43:28 +08:00
protected TestMultiplayerClient MultiplayerClient = > multiplayerComponents . MultiplayerClient ;
2021-10-29 12:56:07 +08:00
[BackgroundDependencyLoader]
private void load ( GameHost host , AudioManager audio )
{
2024-08-28 18:19:04 +08:00
DetachedBeatmapStore detachedBeatmapStore ;
2022-07-28 15:19:05 +08:00
Dependencies . Cache ( new RealmRulesetStore ( Realm ) ) ;
Dependencies . Cache ( beatmaps = new BeatmapManager ( LocalStorage , Realm , null , audio , Resources , host , Beatmap . Default ) ) ;
2024-08-28 18:19:04 +08:00
Dependencies . Cache ( detachedBeatmapStore = new DetachedBeatmapStore ( ) ) ;
2022-01-25 11:58:15 +08:00
Dependencies . Cache ( Realm ) ;
2024-08-28 18:19:04 +08:00
Add ( detachedBeatmapStore ) ;
2021-10-29 12:56:07 +08:00
}
public override void SetUpSteps ( )
{
base . SetUpSteps ( ) ;
AddStep ( "import beatmap" , ( ) = >
{
2022-01-03 16:02:15 +08:00
beatmaps . Import ( TestResources . GetQuickTestBeatmapForImport ( ) ) . WaitSafely ( ) ;
2021-12-17 17:26:12 +08:00
importedSet = beatmaps . GetAllUsableBeatmapSets ( ) . First ( ) ;
2022-01-27 14:19:48 +08:00
InitialBeatmap = importedSet . Beatmaps . First ( b = > b . Ruleset . OnlineID = = 0 ) ;
OtherBeatmap = importedSet . Beatmaps . Last ( b = > b . Ruleset . OnlineID = = 0 ) ;
2021-10-29 12:56:07 +08:00
} ) ;
2021-12-20 17:24:59 +08:00
AddStep ( "load multiplayer" , ( ) = > LoadScreen ( multiplayerComponents = new TestMultiplayerComponents ( ) ) ) ;
AddUntilStep ( "wait for multiplayer to load" , ( ) = > multiplayerComponents . IsLoaded ) ;
2021-10-29 12:56:07 +08:00
AddUntilStep ( "wait for lounge to load" , ( ) = > this . ChildrenOfType < MultiplayerLoungeSubScreen > ( ) . FirstOrDefault ( ) ? . IsLoaded = = true ) ;
2021-12-20 17:24:59 +08:00
AddUntilStep ( "wait for lounge" , ( ) = > multiplayerComponents . ChildrenOfType < LoungeSubScreen > ( ) . SingleOrDefault ( ) ? . IsLoaded = = true ) ;
AddStep ( "open room" , ( ) = > multiplayerComponents . ChildrenOfType < LoungeSubScreen > ( ) . Single ( ) . Open ( new Room
2021-10-29 12:56:07 +08:00
{
2024-11-13 15:55:18 +08:00
Name = "Test Room" ,
2024-11-13 17:57:51 +08:00
QueueMode = Mode ,
2021-10-29 12:56:07 +08:00
Playlist =
2024-11-14 16:57:32 +08:00
[
2022-02-15 22:33:26 +08:00
new PlaylistItem ( InitialBeatmap )
2021-10-29 12:56:07 +08:00
{
2022-02-15 15:01:14 +08:00
RulesetID = new OsuRuleset ( ) . RulesetInfo . OnlineID
2021-10-29 12:56:07 +08:00
}
2024-11-14 16:57:32 +08:00
]
2021-10-29 12:56:07 +08:00
} ) ) ;
AddUntilStep ( "wait for room open" , ( ) = > this . ChildrenOfType < MultiplayerMatchSubScreen > ( ) . FirstOrDefault ( ) ? . IsLoaded = = true ) ;
AddWaitStep ( "wait for transition" , 2 ) ;
2021-12-21 12:20:12 +08:00
ClickButtonWhenEnabled < MultiplayerMatchSettingsOverlay . CreateOrUpdateButton > ( ) ;
2021-10-29 12:56:07 +08:00
2022-02-16 08:43:28 +08:00
AddUntilStep ( "wait for join" , ( ) = > MultiplayerClient . RoomJoined ) ;
2023-01-29 05:24:05 +08:00
AddUntilStep ( "wait for ongoing operation to complete" , ( ) = > ! ( CurrentScreen as OnlinePlayScreen ) . ChildrenOfType < OngoingOperationTracker > ( ) . Single ( ) . InProgress . Value ) ;
2021-10-29 12:56:07 +08:00
}
[Test]
public void TestCreatedWithCorrectMode ( )
{
2024-11-13 17:57:51 +08:00
AddUntilStep ( "room created with correct mode" , ( ) = > MultiplayerClient . ClientAPIRoom ? . QueueMode = = Mode ) ;
2021-10-29 14:44:48 +08:00
}
protected void RunGameplay ( )
{
2022-02-16 08:43:28 +08:00
AddUntilStep ( "wait for idle" , ( ) = > MultiplayerClient . LocalUser ? . State = = MultiplayerUserState . Idle ) ;
2021-12-21 12:20:12 +08:00
ClickButtonWhenEnabled < MultiplayerReadyButton > ( ) ;
2021-10-29 14:44:48 +08:00
2022-02-16 08:43:28 +08:00
AddUntilStep ( "wait for ready" , ( ) = > MultiplayerClient . LocalUser ? . State = = MultiplayerUserState . Ready ) ;
2021-12-21 12:20:12 +08:00
ClickButtonWhenEnabled < MultiplayerReadyButton > ( ) ;
2021-11-23 16:09:38 +08:00
2021-12-20 17:24:59 +08:00
AddUntilStep ( "wait for player" , ( ) = > multiplayerComponents . CurrentScreen is Player player & & player . IsLoaded ) ;
AddStep ( "exit player" , ( ) = > multiplayerComponents . MultiplayerScreen . MakeCurrent ( ) ) ;
2021-11-23 16:09:38 +08:00
}
2021-10-29 12:56:07 +08:00
}
}