From b9b9e4da960bb47f381b673423f6ecd4762dd759 Mon Sep 17 00:00:00 2001 From: LA <1245661240@qq.com> Date: Sun, 14 Sep 2025 17:37:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 3 + osu.Android.props | 2 +- .../old-skin/fruit-apple-overlay.png | Bin 5035 -> 0 bytes .../Resources/old-skin/fruit-apple.png | Bin 5083 -> 0 bytes .../old-skin/fruit-bananas-overlay.png | Bin 7823 -> 0 bytes .../Resources/old-skin/fruit-bananas.png | Bin 14274 -> 0 bytes .../Resources/old-skin/fruit-drop.png | Bin 4203 -> 0 bytes .../old-skin/fruit-grapes-overlay.png | Bin 11873 -> 0 bytes .../Resources/old-skin/fruit-grapes.png | Bin 3985 -> 0 bytes .../old-skin/fruit-orange-overlay.png | Bin 4096 -> 0 bytes .../Resources/old-skin/fruit-orange.png | Bin 9021 -> 0 bytes .../Resources/old-skin/fruit-pear-overlay.png | Bin 7194 -> 0 bytes .../Resources/old-skin/fruit-pear.png | Bin 4873 -> 0 bytes .../Resources/old-skin/fruit-plate.png | Bin 3583 -> 0 bytes .../Resources/old-skin/fruit-ryuuta.png | Bin 11722 -> 0 bytes .../Resources/old-skin/hit0.png | Bin 9518 -> 0 bytes .../Resources/old-skin/hit100.png | Bin 27548 -> 0 bytes .../Resources/old-skin/hit300.png | Bin 30325 -> 0 bytes .../Resources/old-skin/hit50.png | Bin 22638 -> 0 bytes .../Resources/old-skin/score-0.png | Bin 3092 -> 0 bytes .../Resources/old-skin/score-1.png | Bin 1237 -> 0 bytes .../Resources/old-skin/score-2.png | Bin 3134 -> 0 bytes .../Resources/old-skin/score-3.png | Bin 3712 -> 0 bytes .../Resources/old-skin/score-4.png | Bin 2395 -> 0 bytes .../Resources/old-skin/score-5.png | Bin 3067 -> 0 bytes .../Resources/old-skin/score-6.png | Bin 3337 -> 0 bytes .../Resources/old-skin/score-7.png | Bin 1910 -> 0 bytes .../Resources/old-skin/score-8.png | Bin 3652 -> 0 bytes .../Resources/old-skin/score-9.png | Bin 3561 -> 0 bytes .../Resources/old-skin/skin.ini | 2 - .../ManiaFilterCriteria.cs | 1 + osu.Game.Rulesets.Mania/ManiaRuleset.cs | 1 + .../Skinning/EzStylePro/EzHitTarget.cs | 41 +- .../Skinning/EzStylePro/EzNote.cs | 2 +- .../Components/HitPositionPaddedContainer.cs | 4 +- .../VariantMappingGenerator.cs | 15 +- .../Resources/old-skin/approachcircle.png | Bin 4540 -> 0 bytes .../Resources/old-skin/cursor-smoke.png | Bin 2249 -> 0 bytes .../Resources/old-skin/cursor.png | Bin 10496 -> 0 bytes .../Resources/old-skin/cursortrail.png | Bin 3763 -> 0 bytes .../Resources/old-skin/default-0.png | Bin 2003 -> 0 bytes .../Resources/old-skin/default-1.png | Bin 1191 -> 0 bytes .../Resources/old-skin/default-2.png | Bin 1756 -> 0 bytes .../Resources/old-skin/default-3.png | Bin 1822 -> 0 bytes .../Resources/old-skin/default-4.png | Bin 1814 -> 0 bytes .../Resources/old-skin/default-5.png | Bin 1848 -> 0 bytes .../Resources/old-skin/default-6.png | Bin 2014 -> 0 bytes .../Resources/old-skin/default-7.png | Bin 1452 -> 0 bytes .../Resources/old-skin/default-8.png | Bin 1953 -> 0 bytes .../Resources/old-skin/default-9.png | Bin 1814 -> 0 bytes .../Resources/old-skin/hit0.png | Bin 12904 -> 0 bytes .../Resources/old-skin/hit100.png | Bin 30853 -> 0 bytes .../Resources/old-skin/hit300.png | Bin 33649 -> 0 bytes .../Resources/old-skin/hit50.png | Bin 27832 -> 0 bytes .../Resources/old-skin/hitcircle.png | Bin 3572 -> 0 bytes .../Resources/old-skin/hitcircleoverlay.png | Bin 7113 -> 0 bytes .../Resources/old-skin/reversearrow.png | Bin 4853 -> 0 bytes .../Resources/old-skin/score-0.png | Bin 3092 -> 0 bytes .../Resources/old-skin/score-1.png | Bin 1237 -> 0 bytes .../Resources/old-skin/score-2.png | Bin 3134 -> 0 bytes .../Resources/old-skin/score-3.png | Bin 3712 -> 0 bytes .../Resources/old-skin/score-4.png | Bin 2395 -> 0 bytes .../Resources/old-skin/score-5.png | Bin 3067 -> 0 bytes .../Resources/old-skin/score-6.png | Bin 3337 -> 0 bytes .../Resources/old-skin/score-7.png | Bin 1910 -> 0 bytes .../Resources/old-skin/score-8.png | Bin 3652 -> 0 bytes .../Resources/old-skin/score-9.png | Bin 3561 -> 0 bytes .../Resources/old-skin/score-comma.png | Bin 865 -> 0 bytes .../Resources/old-skin/score-dot.png | Bin 771 -> 0 bytes .../Resources/old-skin/score-percent.png | Bin 4904 -> 0 bytes .../Resources/old-skin/score-x.png | Bin 2536 -> 0 bytes .../Resources/old-skin/skin.ini | 6 - .../Resources/old-skin/sliderpoint10.png | Bin 2349 -> 0 bytes .../Resources/old-skin/sliderpoint30.png | Bin 2718 -> 0 bytes .../old-skin/spinner-approachcircle.png | Bin 26350 -> 0 bytes .../Resources/old-skin/spinner-background.png | Bin 46103 -> 0 bytes .../Resources/old-skin/spinner-circle.png | Bin 166439 -> 0 bytes .../Resources/old-skin/spinner-clear.png | Bin 39074 -> 0 bytes .../Resources/old-skin/spinner-metre.png | Bin 14518 -> 0 bytes .../Resources/old-skin/spinner-osu.png | Bin 18585 -> 0 bytes .../Resources/old-skin/spinner-rpm.png | Bin 10583 -> 0 bytes .../Resources/old-skin/spinner-spin.png | Bin 21353 -> 0 bytes .../Resources/old-skin/spinnerbonus.wav | Bin 309536 -> 0 bytes .../Resources/old-skin/spinnerspin.wav | Bin 36868 -> 0 bytes .../Edit/PreciseMovementPopover.cs | 5 + .../Edit/PreciseRotationPopover.cs | 4 + .../Edit/PreciseScalePopover.cs | 4 + .../Mods/TestSceneTaikoModHidden.cs | 104 ++++ .../Resources/old-skin/approachcircle.png | Bin 10333 -> 0 bytes .../Resources/old-skin/skin.ini | 5 - .../Resources/old-skin/taiko-bar-left.png | Bin 17758 -> 0 bytes .../Resources/old-skin/taiko-drum-inner.png | Bin 4661 -> 0 bytes .../Resources/old-skin/taiko-drum-outer.png | Bin 5585 -> 0 bytes .../old-skin/taiko-slider-fail@2x.png | Bin 102010 -> 0 bytes .../Resources/old-skin/taiko-slider@2x.png | Bin 96449 -> 0 bytes .../Resources/old-skin/taikobigcircle.png | Bin 3079 -> 0 bytes .../old-skin/taikobigcircleoverlay-0.png | Bin 17018 -> 0 bytes .../old-skin/taikobigcircleoverlay-1.png | Bin 18837 -> 0 bytes .../Resources/old-skin/taikohitcircle.png | Bin 6028 -> 0 bytes .../old-skin/taikohitcircleoverlay-0.png | Bin 20284 -> 0 bytes .../old-skin/taikohitcircleoverlay-1.png | Bin 20333 -> 0 bytes .../Mods/TaikoModHidden.cs | 2 +- .../Audio/HitsoundPreviewAnalyzerTest.cs | 87 ++++ .../Database/BeatmapImporterTests.cs | 43 ++ .../Filtering/FilterQueryParserTest.cs | 13 +- .../Matchmaking/MatchmakingRoomStateTest.cs | 153 ++++++ .../Archives/modified-argon-20250308.osk | Bin 0 -> 1716 bytes osu.Game.Tests/Resources/old-skin/score-0.png | Bin 3092 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-1.png | Bin 1237 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-2.png | Bin 3134 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-3.png | Bin 3712 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-4.png | Bin 2395 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-5.png | Bin 3067 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-6.png | Bin 3337 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-7.png | Bin 1910 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-8.png | Bin 3652 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-9.png | Bin 3561 -> 0 bytes .../Resources/old-skin/score-comma.png | Bin 865 -> 0 bytes .../Resources/old-skin/score-dot.png | Bin 771 -> 0 bytes .../Resources/old-skin/score-percent.png | Bin 4904 -> 0 bytes osu.Game.Tests/Resources/old-skin/score-x.png | Bin 2536 -> 0 bytes .../Resources/old-skin/scorebar-bg.png | Bin 7087 -> 0 bytes .../Resources/old-skin/scorebar-colour-0.png | Bin 465 -> 0 bytes .../Resources/old-skin/scorebar-colour-1.png | Bin 475 -> 0 bytes .../Resources/old-skin/scorebar-colour-2.png | Bin 466 -> 0 bytes .../Resources/old-skin/scorebar-colour-3.png | Bin 464 -> 0 bytes .../Resources/old-skin/scorebar-ki.png | Bin 8579 -> 0 bytes .../Resources/old-skin/scorebar-kidanger.png | Bin 7361 -> 0 bytes .../Resources/old-skin/scorebar-kidanger2.png | Bin 9360 -> 0 bytes osu.Game.Tests/Resources/old-skin/skin.ini | 2 - osu.Game.Tests/Skins/IO/ImportSkinTest.cs | 86 ++++ .../Skins/SkinDeserialisationTest.cs | 2 + .../Background/TestSceneUserDimBackgrounds.cs | 2 +- .../TestSceneArgonJudgementCounter.cs | 209 ++++++++ .../Matchmaking/TestSceneBeatmapPanel.cs | 28 ++ .../TestSceneBeatmapSelectionGrid.cs | 184 +++++++ .../TestSceneBeatmapSelectionOverlay.cs | 68 +++ .../TestSceneBeatmapSelectionPanel.cs | 57 +++ .../Visual/Matchmaking/TestSceneIdleScreen.cs | 89 ++++ .../Matchmaking/TestSceneMatchmakingCloud.cs | 44 ++ .../TestSceneMatchmakingPoolSelector.cs | 35 ++ .../TestSceneMatchmakingQueueScreen.cs | 58 +++ .../Matchmaking/TestSceneMatchmakingScreen.cs | 244 ++++++++++ .../TestSceneMatchmakingScreenStack.cs | 119 +++++ .../Visual/Matchmaking/TestScenePickScreen.cs | 110 +++++ .../Matchmaking/TestScenePlayerPanel.cs | 94 ++++ .../Matchmaking/TestSceneResultsScreen.cs | 98 ++++ .../TestSceneRoomStatisticPanel.cs | 23 + .../TestSceneRoundResultsScreen.cs | 102 ++++ .../Matchmaking/TestSceneStageBubble.cs | 49 ++ .../Matchmaking/TestSceneStageDisplay.cs | 56 +++ .../Visual/Matchmaking/TestSceneStageText.cs | 43 ++ .../TestSceneMultiSpectatorScreen.cs | 13 + .../Multiplayer/TestSceneRoomListing.cs | 14 +- .../Visual/Multiplayer/TestSceneRoomPanel.cs | 88 +++- .../Navigation/TestSceneScreenNavigation.cs | 2 +- .../SongSelect/TestSceneTopLocalRank.cs | 50 ++ .../BeatmapCarouselFilterGroupingTest.cs | 4 +- .../SongSelectV2/BeatmapCarouselTestScene.cs | 43 +- .../SongSelectV2/SongSelectTestScene.cs | 50 -- .../TestSceneBeatmapCarouselArtistGrouping.cs | 9 +- ...tSceneBeatmapCarouselCollectionGrouping.cs | 66 +++ ...tSceneBeatmapCarouselDifficultyGrouping.cs | 11 +- .../TestSceneBeatmapCarouselFiltering.cs | 30 +- .../TestSceneBeatmapCarouselNoGrouping.cs | 15 +- .../TestSceneBeatmapCarouselRandom.cs | 48 +- .../TestSceneBeatmapCarouselScrolling.cs | 10 +- .../TestSceneBeatmapCarouselUpdateHandling.cs | 97 ++-- .../SongSelectV2/TestScenePanelBeatmap.cs | 8 +- .../TestScenePanelBeatmapStandalone.cs | 8 +- .../SongSelectV2/TestSceneSongSelect.cs | 12 +- ...neSongSelectCurrentSelectionInvalidated.cs | 2 +- .../TestSceneSongSelectFiltering.cs | 2 +- .../TestSceneSongSelectGrouping.cs | 2 +- .../UserInterface/TestSceneButtonSystem.cs | 32 +- .../UserInterface/TestSceneMainMenuButton.cs | 2 +- .../Screens/Schedule/ScheduleScreen.cs | 7 +- osu.Game/Beatmaps/BeatmapImporter.cs | 6 +- .../Beatmaps/Drawables/Cards/BeatmapCard.cs | 42 +- osu.Game/Beatmaps/WorkingBeatmapCache.cs | 26 +- osu.Game/Configuration/OsuConfigManager.cs | 4 +- .../Database/RealmArchiveModelImporter.cs | 13 +- osu.Game/Extensions/ModelExtensions.cs | 1 + osu.Game/Graphics/Carousel/Carousel.cs | 2 +- osu.Game/Graphics/DrawableDate.cs | 23 +- .../UserInterfaceV2/ShearedDropdown.cs | 4 +- osu.Game/Localisation/MenuTipStrings.cs | 5 + .../Online/Leaderboards/LeaderboardScore.cs | 2 +- .../Online/Matchmaking/IMatchmakingClient.cs | 53 ++ .../Online/Matchmaking/IMatchmakingServer.cs | 56 +++ .../Matchmaking/MatchmakingLobbyStatus.cs | 16 + .../Online/Matchmaking/MatchmakingPool.cs | 39 ++ .../Matchmaking/MatchmakingQueueStatus.cs | 34 ++ .../Matchmaking/MatchmakingStageCountdown.cs | 16 + osu.Game/Online/Multiplayer/MatchRoomState.cs | 2 + .../Matchmaking/MatchmakingRoomState.cs | 101 ++++ .../Matchmaking/MatchmakingRound.cs | 54 +++ .../Matchmaking/MatchmakingRoundList.cs | 49 ++ .../Matchmaking/MatchmakingStage.cs | 59 +++ .../MatchTypes/Matchmaking/MatchmakingUser.cs | 40 ++ .../Matchmaking/MatchmakingUserComparer.cs | 65 +++ .../Matchmaking/MatchmakingUserList.cs | 49 ++ .../Online/Multiplayer/MultiplayerClient.cs | 299 ++++++++---- .../Multiplayer/MultiplayerCountdown.cs | 2 + .../Multiplayer/OnlineMultiplayerClient.cs | 91 ++++ osu.Game/Online/Rooms/MatchType.cs | 2 + .../Online/Rooms/MultiplayerPlaylistItem.cs | 40 +- osu.Game/Online/Rooms/Room.cs | 9 + osu.Game/Online/SignalRWorkaroundTypes.cs | 9 + osu.Game/OsuGame.cs | 2 + .../BeatmapSet/Scores/ScoreboardTime.cs | 3 +- .../Overlays/Settings/Sections/SkinSection.cs | 1 + osu.Game/Overlays/SkinEditor/SkinEditor.cs | 11 +- .../Rulesets/UI/FrameStabilityContainer.cs | 7 +- osu.Game/Scoring/ScoreInfoExtensions.cs | 21 + .../Backgrounds/BackgroundScreenDefault.cs | 1 + .../Components/Timeline/SamplePointPiece.cs | 13 +- .../Screens/Edit/Compose/ComposeScreen.cs | 17 +- .../Screens/Edit/GameplayTest/EditorPlayer.cs | 68 ++- osu.Game/Screens/EzLocalizationManager.cs | 97 ++++ osu.Game/Screens/EzSkinSettingsManager.cs | 4 + osu.Game/Screens/EzSkinSettingsTab.cs | 95 ++-- osu.Game/Screens/Menu/ButtonSystem.cs | 54 ++- osu.Game/Screens/Menu/MainMenu.cs | 4 + osu.Game/Screens/Menu/MenuTipDisplay.cs | 5 +- osu.Game/Screens/OnlinePlay/Header.cs | 2 +- .../DrawableRoomParticipantsList.cs | 20 +- .../Lounge/Components/EndDateInfo.cs | 7 +- .../Lounge/Components/RoomListing.cs | 9 +- .../OnlinePlay/Lounge/Components/RoomPanel.cs | 90 ++-- .../OnlinePlay/Lounge/LoungeSubScreen.cs | 2 +- .../Matchmaking/MatchmakingAvatar.cs | 68 +++ .../Matchmaking/MatchmakingCloud.cs | 152 ++++++ .../Matchmaking/MatchmakingController.cs | 164 +++++++ .../Matchmaking/MatchmakingPlayer.cs | 31 ++ .../Matchmaking/MatchmakingPoolSelector.cs | 147 ++++++ .../Matchmaking/MatchmakingScreen.cs | 337 +++++++++++++ .../Matchmaking/Screens/Idle/IdleScreen.cs | 27 ++ .../Matchmaking/Screens/Idle/PlayerPanel.cs | 197 ++++++++ .../Screens/Idle/PlayerPanelList.cs | 93 ++++ .../Screens/MatchmakingIntroScreen.cs | 262 ++++++++++ .../Screens/MatchmakingQueueScreen.cs | 456 ++++++++++++++++++ .../Screens/MatchmakingScreenStack.cs | 121 +++++ .../Screens/MatchmakingSubScreen.cs | 43 ++ .../Matchmaking/Screens/Pick/BeatmapPanel.cs | 192 ++++++++ .../Screens/Pick/BeatmapSelectionGrid.cs | 378 +++++++++++++++ .../Screens/Pick/BeatmapSelectionOverlay.cs | 157 ++++++ .../Screens/Pick/BeatmapSelectionPanel.cs | 213 ++++++++ .../Matchmaking/Screens/Pick/PickScreen.cs | 83 ++++ .../Screens/Results/ResultsScreen.cs | 339 +++++++++++++ .../Screens/Results/RoomStatisticPanel.cs | 57 +++ .../Screens/Results/UserStatisticPanel.cs | 49 ++ .../RoundResults/RoundResultsScorePanel.cs | 36 ++ .../RoundResults/RoundResultsScreen.cs | 181 +++++++ .../OnlinePlay/Matchmaking/StageBubble.cs | 171 +++++++ .../OnlinePlay/Matchmaking/StageDisplay.cs | 91 ++++ .../OnlinePlay/Matchmaking/StageText.cs | 97 ++++ .../Multiplayer/MultiplayerMatchSubScreen.cs | 2 +- .../Multiplayer/MultiplayerPlayer.cs | 2 + .../Participants/ParticipantsList.cs | 2 +- .../Spectate/MultiSpectatorPlayer.cs | 17 + .../Playlists/PlaylistsRoomSubScreen.cs | 411 ++++++++-------- .../Play/HUD/ArgonCounterTextComponent.cs | 20 +- .../Screens/Play/HUD/DefaultRankDisplay.cs | 63 ++- osu.Game/Screens/Play/SoloSpectatorPlayer.cs | 20 + osu.Game/Screens/Play/SoloSpectatorScreen.cs | 2 +- osu.Game/Screens/Play/SpectatorPlayer.cs | 16 - .../Ranking/Statistics/StatisticsPanel.cs | 8 +- .../Screens/Select/Carousel/TopLocalRank.cs | 10 +- osu.Game/Screens/Select/FilterQueryParser.cs | 2 +- osu.Game/Screens/SelectV2/BeatmapCarousel.cs | 218 ++++++--- .../SelectV2/BeatmapCarouselFilterGrouping.cs | 142 +++--- .../SelectV2/BeatmapLeaderboardScore.cs | 2 +- .../BeatmapTitleWedge_DifficultyDisplay.cs | 2 +- osu.Game/Screens/SelectV2/CircleSizeFilter.cs | 2 +- osu.Game/Screens/SelectV2/FilterControl.cs | 8 +- .../FilterControl_CircleSizeSelector.cs | 27 +- osu.Game/Screens/SelectV2/PanelBeatmap.cs | 14 +- .../SelectV2/PanelBeatmapStandalone.cs | 27 +- .../Screens/SelectV2/PanelLocalRankDisplay.cs | 10 +- .../RealmPopulatingOnlineLookupSource.cs | 2 + osu.Game/Screens/SelectV2/SongSelect.cs | 127 +++-- .../Components/ArgonJudgementCounter.cs | 74 +++ .../ArgonJudgementCounterDisplay.cs | 170 +++++++ osu.Game/Skinning/LegacyRankDisplay.cs | 94 ++-- osu.Game/Skinning/RetroSkin.cs | 58 +++ osu.Game/Skinning/SkinInfo.cs | 1 + osu.Game/Skinning/SkinManager.cs | 14 +- osu.Game/Skinning/SkinnableContainer.cs | 13 + osu.Game/Skinning/SkinnableSprite.cs | 1 + .../Multiplayer/TestMultiplayerClient.cs | 116 ++++- .../Visual/OnlinePlay/OnlinePlayTestScene.cs | 6 +- osu.Game/Tests/Visual/ScreenTestScene.cs | 60 ++- osu.Game/Tests/Visual/SkinnableTestScene.cs | 6 +- osu.iOS.props | 2 +- 295 files changed, 9539 insertions(+), 1044 deletions(-) delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-apple-overlay.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-apple.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-bananas-overlay.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-bananas.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-drop.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-grapes-overlay.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-grapes.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-orange-overlay.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-orange.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-pear-overlay.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-pear.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-plate.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-ryuuta.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit0.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit100.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit300.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit50.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-0.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-1.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-2.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-3.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-4.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-5.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-6.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-7.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-8.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-9.png delete mode 100644 osu.Game.Rulesets.Catch.Tests/Resources/old-skin/skin.ini delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/approachcircle.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/cursor-smoke.png delete mode 100755 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/cursor.png delete mode 100755 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/cursortrail.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-0.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-1.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-2.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-3.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-4.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-5.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-6.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-7.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-8.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-9.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit0.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit100.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit300.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit50.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hitcircle.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hitcircleoverlay.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/reversearrow.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-0.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-1.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-2.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-3.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-4.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-5.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-6.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-7.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-8.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-9.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-comma.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-dot.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-percent.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-x.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/skin.ini delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/sliderpoint10.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/sliderpoint30.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-approachcircle.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-background.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-circle.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-clear.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-metre.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-osu.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-rpm.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-spin.png delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinnerbonus.wav delete mode 100644 osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinnerspin.wav delete mode 100755 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/approachcircle.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/skin.ini delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-bar-left.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-drum-inner.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-drum-outer.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-slider-fail@2x.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-slider@2x.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikobigcircle.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikobigcircleoverlay-0.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikobigcircleoverlay-1.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikohitcircle.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikohitcircleoverlay-0.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikohitcircleoverlay-1.png create mode 100644 osu.Game.Tests/Audio/HitsoundPreviewAnalyzerTest.cs create mode 100644 osu.Game.Tests/Online/Matchmaking/MatchmakingRoomStateTest.cs create mode 100644 osu.Game.Tests/Resources/Archives/modified-argon-20250308.osk delete mode 100644 osu.Game.Tests/Resources/old-skin/score-0.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-1.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-2.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-3.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-4.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-5.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-6.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-7.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-8.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-9.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-comma.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-dot.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-percent.png delete mode 100644 osu.Game.Tests/Resources/old-skin/score-x.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-bg.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-colour-0.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-colour-1.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-colour-2.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-colour-3.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-ki.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-kidanger.png delete mode 100644 osu.Game.Tests/Resources/old-skin/scorebar-kidanger2.png delete mode 100644 osu.Game.Tests/Resources/old-skin/skin.ini create mode 100644 osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapPanel.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionGrid.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionOverlay.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionPanel.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneIdleScreen.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingCloud.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingPoolSelector.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingQueueScreen.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreen.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreenStack.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestScenePickScreen.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestScenePlayerPanel.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneResultsScreen.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneRoomStatisticPanel.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneRoundResultsScreen.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneStageBubble.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneStageDisplay.cs create mode 100644 osu.Game.Tests/Visual/Matchmaking/TestSceneStageText.cs create mode 100644 osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselCollectionGrouping.cs create mode 100644 osu.Game/Online/Matchmaking/IMatchmakingClient.cs create mode 100644 osu.Game/Online/Matchmaking/IMatchmakingServer.cs create mode 100644 osu.Game/Online/Matchmaking/MatchmakingLobbyStatus.cs create mode 100644 osu.Game/Online/Matchmaking/MatchmakingPool.cs create mode 100644 osu.Game/Online/Matchmaking/MatchmakingQueueStatus.cs create mode 100644 osu.Game/Online/Matchmaking/MatchmakingStageCountdown.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoomState.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRound.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoundList.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingStage.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserComparer.cs create mode 100644 osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserList.cs create mode 100644 osu.Game/Screens/EzLocalizationManager.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingAvatar.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingCloud.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingController.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPlayer.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPoolSelector.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/IdleScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanel.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanelList.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingIntroScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingQueueScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingScreenStack.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingSubScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapPanel.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionGrid.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionOverlay.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionPanel.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/PickScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/ResultsScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/RoomStatisticPanel.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/UserStatisticPanel.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScorePanel.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScreen.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/StageBubble.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/StageDisplay.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/StageText.cs create mode 100644 osu.Game/Skinning/Components/ArgonJudgementCounter.cs create mode 100644 osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs create mode 100644 osu.Game/Skinning/RetroSkin.cs diff --git a/.editorconfig b/.editorconfig index 7aecde95ee..e42b8b6a8a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -19,6 +19,9 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = true +# temporary workaround for https://youtrack.jetbrains.com/issue/RIDER-130051/Cannot-resolve-symbol-inspections-incorrectly-firing-for-xmldoc-protected-member-references +resharper_c_sharp_warnings_cs1574_cs1584_cs1581_cs1580_highlighting = hint + #license header file_header_template = Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.\nSee the LICENCE file in the repository root for full licence text. diff --git a/osu.Android.props b/osu.Android.props index 46d558354e..498d6f267e 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -10,7 +10,7 @@ true - + |iv6C~ ze$IjbQJ_HRGhjG+qJ7C$m6!rzREvm^?A+Y{cJ#VqB)~`fV+ORj$2Io*e9sU3#tn89 z`wst%2yhApbm`3-trxRK>3LEuzN4!uUfPw*+~VDujt1MVl!UtMa+m9j@9{l9@;f)# z6?_-}>Fy{Q;Ai$&RQGHD&i{6vc!lS9f(xwKjsx{eZtGurc@_!TB4aA}Ew(wF@fUya z7dN$EbtgUd4gT2?;1m?1pw9t2{V#w2w6*fQmgb#j%~q2LzAs~>YUxz~Pk?VPJX2m6 zk#;BEhP(WowpZ4+)xEfZ`&klT4@3==<&u5wbF=kn>+RDmJXaxq-sSs|sIJ+i(wYQN5H3BOC9BPO2s9wq_c8=r4-nP+*0w|M86 zgeT8E!6hz`wurZtDm>s_@8~AiHSl%n_VWZib$JJrZSKhKv8AZ*GnDUhga42TFdb-z zt#v8kX*2hHZWVPEk>ko_bxq=h|Xh`967m zWG_4ge>nvBqAZcHsr}(!;MITZC7$D{V;MA7nw&H5JMxJ?;S>c8F_lsW`X>G6m=Qzz zbZL_!ejxBuW}fzzNPq`}NH`9M^U4ax_Jr2!t}7DKqQlI=o5_oc0o$V1M4+FFg3u;p z{>WP{0g(jd1O>#Vs5sAt5g?yhCEF(&@S=fs|5hl+&{N)o6!$CXm%6#Kt z^J^Z8Kc#~St1gSAgV2A@Yrrp^0KoP!Q8Wv@%)MGvPBxA^r%^ot+~2l7x&+vLn{Fb- x`;lPK3Gl<;6n-NBf0POE`$w-vKuiAb{{Umh)*siV&-(xX002ovPDHLkV1i=cz}^4= diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-bananas-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-bananas-overlay.png deleted file mode 100644 index 3a6612378e5cc655ec5d9d8ea7c53486c5a6270b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7823 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 a2zU=&wPGnM{AV5mfVTP*wOSSX=>GxIE#JKW diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-bananas.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-bananas.png deleted file mode 100644 index afb8698b2d8ff7285d53e140bcf0c5379ef8a6c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14274 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-drop.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-drop.png deleted file mode 100644 index 12c74f46e227957667386ef1fe1017c515778a28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4203 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 B0*L?s diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-grapes-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-grapes-overlay.png deleted file mode 100644 index bb37ba1920dc33ee2330f0ce865d5b4c072a6ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11873 zcmV-nE}qeeP)mSGm70Q>j#q z1xjrPAS%9tkN*{bQPQWt7BJJk$ARm>fr=n?1JVaRK!vqb7~@(H85sjh`G!=eO#l}$ zGHitP1+!dC-!TG6?|tvt{qjHdV@`>`6?hPMF7OaA2L1&2W8hQ3A&}Dh-%o{e7UY*8 zz69YGwt!_=A+-a6Xc8f)HL!&U0SIWX0sc-9gDYY@d&K|bPZ}lpf)f8i;B_K^+EE!n ziI3?4oG%q${J4glLlMf61w?}2qobc`aHTJDuL;Bl8+ zi)a^TRS0KJ0Q56ILogHI9wq)Qz#A81SKU6Zin_GL;VKlL-(5Yt^66bfWH+no@AkdF z@>f@{9zU|ZyvG7FgpM{;Z0? z{>amwc6P}B*`Fnt3b+G!Iq-j{wSDPB7l!uUt-9ErR>inRR43t(LHE)<;kPtfr@guZ54AGY@(HORryh4Rh0S;{fqD&L8 zX9})hK5Gfz1b6^=(|BMX1^LA-v$7af7W}|feSV+PQY(goWqjUI2q0=2zAOw_6^D_#VM`T;U>9R1z(7gYgz~K90LGjp?;ivA0xz7@ zcCs}V&o|2h-lNP@}e_h_GqDB#Y7_y7FQcSW8p;8EZu zw{BF$6rNv#{3Ki@g#XAQ0L=Zd1rhz__Hg*2SKV>Pdx>(N_tZrJVA4wz4}hse0udDY!&wl4J4-7T;2iLvv$QoIx?-r_FH{AV z&@bK}io-R_{Z}l}ho8DwTnFO$sxmcn;$(n$z7h{)?-z98Uj-oN0*wlCKehKY4QcY1 zG;wTz6I^R>-vDDA?&Y&kg_JM)tyrpA&5%pL{3o7}dgrX|py2-^{8zvncz80f#jrGm zGnp_34-xz<;r+)T|70Dd@56UbrcLI9y3c$HU#v4DxPfBLs9G3 zPWq4kI4K!JV5;h0Xi4@i;C|o{ZFe5vfR&Dmz_E@$P_i!q{|bB(_zZ9vxS?Z6!N5rq zL2_bsS`8mD6|0aFKpY=ESJxLGnayt8I~+E*7~>Zy#mf66L^sPN#j>R693=_sx(Xm; zU@RM=Hsm;164GPL3tn_PcU}1+CEYra?x!zSA0jm*VP>2ATb16AS?gVuvmVsJ+ zErE%8`FY?LEy_HkYx8?s@<$G9Gl#oPrp*v2PO$pA4d-^iNdy>JM(KYWdOr^QIq)Ii z)4-Qi2&wZVS?V<*hkaS^3kT9(qi^N8utcA~qpq(%G#;WV>%Hq;jn0{5E2ByqFMu<49IpW0_t)E6@U`$a9%6n1S_Hnuxk~J1BMt^X<6CB zo_Z-+zVug9dhO=lJJh=$R1bd|a9?3*T8u32r~qhWjCZYpZuVy-x{n~1#bz`tBA{Xw zA1#i;qZlKke;D`+6~$$ZHY@qcvd;H-?m!}RFACr|8d|$|=V)}aU6yf56iW~gn4y6{ z9=H3ZF#dMWXWW|nl0n0F27z1yrU%^f900+S%p^x=@VD9=QSXnZ*)l&g&8Hf zvz{{o?jZ(JZ>Fa_eii2s#Y=JDOANAkknj;){eovMIi-kX&x*H8GDtcRaDJB+zS??G zmVV(}oPf}fQhST{o}?X_DTrf(z$mK%pdE>Og?%HWLl8LFN)$ks%`Tj*_sM1NClh0m z5yCd*Xkc3rq~tUom}z3kunp`S_7HX#AVBg2i3$eobti%+%@m;PZ=)~r81UU7c~UF} z+0!S$*y2_3z5^kio*dz@-%~&HbrBS zLEBhMl`+wXa6}`ph$Mvr`RK!=IEjEd5$H}Mu_1Gs}iC+UvgauX%#3%ZK-rtF*JCa&ME;8STOXtDQ z$=-3;nAE} zjCEoba;hZ#I+w4B41@;-;Xqdc`4AIB1e|o&kc?p`Vi3eAD<&Zkm}U3&IA`@WP_fiu*u z07NoA#`(t%4vv22i(fo=)17w?in_k5&AyqPRxJa@T@@gmyS(B6)i z=Nn&-BPAT_*NpnvAQuQZnGR_Av#zND#WciPKC1 zlOh1ufKMTu9~FmT(oO}=Xwd2epm+DZf2rgj0EfQye&S*c!Y|J2dS_!W*qc?={N6l=3o^74v_2J<4rT(T`o7SEthv3HqAXCY4czipu}Wk{+A+<1ry_|C1#WL=b{Ye|qO&{aNT?0)o-${1tmy-&>R5~O>4(Y1M#E2IlV<0_c)W`px_t=YWLnqD+PNqR zo6$cmti*N!VstS3>-FH`(b446@$vObCnq~sPEH8=x^?uPXGCZ z+uOzc8ymCITJOc<%QER6Kv(+hfC#mg{sDPk4P z6(Rkp#a=ThtXwT~B4}@l0BzU@g!}_v&?<&eS$^umX!Pkjr_-IgX0vOzj>iYvlgY^p z)w46w+BT?-&Kea<#JSrZKk+hldv-n#IAvjfrzNc8-sCZZyr^Ajk}? z{rDZ@@u!}*y?ymr=gx)mbzOmwT)Kt0ioqb0q5H?`tiO~!eSQu@}`n4ne731GV^w7;nYn<0^bne@H^Fvj^vqrgyw5CJ|l z0i<`lBhjz^D(g#~06W0H0e53Ae{}(U7a`>uK-I1Nb=|)L4u$*%Tod_Tt!s)HIqt<%9Z*nx86 z^)m=ar#S_9O$2v=PXHSL$b|?zXAulFDNMTTJBe8UD^A0*{Lo#K$%h`>+WO+7^ZE6A zHaCxN-Pl;3n@-pB$s|mM!%!kTJD@Zs|8cU1=HdkP8A^uM_`6ari|zj4THPCzA&5X? z5`tsgg|!Z&VoIef4N1r+iWbC6`AU{^-H%NB+sx`{4BHWzZW4e42HK8#Zg9VzpVAbN z-v0JPzxHdad)|k=D3BAGWqeVQFdZ~f4APgC2ymP;eGvND+eV|0Ji1tX{uztK)dw~= z5ARqkmKWypM#vx4HOu@AFHL=wYk1Ct#h5&5_zj4hIu{@S+JXpR-K~RxIhsy+ziEyi zoJ^L#yR&oo{rBE`VavJsh-jE{u}9|kYz18&U`!{1?lbe!&AD92@m>fl9rM@``DDzc zh{RCdyR9J0RU#&J5VVhB7y1LzQkQxKY=$f&frx&}{YjUBgt4}_qZ&yC0MKbi06Ds8 zV5!@+U+ncaNcLWVx0)2SB!fWUZkcyuvmX2lGV;$obw0oPD0b)Wn$MT;em@zHJMtwt zd*TIqb%}moDbayBRTwj3E~Y63gdx9;u}B2jr_^BcCtj$k2sgSu!@G&UW1Llw&g83C z-tbh^9)VSiTFu_aW0jU&WpDE>-0R+yN^*!UUlz6Xw?&#?7MO#~oXV2%udxk^1T~%>L)FyGEX($qjhnNTvFkVp3 zld2sy^#qV(uddfAMgsvPST67!%jgs@0=kGUCNUdl3@7~`ywQ6}<4A<3KLw|RgEQgX z^pK&mPA8I-BTz?_z~b4~%DgX`KG76}4K$%^bjq=;zmrTc=1r_DfGk$k80YYwtZp(% z+vw-(3w85sI`tgj=EJ}3ZCw8Pugh=&53Tjj+1w;f>F6K#_KwhY_YH^XHs{<_ZV17w zyq8H+GD+hz@qq5X=LgAn(_aB-n9M)PLSG0$Jf+=_k4@9gr8cGZ5d>>=CozIFYcLwN zH7D0jtggbuC`SbkR?d@vGOn}=VbzUP#IAr?3y|CiZ1&}nPr=Sr4;FN7UCZKJYxtmI?B$S${!KRk@vOI=e z%8H;X+^B%K_C7dfNf2oj;{>AF;FM%3Sp!u!B^0`5LZ3u{sAV*hddt*PSOt9bN2621 zukY-{m!CT))iCqPgM-z>*oA9fOgs>1lOp*+CP;`f{~IG-BAzG?mT_~ooB2;-DHCQ) z76C;MDS`a1#@3B2Ngkycm5>)>&`lQ+0tG~k_Q}Sy^M1-x3%A5+awd@eh<<~9`3we3 zUiKwjHcG)r!v7fUTB~?gmyirZ2sHrf%9v%td>LXhO^jQznJz*I%&va~B1CKnCU;{{x4C|9+_YvU*?Y_1c{A$xs{7NU#`isyL)xVPS@ti>8e4X zB-fJo!EOR0w5x94KM$hV!kFM0Gum0aI0yN;qPbpMy}v4BEOE!4K{UXp zY$o&v<`u|~xV4rDAZ=K-#^~SVZ2afYj>HN$BBGgWX^Ky1p(YSuiI%X(5W_y~p|0Bp zlr3ra=SU>MW9@UHXpD!?VoD>ZV66Q8~9XTL5QsQLq`~LrbZ12tW5+{*JV5f!dGFK&ke*0CPUuM^=Vo{!q z6>9*3K%)UUekNw`k;50FcHsGw;oCS1Q_Tq>t8|QD(kA@82EIW$yH>}juMHnC-r-1S zwcb;ygoe33+wU|NU_V{~hNZwujrfWhIesYYB%o(s)>1woyG8)z?{S{8n8G;I^!AQJ z7|CWFCts28ha=foiEhgnD``=|+Mf|uFcu^~RfAq^GNQt(=L z;{%l3Z{131p}N0qHF~**pG*0&%|Bmi{lklLw1)gS9%2=|%UpR}oT>BK4Z*bgx0R06 z$?QMR5ueZQe*}xLFb8QV{Lds;w&24YaO{{=@@x=+C#!@@p7m4`OvC-T14lqh(ln0> z!J7g0K9I(pW6Uf!*d?OM*-zOZR;OgoF}C9YK8DcoVbR7VOE{x*he{1uY12+LDe$*SJ1RT z6<6VC#k=5V?k0qx5H`Zbo(ZD>`WUqD!UYzd`D0tB&tRq^6B!!mpCtzJe@dOXMI+bDU<_ItghCXNZ)O&Ryk!11Z zUo2*SzQ8ZQ^>wY<>j)PNvTFoi8#;7F-@=g`Jjo7uY_@t@uO5Ba1%sU#gScJPb` zyaQa_@j9abC3zH?EJ3b6MHf_Lfj_-w^5-k!f3}u;4YmP31C)S&zpK>@$tJn#*|Y{l z*1tguMF6>jBET9Tm!PorIXaBAADU{cRn@XV@@3)mzoG)bG^g<4FdYs-)2WA)Q#;08 z_`Pq!#~tAAtyl%SwlQFJ{)@=kI@}MD=HEsHgdRQT7%UBgC78TBBYq*H;AWOo|570Q zfy$z7-Y>O&+9s43yY`4+aY9^x&9yfC>fDq2Pw49@WK}0^_J(AHIj3Ljw9z)k5q=HWUeV|*5nNS+ac!tX8f{a!VEG&sM)Jcb5kgl{pb-T6h-DuNI!6ATiF+r781#5`&2e3(HeX*91wwQl8R2jUWV9d!CM;|6e}UF@veH~KX1w~I#* zJD~)AI$58yG-@ULKU2(enmLn9y*re^ah+0fTgK=dl#i z-yZbLE3H@G=D+la4<2#cCa8W#5L%%!hTDNl2({F>N;Bga@MIo`r^37LtY#PMWM-!j zA8=QUAeu5-0jy4jkW8I{dL_q+4+_@-mLxy06v}dP5FZ?=<(4DmFp;TDVeWD1>z7$X znEixUF>6iC{%}Z~UKYwdC;A6tMW+yV0XN2P2|@RcKN;@-F*f0JHk#T5O7e>M>t*(J zZl;-G2_X2$G=wwRG!U*9WE!QoS7SE{pnVVM)yW7BU5CIRz*_MjaK-SmkU%nqVuDX+ zN6PU#xA=OUA3_D!b^fvk<`D=x8h*FXFZubBO;R2Ms8ft z>rwVlg&T|l^og$>spS@54|i4e>nTVT$nO|qWhOF->+%d_yW? zh43Nx?*7gp2(8cpyHtt{R5sa1Q3Lu8R)Uc94YbjqIYF=AbhNYH3*KTQ0%u; zryc2noJq}6iMZBfO5-N2o8}wl9^3+S3F9C54WErY0+dYa{RhMGsfI7WL|#T}O;3_&oNsYX5vE&4EI zqCXH!1|a7O$T@{yn%QAR303kD0!mQ#0tC5EdG~>bh0_;J7h~IrJ*nKTaK=ujtp8hA zhlwn$l`!*J32r!2AxDbBcQKIly5tv0d?!)!Kvd8qYzdm(yLt4a*i?!hoWdAF{DD;9 zChlPvD%=7Eu|Vt+mZTDJ1gDriUMN^7>RJkR{{43CBXSPtK2jgr&I~GZ?5!>UqtlT= zo&2W}@ix*_3LEeRuTLik-warQJA`jC)7nSG%CX9kT7tsYT+vQ0chkj-u4aIt{}_}r zelfJ^y&2L)ch7KhiZG}Q^Z#k?9!6JPfR81})N90r8jkCh1tu0e4yL~6Zv54X9i9CT z&!DWMvKY*0SdumS5Zm-SSLS~QoIrZ-Hlb{lg8b}RDO6!fb)5*Cx@+Shh6FX?0D*Pp z>xrICp<{K+OdeXy-diSd?!-JI^*RJSqm|46lpCRIvMP&8!U$FSY+-^KJEC%zf)_9n zdSbQ>;7yoWlga0xxxbK0sH7*bi%<`-txb(AX1|2sP&``{P=8Rqxj&qBXOT46UG#uT zA#(KQI2Z76VV^wgCQAj9ZGm=@9 zKoCKu$>)%x8EgZigjX1Q0x^4Z@o~sLnt6Om??O4jDLk>G$UT@+IPRBhoy;^J@{MdAW~g*F%eT*LAB{RUc)IUBcL;X!QT=w6^R|fr z8&_0lGI!H6HXBBdzm=k$|Dh!@^DV!r>%b6DRY7XeBBwvFPDP>d7|0~p!XAXbSgpq; zr?E)nJ!AiM+EAHz!u8}6KmO1HI)!!SlnK*kS|LkaGy?2=E6O8+4L7o8! z`hlFY)hzI!*{-G23Sd{f#cqv=f3IeLJivjM>C~4&+-ATAr<++9U#~HQLhM|S&zJD$ zoPH8B{k#dbmx38xd;^GoDi@E$7u>cvgG^A9!eggF__dx{$B2@)x9TNGCFnDSTPbEt z3f{<$nv-VEzxj?G!?RCtf@f#`yFEj*=pQ!#Uf|)<3Y_8rNO@DT^5uQx8G7lGA)!$j zCTlRo_-36RH0Eb2!5frP7qdG)G<_Akk+@;-`XTgQYsU2$v@lm7lQUa4gG^q`rmABW zh1LpFj+q6mW>rX{K&DB+Ha%Yxswt$A`HseUq;(jSOW9#v0Ih&Rpmd;M)`I5nl}A*I zz}fj<-`yJo=vfZ6dW2BJg}WZYKVw!XO?Dkw?rJ@tH=kuw#$!#sUj80g6<(|N-k}6| z9ix==1AZY}2jSD-5Mg9gC|`zZ0-4Ym1XF-hVNqzp%$Nk2=FVeWV_|xmtMQ(8nGyT0 z3($B~YkVC8(3VgCNzh4J%?!8znns=-SV206R?XJn?QFo@YocS;%<5Xop|WVhXktB~ z=7Jp)%p~HG_S31r>_@FQ|Fb2WO2VH4nIZ%-K^YQa7RUsrPEH(zuhMWcVHt8hojY9U zrFaLKXnLTHDbT4*Faaf8Bz)WJw}-!eL-xYrpDe9Rrvy^BG62U|~bU;F_`vZ?32U4u+&#=yi4R#yvnfK06v zAdDA`0m??x4^SteVx_EWmB5vFQi*$D^b9WpO1aIvI00S8N~dNfO1Ko+c2O7bOXE;V zVEvvO!QISPOVTfJbSgm6vw)y*VFF^HK!KkXUq{629`S`-y$j3?(k6TY8hsDF=WUQF zJaQ0ZatR-Gfp9tnGEE5Mft|}B-28?SHmeS^7y`T4l~nXKbs>$Mj$_GbA!hKS(Sfe4 zFGNJOQy<{=I5Nfg-Q6I3Hw+sTeiB0?2;t>}kP=7{f_eUtUBj>|KgSkPuo4)Yy;t$z zP&vV-r$DA)11Na>-?s^PSs+tZ1Sd?}qyRe01DT=T4FVlB*ATjJ1}D%Y1puQsNDPe` z=fFDE1;pO!0)B->z=#u-VX@qTkDYmi&mv7bljnIJzty*z@*B?IfUigEMv&>c*}~%> z6VCi3Y1{yr5@j^j_B%U*gU%an#UXof3yn)CKGW3jP7g@YKEE z$FP!-#E?LVG`^`xseT{XxcM!j3kVTKq57ORK&IUF5IjMqLn+ADBiwvDflMnalZ@s+ zx*6Kt2SBEt5{$v!JM$TP0!^ZZC*UNEU+LzZ)&)GjveX&?f+{@eYzlp%F0tAElt%c`&<(9UBuF51vw+9N;# z!!$-20kiC84v2Y_0*^i=mC7^I*HDddb9X>jL6NU4WN} zZpkh9vah;;pFjx^FN+%fB*=8dv9k$eVwkDU;|Islg6iO;f**)3YWHIMmcX@AY;JGo z(iL}`kw!q#3Ok*`SDpbBdiEt4w5$W%y5eGFv6FbWOpD}4FAC(>9*4bH+)3YNnEC8Tl5T|Wsm z|E6yxn^}EiX7g^FRh&mQr4CFUAHTEF;MM+L8il1^m5HATWEy2c*X%aPWV%Gs<^^dS z5&wzbXJP0uBC0HlN7$2eHkPkhGKaD#Bw^+=um)IwI`>)Te2D^nkTQ^>{q)FV0=pD+ ztYX=`@h#HN;r{QjEPrAV;5gnw8fWvbb?!pe%LA7YJ0DgH!f!RHb8dvASx-Qy_}QS~ zmtn~Jq^Wl>nUtde(ukiU;@y(%==EI%2k{yoqqDKh3)lkC#?Pd+t*w*;gkLfwRg;Kb zs5JKcbpbEK*rn?lX7bSQMX{6x4LbwOB%kQkEU@Z`SCDWPt zh;e)OKdS|JQGz9f@BI-vo4LbL6VmvJNMj=;Ejk-!GzdD6k~a+sltM4$ISeC(o&~PH zOu~OrfZyN9a$rEdkI>o3Mf6`l8V^RMvjnd!4@|Yru;GLqS|F6f(`0sYX20@C7^xkWz0@B;bNmD7F zNGB9g$^jxGp@|1d01F^;FZbpD|M0%^%Wc)KIt1DJc?R8e3m^kV9)9j*X@akt7ukmF z<`Hsxgp39Ns0;yXWOt9{a|ws-;zH<9CJ_s=gr6fe=d53S0+J`Af3 zi+ZB?>BZc;)X?^pUL-p_|BoppjU5UK>lizqif6ibZ(8hFef;zO!;d9KyAqeap6U62 z-2E)f`rlAJe5o%8_ulg$kSdtFn{O(OO5rZYULsLL6$65Gh2$KBH_D(3Ro^lS`{C#r ztM$T*KdP^G0Qq`fR4PDg-J@mlAjo^V$2Wi$xuMa`=*BQ>J$5mI~8pJ;97 z^v~_AfP^U3nw-1=i|o6!3(l-xHMjr>vY&?^M3p`L;JhZdnu}j`1(rvJDXk+)&*=;!zLMzNZOGcVg*F1_+20cRd>J=ao9OCHg1E6 z7h#c>0n)>8-R@NybCG#^ym~XcnJPg1D^Sz^i_YVHqeHlyXAlUq&UPRe&6mDC_2V9$ zT|)0*_$(%)?HIqYf{<5Ob_D|{94IPgS*BRrmf9B4y<4?dHKcd4o7)GWL7JFVA9Y7K z`4URxYF)E5_PRyB#-MG-`=R@y0`v8&x~wSOjgUu$`h;XVhwgKAI5xnbujNd{Mbm7> z{MM&s<-KPcCv}_~sFH72cUX5`tK)E^>REHyatck8+0$;h-abvFeXU1SY|Y+nU|Dq} zbz)uzjKmlnh~}0^bN11eP2I9<;>d5C9GkxJxhP420gDGB*Tt*wkf&QSdoWfE2WMrS z$pfU!xNZ5XJ6%V8Q{0K?^Ii?`{$Wg%FP1o;C$?V2ZY3_?uwApZYw#5lgJNS z{N(?w>}yerSyDymqhWxB-dD_-YH~uRbp;kD+|?1ZzD<8yON3&|bq^Ai@?K$iK7VmM z(iE#ED2k%1m2)Q6B3Y-+Tj^+xw3TuY#_T#89j41-PDSe2HBjX!6mtGvV%X*6l3}HG zX3@Iw2heiaVO)WuM}l|)#W-{6i$MB08cyPOJ1v^pljmNFkppn~@JN%-Y-y3}d`&GF zuF$)mV*1R8hj8&z4q@rd3A){(zP_OFos@87uYO5gOtM%8s};s^URaoMWA6@Oop@=y zZm}-H|Eg=wpB2H6Z`9YH?WF5;{)*m(KI!aHU{`)D_@UNXl=*m&pJGL&qLLk z3xxP7vcOygaFHgVsaGHDwUl#TPh^;Z91_f^Q?9gOWShe31a{|KUVMxtCx*x5f_$j3 zQ-S7#`uQHowjt3A=w(6fG@9}1s-cULm@o&2t7J{Z`^xA*pbOwzlu0LC+-xBftT_7OVF{oxXh<@uWdT*R18&%AiiJr zIlYT2;emn*NuVDHnkvHEkcU=71-fQFfbsi%cXOM{^x$5v9b5_VdS^-DjK`)tQtkI$ZU$0b zfn=CTk|Qo=`h6)jEpTiJu~{@5X+7Ev|7BOXWbmW=&?7QCPnG>Kxa-I}SN76e_se>Vjgg2R(A18){6 zhxm#b*=lnYbX5-ord`)u=2NONE#0s5Ufy|yMZaSt4akINc6J{gu?tOMXzW%F48EI_ zaaId6igJqFAisi&SM*^Q767oJ&Vv^@o6}Gjj+@Y}uvC7nWr4@mHR%O-X#^=ez4*i? z*wcCCcTs33p}=wCo5ex*8qBLO-+v6s<9p2`SD}*=h>k;_LvUf>9AY=EwvIXfIXBn& zIvH5S|21kZ{Q8T1$)C zkL&2V$%+Xr-mYXcc&({3hjQancPHxE1jN)ZMId<(%$@t`%AiLsivDXSUMc6j3u4KK&%7E=OZh};Bg-gA!3wOodZZM_^< z53z(Zz$|?!a`*V^#$k!39m3*@kF7`1+IWefzwBtg^qcRuSx39zaB>Y4fwX<{*JFwvCX_ z@356y6lW#G19Q}KvnV3*YroQ1n*X(gm#(-9cc+i4{N@T!g|>r>KMoGAKJBkXnOO5t zIPGrG^nS|`w)D@T#Smh9&Lsp(qWMAl^zR1>VuNgw*5%SLdm!oFl4mL(`*|hvD{#6& zSCp9c%`=t+7M*H5YEU@ESF1Bq#n;Z5?{+vi_iI$Z8(kjMl$g60uPlvA@{44dB94;c z^9M)wAZC^ayv=uE5z((;8t|0~&DEqo!UEz>vOZTl*eR2O7VC(cC#=J)PPw-a62uRC zv}2^k^q>zpV?u(m>*Zc4zzy9))~4=eN*0JefZKb39HIzNiT?j%AWW~bhw9|6U#O7E zYHa8oUM!C@VF6)yw$T0v&W%aaO3`8-Z}VgNUAlB_Y-LoVEU~>A)STf~%3%fSMR(!t zh+~2NYx-{O(Cw&PI9=|Gn&pE=*VNOzC8$>%1rq`|d~D&@%B4&g;&-4jh~is;DLKb~ z=*)&Nv1i765tGUg@YkddwKfhdWZTT(XQo=iEfdEa_8i31^7mwYK?^i6Oj^1^uriZe0sJzg0jez+H&T9O*Mo*%lQT#QZwzc3{pjo# zFVV$?23KZp%C=g`AZL4$-qtGH@B_EWG@xgAaavD1{CA{n9(LXW%Mq8o2`lLGL)zn- zSrV^P?*Db-d)dREU%*JvOlw3!dD(r(t<*NHeu352WA~F>J6btg;p*ev9cW}N1|m_9 z$~J0QmQAa4U<2;;W!EQBQ-Gi6f+P3!0P=jDnjy`ReIg|3>fNY!c8=`tdYYX-(^OcCC|%pZ2e3$d1T1tG)tqzPGGd?q2f6V!0xBV=To)6ir_UY$h)N zXQs`Z@TY7F86(8)V)HG)UAV<$Zw>vTC~vUl-H9e*y&GU zRBRg2{o0a&1*EH<3zSn@21#F3=ZYMQ9mTY_n=Kf@4XwDu0I%yLHxfvLF5gXc@<2O? zYfI;vxvgTShcM@xmCtZQr-8K`;j4y(!3){}EYT8L4qgJUO6(Vuv|`KqO(pPJrJQga z7}H^d8?EEMR}Y#6uOPDUNphO`ohHeZi%7AoU;I7an`bB~CUq1%YV~%rq2#k?ThP|}ebvN&bz!z|FOT?g&J9abx9Lx`M{*46sd^V% zNBCss*XF?N=)MaGh3lV>8vDT4pi0H+t`>Q8e$z!HOA8$+*k?@(PBytEP= zEo^4oI#N>s@lM&h+W9kxK|dWpoQqz2RkAI9Ri*2Ex=02uc;#EpjkEZbB$eV>M^dRA zd1m8Xa2G>Ei)ZoQ`0{DohdNn4tdkM?%t@Ixh&5$v_m~62bXLY{Go+_xM*Q6mWksiv9qUMCdg47OD_IlacH%w0Q{2VMPF4Fg9 zWs6bGy7=W;=MBGuxaTu4hqHJP+r3}QJn)Xr_5-gI+Lqnh3XMYHYsZl~cFiH>bgqeA zSkqp>Eva<}zkS`ZJ@A}^XDluZ7|D!U%OfQ|cV2HY%*Q%me)W7nAf0Kg&=UjP6A diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-orange-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-orange-overlay.png deleted file mode 100644 index e86aa6e7e3c8a021e291f704733b43eb31d15cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmV+b5dZIqP)l1W5CRCodG z!GQn(006_F`%@oe)c^nhfQ++a7EO-iKom}?$jv>>%*@OTxA|9do74P(JujV?nLNzQ zOwDa7N&8-pI<}&g*^cRqc#%?8Sq|6tN?;|87wT8~PJRj}Bk_kqH8^;cY3oeeLDtLt zHB)5A_Cn;wgM9p}<{L49`W^5-d-?vlb?d@u)20QJCQXXQj~^dat5t`vZEbC4{`~nW zNfJ{i6kMrPa?hSUvrnHsmA<|{{qp5Y_3+_C+uhymZrr$$qCRXS1NpYkUX3~nsRo6w z^6-xwIZ{}*Y+37s2@^WB)(KQd(=-B5TdUPVK(;V|peDu`tCSMd4Gh6du*?p1DuoOU z5(GgS$8n0!RPos=j8Zv$`gG;y&6{c72qOmgkKrFZdbDlTs#W6vsskWf06Bodfq?-j zm&J_w}HsrzgO49`^S3 zCNu=zW`Qi11Hy-@fL((DDg+Kg(Et^Iu4t{REiEkuHA1f;r>LheMT%?bm@#84&4BUC z-+udT4W=~ztN}(0peU@x{IyyRZS65er&D@wp<@czMr2Ol{E*LuGx zH2&zwJk-zsC%~LvzA|P=>up~U*3lcEz>LfAP^aOUM-;*0l1A33$7m~p2WZv<))^rJ zfCyYUgdqG;FTlpH{mz{`izEhz87(5C5|NhhwE+^15m7hz$oPVUNi50TiadY*d?WP5 ztXZ=ja{bS|y$T94Z4DXUwqC-VF@niGZ<903hylQC5~k1<$n73%fE;-R8i5?*I$^U< z@wMlas{vc%nu3JEb3Bd0^?K#Xm0i%~4?p^FvfLZsXdXUuC^~hbOGe^HMv|9Gf-sil z%a<3oY}r!6ceHqzHJ?*2?fWYKQ}X{BX6_vhRZph`|Iq%|SPISeW{jP4G26qyA!Y>y zP|WEaLFmIZVXzMH0%**`%Za5KPMtc{_Rc%+%=-H4uNPnwI1{tY7|s}e4HuZNjDHI6 zO`SUR#=?aQuOB{q_~O>BTc2Wx5;TwjZ!)>YcFr8k#>);X1KZ}HJL*j}Knt`QngB&m z%uEqFG8Ith3lw?K%GZp)-+2)}&RGfHpo;X-2i2Ijqll1BkCn-UM%&0Xm`0-UNw<-vlut zFU>cc8Tyf1^U#eO27+j$qh+U~rT5;0n*aZ&^qh~}NB|8yJeYDpJqj35q`PN#c6Ox= zj8tHMlI=8I`D7mvOF1~k1EMP=1%x=Gw=;e$*-x_hIru!2pRteg1c27=J;1Y?`A5wB zN@~LWSiQio0OThSK3Y=od|)9z*Plb9M&-!({1ejtRO}FZ1)pcb$KWF2<0)hpe}3b! zcAo)IYyC%%e>fu{2*$b&^?a1`9_tzihylb0$g%;Wi6boQ$08#TIN>^uJ<0axwC)Fg z%x7H$0L({-MLO#GjRur7;MEk5K6R5g>4fX!0t{Y}LGCwuyeblvJb$gaM z&}js~4q2T+>R)B}*2K3Aq<(h68oqC5cApCHZpMAJcN>_#jh#Q;J;`shYoQt(CJBUt zY>jiZSHSpVq3n0&7t4KfuT1aF1Kh3cUhT8g6OEN(6Og0G*wRD7AMh9GR5VQlKE%&`C zz^xhYoblLCGJ2!>d|x(F*(A8uyXK2@o539e#VsR)uQBN>=b!qW%LvB42f&9)GADfr z7-j_OKcLHUFVdCeA`OIVeCs{VLSJ8mFnn%YLJ5YwEdkZ>-_}?+vCYHTD*4L1B65m} za^{QNwIPo8yN0@irT+p%MSI_u0=$CTXNz}KSC4i_kj#54KoK&~a{N1zti6$eR<9o- zKRd(i1x%>rzc&wXx4y}f)Z-^U#go|^S8Akdel|?DCElbv>l>b+I1n1-4lV(goc=j5 z_BH@so-*V2q%U!g%nzBpM$K=M?t71V!z!Sr7sKKg2Qz0@Ezyv_kT|gBzy~=rgW=F9bKi=^AfG^ z+IJ)lN=Ul>d^S00(S1+gk9Nu-;3Mn(1bjiV*Qn&7i)?{)dcEuV4!#0l^=#rKkwJq1#3E=aPK>h(S>UO+c-=AK}K2#oiZ_*v{9vg~te z1igopi$fktxh#QNeV{|2spIor0K({bQ!oX_c59#M0a`{!X z2L__AcX_M#tn>gcP|~rvvv7F>?h=h2wSIss-hmArp3o97+s8JsseC}>@wk5$ApqZ; z?&~GM7lOeUPGEV;Kg;|HKFd3XqUH;oevX%VCrW^%>|KyBLBI(eKR}RD%~ZU6o`h%= zbs*V;i$?;-Snr!h=dDUpjeI94Y7$0?^R9 zECSr+Ef;zBF1^hv+db9QI^N*vx%zaPc$5TWx#ux|4ET1g1h|JET%MpY!CF%M->GgN zTKrB4$gbWh#0p;>(|WwQR~Q@Xo@EXISAXyKS>XP8QA2P9EB$;Q@NjEKh=4qU$sV=( zULH$z? zG>4ja0rvpj;bYtnN%{gFASA}uL05ipRY1cs1^4+PzfN}ewe1U1=tvhme)jsk0zkt@ zz~6pp^OPDv$!#ww1pHXMjNf6Ph~}^MTfe@^(_h>mxMtPfvc;)!{$dG$xc?I<=>19p zIXM4^2VpX3$sS457*eD(?al4m_2>7~1Jp!-9Y79l15x}bk}p;A$le}-b`j?o_`K@f zAD8F>-~|Fp9&1Vl_Y48juKg;RJu-gN@VR7L=J?k9iH^IU1i)44Y0V399xulUaPhQg z^+}x09KU-#>%bo0Bmk^*VT|VnkX)O(65LLE*94q&?|yf$-^Mut^b7%X{Q#i|5Vrc& zWMShF__X*cAoBI0eSqP|B*0EoGAmREpCKS9{e}nN z>zgTpCDt>sV|hmsge8Dt`J*0S5&(b@7%g8&K=1+z-%}2WI4S1$6o*}lk{^O;e zfJe}R0k3;R0X$%!BS65ls{qX^<1}+mzLt*w$sm_jgC&6{#}NX2_UruYn(1L$XYBa| z$OBeEutuM5od99EPg}^`WAX`5ORtnMpw|;1q>^<63x>=SLV$d^etw@PKq$fT$}tWt zpcef9|1#bTkY~DnKURQz5NtnVz5uf})#6e$C>|gH2mk_r03ZMe00MvjAOHve0)PM@ y00;mAfB+x>2mk_r03ZMe00MvjAOHve0^kNSxdT13L`d2I0000VB;=;_#95b^$)H4maYX}rmWCTC1BEKwJTMHF>T@YTqOD`vWN^y7nQ)sLfe-?v+{ifC zbs}&oa5~V{SE|n50Fj1{c?(totClQwE@`f$Q%RbL167a`l`>eBMSpy#|C7TGI$(eB zkmF7nssm?LfK*5Laa&yA!l_%@TeC(g6&^vbr6H&(mdFi^_2q%C(|SrH<09YR`^4}5 zu-#sVotCQuXMBKI%d90^UF7QdhdPT5lU6L56EtN)M^i2{ZG>jHd2sBwz7q!FyWbIq z9WyfQoqE&veze^lNA#8IGdDo2ZP8|zyL#%u=?j|Cl1(nOYFWod?Qj#dNTqAaNM;;} zHIPfhDkCTD*R{hDzuW16T>sGEHDCMAb_aEh)n{ISSlc?=T;sN-C)=$#;R(3V1(vi- z1BOx=23lZjU_zv?trR1d=}7~9r|k2Goqn<15yPVQX8nOL{VMcPsLz}Lk(Nc(pwcD`nzgxfI z3%@#`r%;~>0UBm(b-nvmo^Pd>y3+M7u&k1rPzQ#_m==KuJ%vt0-U{pIna9tecrmz&T; zA(3fmi$EkG(^jZ7wDe7g1e6-aMk=YEMqnIFjFGy)Hmll3(dfeJ?y4uC$$0EH@0i^PFQLlc#@TCP&)2nm91<6wlLND^#> zTL%_wvqe)c8DCl5P#4B>Bjx`SplQkVo?UurY13_1CU+qt)7Xu3&U|pbuQynfNgxCF@RaF|wh78# znho5nN1(kg%7%&%5nW=sl!3ACj2KX5Kt_oMYqXgIb`two8YqrRJb%3e7-H6Wg3mU- zvmU<68$8H{RxQNi0Ce;mP>aO?z8u0wvl;+Ke&3Zo&ai}J+J>Zhu1pn!iU>JJhc#L> z*fHZP_Cz)oLu2gMM}S9zv%J{&{pypKd50G{NfRTLQkE}Qk?EoVSU~UzwB}&kKy*yl zr^HBmPh|9ovBZQ@!V|gDNcB^!_;QvS`*fG=EjwaxzZCfQ>G_v=v;F&p)u(xxCt0Q@ zGcHjg6GRVz(=j6jGGywqj64CEu2XqGL~@=H36?5yA@&G~=qrYdD9IH(v6;FF;_DkwdQ z5RV=KV-j|WnJ6y|Da*A&DiT=BWbB#YjnuGDmjUTlOF+mRH~DDg$D7{UJj(_x{Va)D zw3Z04hSinD!I$|va?lY(02oJ6CcCis0ysyfg{vva7)H zl@Smy$1Oft`_5_eHZQWQm-~wGAtQyq%njTTWc~ztwm2pdbb^nv0=~vj?E*tz2ER*2 zL`bT)7-E%AmIGD^Y4aZj=S9JeDELYU@ab@aPgcKmfp>U@232ZUrLNGezE->7=gR!Z zK>z>>=8v9n8?Yyd>7Sc~>>(@o@(D21xx$Al-@C-S zJSo#RWR$V0=z<)0595vko+BVn3<8vaoAcdysQiy+4)9T&q0a$z`np%AFT3!uEYc+8 zF1>T9#}2y;uwOO-3Fmlw`4?x*yF5jkIwh31@kptIi}WTBnSekBt(ju^k#`ae@Z1%O z^e8dP5jY^$J1Rg~mQ&SPrX^@o=D+mL+cEdpW+-mIGy+O&@N)aNOO>~Hnx+)|MC(7G zLPf9zA9=C>JK!!M7R}!{_~1GC`Yr&vM2r+8B2+Rn(wj>vrw^nQwiz&_#gGNL(|;LW z&bGM2t|H}^L_okYPu71oxBLdLa6&4+f=`uQnojZI3}4_8Z~%8VKLBSnxIjssD#1pg z2Pud>B(r7ymWe8cR8HYh;x=VE9Pm#wKF5E!iy9|i1_3@TZt>~T6Ho94=c!1JTE*c| zQiVK3r}c3&6ivSf-x1{%=#fLIGE{w`Xpjk*6z^!^lI=VL+! z>=R;?9)~QEahq<(TK>zH>lfTV0R*h_{M;Xw!Z*3e5@X8v>ecL1CUS8d(7R+0P+0fu zPz%T)M}b#(J`-4v5b*WJiS8lcJtmV@h`7T@5uwZuF+=V!IGf$$KkPEX9u4ofvZv1F z=!0tIDV|`%@m0r=6g)VCoFf$B^ZD>KfI@O~_5}Ejri5)ECX)+>?Bn69m)ufJxI;k3 z0uOMHp4tDHzjBuWlBV}-0cFne*8C?|c#}(tyc0$KvNKn5a5HDdi8pb&f z08k)tB;SXKNR=YM0f}lv7*oFbbI4m2|BCC>)s(y<;N891qmL+2(Q1q0S6e zYrkE9Wzbq-iliJ812Uy7n?C=hI|q;a3p;4(DMQC^Bu+6iAPmW1)3e8 zUdHug`5St@2lHqiirc0X{1{-}%K!?-d>-K>|m7i)UTuecnaxBKRZV z1AxF696)4k7OGBz1xBoJiqP;FXKBfIXCT0%#pTu;YuuztLWQmh zk&#rF3s@zN9kKel=PbqO-8d=a(WWV3JZ8ikFeZ_W41pF2o3!z+a+MV+cr!f# z0V`ZDmoIaMIeno@Pf}_{m0$GkSxK15hAQj<>LDZDK$nyW4M`xQ^;bkthoVi36#~OG zPNFD2JplsgtK$a9>yCo&);mu^Ztr|wV|EHMjS3YYA(9HHF`=t~ zXn}}(+-6^Nk7N;+4jp`tlPpo4j(~_I&PHs~qC{7~tTz8p=*5+?ZWL-h*Z-gKQ?Q#p z0J{Lx7-Q57X=0eCNvNC`i=rkK&2W)b5<w?9(8@ z4_Tq3C~!QbOVfF~fnpV}Yf%7&eZF9x=2Of8V8KO~A+lsC zz>t8U!t{VL2_ua1);}<^51$Hk5tc5}rX>GMk0QXQ!IIA$^Gcfy^;!}tOsJ_A1dGvD zBq86((pD&ErUws}JQ28U%tTv81xtx-EFm4OxsRpF7N|dH@%R@ped;85uuPls@h%Y3 z^fyba@;}PWW64z*3&S7SjZ^0d>-+u>HQO6IIU9^LRbQQjN_B0|bOMA6bkcuf1B``T1Nk^Dnu@pb$E;CI5M_+488yamPWFI9N3r zZL2?GGTj(G>j*D`pw4wgb4SOQbG=8)(4)#W;lQ)0$h3mL9CIFSv_Sj(e^`E07VAu) zaViLE~#Gkg5sp8=ZrB2N=PvmHN$+{=~eaQI)3n(T6p5f+4#ia zI}P%Sqm_zJljO6m`j0U9L$f8A)8L`K&H!lX8gD2`-c2`V^0u)zx3n)Xs`M&*p{hCD zp2}a7Utbj}-;}6Q+-c)EnU4s0vU=GwYKri|f)7?|=U&8r;!IZVFZ|YscQL!VRUA_M^2j@p0HP|kmh$Wm)z8u1p?igFRY66Oor5)f0UCxmudx0=>G^pH}j7G#( zfmPYsPCBSICt|2hia`w*Wfnh^h$qJCsIjh`Fz()H1}>9MwJXGSQI&6ToDFvQm32| z0e6AA@TO6Wu7BCNxQ}MpAK78cjHZ+i*Svr_n0e&jXFr2&DcX)7c4qcoFMP3>UzD*4 zS*E&}bs>4id#Ol&6CT5_Y@#7L;lvjktO^T#SPz^UnaoUnUg_6v}}+Ucj7G06QLQDGp1vNID;^p zWx2NRUPf{>{kE+5O+&BRzv{M+5g8=VMJtYUvn;Oh4T;eW?KrR%1>U(=`4SuNER@cg zIh!D$wDU5kjU%pC42iW;+2g#dC-z!#D@;zjPLdcftp>ng6?kt;bfOP~jhcE#(qm*) zsGAxv(x(`^KJjm|+@Erg?0aA^N?Za9)hvZ%FBD5$r_hjMtpdaNEv5(ds`80BN1L;V z0~=$4!7MLHY|o1^-^x!LC<&9TPIBs6gQ}Ft*BLNy7}@a7H(uHB$eM-QFzA%06B)5* z8WVguY`%1GK}~d*G%BVZp?eZZztA2D)ET!>=brd+nj9JnaQCsf#D&&5(Lx59zfkukbKwnoFe|f zYl9i{krhktWicVM;b6w{C{)4&16UgCy_;jKGsevG^=zBMH$rV>0 z)QE%Ky3ENdDk$^2eB-6;pumb~p&{GC8JMzO>c+So6SQ7e7X_ObQU#`NZi-j>7* zFU*VFt(^L-i<@=N_rL9(b(iB>uEn>*4iw#n%M6d1KL7AcbN6LzEDYL?V>&+X`M2~( zy;ZZing`1(tHOz-Eong zWB-~e#K2F;Q_iCeI(LagJL>C56C9!ueM$whqg1i2mk$sq;JS|J zo4E5_pw>!&T?qW=`#wkW3;_*GZw)X;iQRFD#aajO-9k}I6KcV%WMu3b- zES4$>JuAXwN}l%c#Q`6ds0IT$&wYF+2n^W&l3G)YUux>j8V6{Z8a!heqJd)Vs?rp@ z&T*HOCF+%40~%u*7PQMS%E(gZk!5`}BfkdK^+>PPNdA&^Lk%jrkyt zw=HZ23u&fv1bkMuyVK&1r?0#U2|R$Vv3Tua72tRnEypOVZE?u zfpp0j5vU~lEl@zA>U;#`I@V7WJDBwGtBne59%@%3G+SzgU#8X!?eJxnl%pBAND-hq zvq<8!Dx4vu$M!KHpFnR2S4$C)eWXuVzefVG-*M!!90Vn;) z-V-R`@l@D@uAi#>uz#oz)du`?#!CyTfsix0h9JRfNq(p)I-sgNUQ<2vZDj$h;SBrd zd)R0jtK;XDq!88C8gUQ)PovYbGLX~==ZolAwrJq@)xt~>kt$O}8qc83iE6KX6i}WY z13V6YS67$%S~0<cbJ0L7%7zMzmH*KHjoI$)l9QdibY(AB1py2zIEDG~js&fOjf+)_`*t7dXodg9NB^twcD$zNUl*ckcQCzTHE8 z?esujQ}m);Wu(EH6O>q^iU4vI4l`my(6j+XPJP>a zp~EyHKs`$?EzQ)`OiRrbtKyS4S^)S=D^Ma*=?0`{a9AARJMD8yWqBSEvVvHL`mTzm zI^a!@D1f>u@%==5e0g4M+^n!R=9>6WbA)jEwv9API_{}?{aSz<#Z*|=L3(38p;C>t z9r+|dDHXiqHRgO3X9$c?ngD#oim?glu(r$}Bgm>TlhZ>TCLtQ1cT`b|7%87bYVr`22i$)xRzXNVQb*dI=+sLGr$tpJb{$f6~Qlni1)E= z3h)DfKPLz_{p};fuc#JF)Zv;C$v34D4p*EvY4xstr!Qng=zIkTX?nWg|EFq=^%jID zr9Dzn9Cv6p61TpqLi6C!qmMN@x?kRGYXStIPjX9aJbjYsl-MFd8Co z#wF#ww-BEdq3YmRDWh?g)ygAhPK=mq+Mx5QuIfiEsG80}!0Ey6NSBItCwhwv+{WiS z6c`;yYKNIoXh3E$Eh)%RBeviNjSj07}$h9|a_p7Q_oT*ROS3`*=es|3nC|)#-cnf0aQqR?pN2@QxJN zL;G}G30#rQ3momIxoU2uDoIy8)PfqQ9%!lZH7g3*KDJ*pm_dk=5=^M8PaO~vOBRIM zIVBQ7)AGxhhyq3k(@rtQT0@O;`D?nW?=*!txTig3=8f#Fp56unA*rti24>{@EwXr% zc_;FSM>7HeS-Yv4nO$YmyAo`aprk-d4~LHtDnU&fYr>Hl$v{p_wBd7o9%rWn^=OJ) zoM~_aIw}mE!Um6<&yKPGeJue_{lp5e!h75QXBBL-(oPWK6)s@IP>qNWBO-(p6B@f9 zgLWwZ?*P;gC9sZ%9$!dXV*p%-M2Hqe{?DQnYR@A0$b8(%K{rbC{y>f~$;_t56fHLK=>Ts}D&+J! z#E;GUNtZOTHzc$j&2fkgO^`!v(U~Zk1+O|nfjwL@!6gEO4~+UmIAWvHg-%p@|65(r zw>m~=I{wdr*ve75(#Y#L_;3Os`6xWPPih1RKR&ilr3O+ zg(^j;uEz2sdqxY(N2tSVz-y=YdVy;!)v;t61O5Q@))1f!_$PAT>vy`NhtPvU{@E1Z zHK_l7GwNu-;WQ>kCo1X7#DK9yuW2IDg4&Za_C^>ZY?ge3N)r|{Mm#$=&)(>QmRt*1 zjj)9nyOcB?@=o)7!5lIcML5G;r7p-a-^VQq`ayG*PQTJMeXl9SihDK%2*2sn|C|LA z?IC)GrMgrH^z88X##>MD>rltc5*cTpfB??7t%T=M$rCCE%E8l!$}$D`A~`k-x(*d0 z8U+&crc!8SRR%%|>kWf6T--sYm!v!t3qWY>4e@}4$?fx$9H~u#Q{-HL|m~Ftm!T+V97JSVv_?T)(OKq@Y2hmC( z8;NCD@Pq^w8FIqYhHcZVMY|5dC*BSe+i-SAu{a4I#xRoC3I$TwsvxHfP*JW3HEwv` z8YuQG0Jexf4%?I{ZB6daRDZ22x}_g=4E*Tjsk-G*_P@d4?DDizZoj%debzR?RUo%DLi*E{eDisusUj3kaoBof114O6-l5N^v z8S#A^__h!}6GLxOW)Fc{5TOAmZDaqTDjcTdJz9v{h3#*6yp6+EgiD-+xu1D@ct;#Es}3V#g7@UHZ=~xSX&}bzy_4sAT%NB)A7R}8`qkV zM2Y-2^^G2x_}2b@(F!mX@a-Xq0|>Nm16 zlNZqwATEcfAcDF^l+7IyAuEk&tku+&Gcd6vZqPI0T_WNG?2Z)Zv3+i1uE;3wS_v)B zwW?IV(>2}E4?4j2pGtfb@XRW}1U{(Vii3>1J2p4y+LzBrd~33W6kBE2C4o|(oN8!! z>i}go))LXZFf^=qZli_@;a8dieYdaQ=(;}Fk2*B*4g4=t0jC{dsg+ONTUjr%ob5S8 z1PI6zJw!=Kfex5^+<+8jQ6BPR^tONkWhhWQi zitw*uXXzRh6!6c5rnSm9lE7w91Vm>sKgYfzQ!wB*W*_4K9b5hoSQbf1d>a&26Xq(i zK#ur1UO(5WG4n(HPB(O0-?3fRf&rsN{#T&@FC2jsz0$N%Lp>?BVk0Y@)QUAztEZX& zTJhqP;SQer9od~m3-{9Ku=aL_*d;~M3a@9!)Wl!cRo&88x(oDqDsSdrT zjxOs%{jL5^|I&JclbW@~E-oz^pe$YHdfQHPbT~uC1zp-qw=c|y3)Dn_0%fi7d=^Bc z`bIzMd)?Imjo%2{6Zl^F4=mVuF+CbZyZoli$NE(N)OtGz1{$-LZ>$a?OPsxV>a62N z*c#!5I-GD|Lvb!6#3nk+V`6=$ySk?bHP((U=^cHnkM)T@ zYq#6X4u{N>`XGVj?KYq2Vqu5>w-KLIN;s@6?9t+G@ZtTj?&`ko>!FThmIwGmeZ>C* zDF7Ux1fE4g&Q|0pY1_c5MeRTNlo(5YRh5}ELSoC-LzVPKb|r>-3xv;O~EOm5i^0Rec)(Fn}}Lh3*2A6q+r-^4RJ ztt0-KJ##D;np1G=9MS)H6>w&6MB7Hlgy;CZXH=X%3t#eoK0mn`aN#(!pPoOnhssO; j`|ICd|Ni>-*T4S-+W2#S@pAwA00000NkvXXu0mjf?C4jYN(@iF9fvy zk|t&SRyx%z-A>x8G`{#yntI;V-Q8X1ScbXH)Fp&Dd?`uD%+BVC50$=oGc7N>vUoA| zU5!HbwT;v$m7tj=e`K!docy|P=c0kQ4xc@#EzPttq7@;ZrC=J*Jf{v6)|C2)_ zJTrx#{WW;C%xv}XVTA1iF2L-nycq4`izGwQ!%n`=yUa0{?ILrbh59U=cDq*=hdNzX zJmOCUk6m`RMAOD;C=24iI2M+|nu-JXerPi|-q?;X7K+Q=FgfL@rz%s4~mF!se%m7ilk zh{4jLl;{;ZIt>Eoawma5l|DONgC|w+!{0gDu-uVU@x@B}B6RAtjnU)J=C-8hXH@Uq z(TJgQ%@Q9qss25f$%X5NnB=BHpZ89u+RWsS`{88<&9r4TfTjGU0%MJWh^IN9NF)z{ zpoFTx)0q<`8SUQJKe)NAr;bw%eJQ9Zo>;a55BQ6tKW?f`P|xi@b#P-NVmPl!kI^Tp zIQ8t6^=ScyhSNj_JG(BUt|vh2&H1XuP3`;G!# zQ0MQ!Ht(+HBB=wHs+8*LYyw+kIsQj=;O=b$QJb})*U>)Te=4Id*G=S*-&>vTu;J+oMj6P*7}tj(rIXqHI)s%2*4kJeP(W?esI{4cHf^$HR@>n1w1h;(xV@|q+w9;jO?X|_N&X`=@SO-qYx=$U*_eEGhai##1 zbS&es(U@kjA68F`^poReVo%vyj+|Ydx4`XNFi*1EekiXa)E#c}LF}s4^)liD{jl-~ zjNwNl{`Q{Kh^&O&4NUFpkV4z;CcMMW8=!AF5wo&I$$zKnYz&PiJA z(cGx_CKn{R)wZZpB_&}Co12?9W@cu6&r)2w%uZXwSI*DREv7N%oUu_(;tPSj$AO}!r7=30D^Tcdy~?I;?bJu>YHnRdFp`(u z(WLenHy7qJW7}7maONKS-EVHtHo)X!_sckVm`qU6rM}IXaF?^emG16`wXqWpvTfaK z^W?Ih@_NfT+;tu$KY!ShGT=Wi9ob*|BP2?plMJ0xOsoNPb_u6^#}KuTjgZGQb-ZQo zkT$OcOfX6W7#S|b_8Ik@ysE=ZOR3Tdvt2lrcL?UZ4NJ^`rbkyvuC4^+z9XI?pmNk` z35*}-%O5r6QjmTRoi_)wW4c-ki7L+@U!PTCYI3=?!<_72L^oaLU^)~Y@^qXAW!d)P z%~vauFfLk>BnvH|_XastpS%@g^Dd7kUpC39TWi-_y<0>vQpfg;s+7)U_>tWYNCwU2M z9mCbPSwArP&@eFZ0xR)Qitub-7g;Qn=tW+45^OB67XJ9;IXVHF7gRYd z{!jevo0tHnPRg;`YC4EuMbTyO7~sORN}IK4xxlD`FzU}_z1aKr_t&w*!PKax1@o-O zJH5YQh*b89d&4Nv&ac*1gz)` zh!p7GcjoA>8a?yw`{z$!C^x^ZoMFQ)ip@|#4dx-z4ovzo1G@FhlG+}V=?pOf9*ysR9Xucm`WG8@+b)xovL02wkU!h>~3xQQ!CkS9m6 z3)kry^00crZ{2C3jMo%X*YSHB@HbxIx;^-`c$#DE3v?*egzC6tx@j_FG22F8GIp&fwWA1nXr;!;evgYr_j0lLcM0Du136Q zp#uK4me{->ot=`&dM&R@el~N9m!)a@xhJRdR%Dhw0kKD?kK7Y};_Ud>)_o?YS{BlB z7x)~N51W5Si!w5}*P~Mmwom<l3Z zff_ZkZY7k2xskB+4-iH&mhQr^j+Yk@z<_TyMA!%uoOSbwUsL5K?gycA{Z;Gj zy}Q#k+*GhN6;pD&4_+9Hk5BN-V{m8|mczI_q3?YKAw681r#GS`KS*kh4E?3#a-d4( zUbBd-rli}5nsbcYyz?=2S0EZ*RML*jaY5!>jGTPSf#U3kPmcq(Xb#(#P>-s9w{5~- z!#?Y&<-4`&8n5^UPG>{ZBo7Y7smXrPV=s-{^Yys&KdJkNgkV`*Ypbs1Wm2OGiW=ly zzE?JEw~;~6n9N+vo!8a|K`Nunh_J*g`BbH=!^}^rdx;M)fl3~0Zuchv1Qy8DF%k!L zD%}94ggb0L{X|~jb&a1`*i8^O&3}{s0ChwoZDg8d74q3p-}z~u&~B(Yb~Ehy)xr5Dy6g6O zMOXbVi_Wf!1)Zc0y+UWIn++NDf#KK)5MiWONfwOI-*5+RBcN9};6}zq2Y3U%wr^g2 z$<=gnh4zv5SEf=Vib_QKecbGrwGP|h%-}-lKQl4&{^5rlnmZgcwf_dgjap3Dw5?6s zicAue>X4QVrnLeR%H*&dQ(djxoGk}=-9jgUd(m(m1r3INQ3U0k^NW~?p{AaOu{Gc^b4S}k;uPHcfL8!Qx>+K{ZZBD_>;SkNF zouS_TbIrN&*zM-cwa!_+cdS-wiwN+@`iFnz-y<2{T4rsSsb=3|QozD#vvEo2?qYi! z11|V)u(%X+l`go0xnhy0 zY>^#_?oIW}cs2H2@?hTShs(QD`(b|}Kl%dkyA{!(34()HMrkoLnof}1CL|54 z7p$L;u^l#@`r;*xtTuQ)bj1*J+?WgFQpW_}a0zIzRGr#rT`458@*_^fx~te_pZJk3 z$;lR!DoD_8l=FKQNa2r*?wylf^pTXT^KjyOMm-O>v=TWGuO=XTwRTB?j6gn>P^+0PF{StvhA zD&YWcgL$U<`bn^BzvTn7Zh7!UXOR<7ee`pP0q4#K{f@fKQHXE{n~J~3oe{`|flrOy z2U{4`6J#k?E_hFp-@L4Nrhc0?JGCM1v@@iNE3;6>gURh8+go+zs!O-k zwVs|T)Nnr#_7qwLWDE|KzH6Ucd}RCEX+pzEHu>n%N3MaWFart3fm<$)GU~MbJLce2 z5!ulQJhP;!xrb)q_adA*YhiajQd4;?_=^=+N#~iBO;y9&NPpMY$=8J?-zxEiAM~wi z)aS$VSP9L!AGo=cxAu0cwbiwEehe>9vf|Gp?{HY67lY-chL78GPNl&eEPRQmkw69C z9~xMlxL8#mKB(CvAF))dgvtAx{O;Y($%PEG*fW$<(;5eqk{z3zY566IC9QN{7OYcs zFvB_cQ%k!pHeCH-&Uo|TdNu?pygJot{EfjAy%0CuKn3kIXw22qUgpS+gFh@_aM6Yz zC+?ex@cDJEg>za;PTsm%**<+x2c7toh{*pF85$+WG)3~w@1JaWow86*gM!KQ*xiDL zIjP4=e)O;OwehGi`~A3*E^m*Q@fw$sIU12cI4u3j`tIN3C2mGV`8h!zRUI{_ZF&|s z@7@@4ntq99hC`>LUh_nTr@&3eqZg+nwa{Y9ZyJUzBXk!}Px5QMuY5|@sfxB?1JHb1 zvyk;ay_YApF zj@w?iPnAxyr273Un7zr|pjIP^*zqvlm1N6Jh9AoH5Hx@EpZXYkw3S`gGR>Vh!F|)7 z-w$*bFWdYkc_R%l+Lj%cV)DWd4mrrDX^&3hWbJ5;`~DoPAnHCW*I3CdtnlwZ8u63HONGNGN9W;YK0)7h`+$748x-J1I@jgm zei~DCK1(yZ#wdK+w=V({L$x=B?O27~yr7#=Z?@zIh@io@g7I}HblEpc>$hNbvk z;ZQICbMf&JpO;VL!9x>_01}&3QX8qSiXNL=dV=#AR$ZEyVC@<&Up{CRDRn)sIR*AFW>3gT4<4^KWH9&4cNx!wPDvHgG?3FZH(vY9InkGIJav|}*I^+7x)lK}zZl6`3rQw9OL(O z0za7Ns1<3JuEyk7hXXHx)^~^+5XwD_$CS_U#sceAyrX=mBVduh2nm?H3THyu8uESt znK2)UyI%i?iHoH5EO2CkfyX>%dW;fY1^_Ggj3X2LA(7bt%-w%mmHhYXU?U9V@ZJiw z^;LofMe8+X3HIdsr1`}+L}v~p!q^Hv$`?iJ&BqHrgm)O_6;5(}5XVnbIl^VN^J!Q{ z&)|sxWtNNC^4c<)@g6h)hZe1%61f8ySosr~ze?i;UrD=HFCk^s^ob&(!yzjmxH+U5 zwTQLWWJy|?L(+wql@^w;j9%6Mro)1enrA7Ua>mc<9SHHU2GsNg?@>)xl;0mR2ALCU zio4=d=zW7sSyBX~M^JJZAoAR5z*snkUt>IaWvDV(o^0yb($>b0zdBR#-C@X^P`cr5 z%)ZCY=4M5=9B)PsOIi6N*bHs=L$K_O+9=H!F-&` zdI=My;7RZiax&`WqhEsQ16^J3>i7d@Ere>y&wsKcuwp%y$KG={NmoNFgq;h{WPXu^ zXkRBIdmW zQ^r~}2Y@MZY%ULwg1;NFqKbSdgTJR4TNvvJ$ZI3Ers>VXKrcF4v>~tZsk~6OKrd9c zgZmt~{376k;O*NNcD$*40;Kis2Rh$4DrIOU5}Z^Dt|IQUkBFgjC8;7$_l3ep4`YU! ze4k%Mb!mBv@Jw&f;eg2&$;e-dFSQ)robg@5NrN7#;MA0)c~Z|b%M_zZ$jX`}gfxed zt>%?1XFM>P25mcl7FP0xaF6-YHvfHIAqiP$UVKE87hTB9OnJdpiiruv8{&?^2NzJK`W61Shwv^iLgSsu2*3#;<5x zRqoW!C2Yv$&dK@5dm&Z(tQ%_>lr?8-uKkVz_1mieyqL(r#w|5MS`++r*C8y<^ZQnH zrL(>nZEZ$eMevShGE(`MNweDmQZqwHSA4$#3D{IsWH-S+Ix0$DTpr)(dc}W$1C*#soT(b%HwUy(Rcfg3t z6-uDi`M;nFpOE3PgzYDxq>3>{-~m{Xn|xBy)q7XzFo14IBPA&CCe$CiWhk2d#woKp z0-!{|B%mMn*GbsC18Cig4Vv;gC=mUdv-bdlsBSBxyg8pWIA&&R62sFK7cK4MIe=89 z$46T1+}>B_Ic${eJfBF9l70g6nQTC%()i$!JXVaO+pLw$MP58d*0wB%M=8cEbt}DT zAP;QLUVeCPlYMO3YUA@oquqrEFM>g@k#8oHMM7itbZ`HqKdLYW&)bdYcEU(bg^U|H zD%7L}iRD_`0$mHE?&UF0sG%TcE}+$$ml6=={A8Q~6E$*89Cx>=Yi_=ZlX0&MnZTg_ zEak1LE|sQ!%{$PG>t3HUKVZ$=x)n_J{=gF;vO$V)@mz^3&u6cHe6O!nHpXyaI?#q` z0Lbn9NAsim(&7Xg?*Q>fU>3lcB0V?hkYWtZGIgJ84_tSCtU)>LX=NKQpsq}+=B-BP z@w+SxG%eGVjd|2+=au*7VRccIRVKv3UXhd{fD6XON)ia~PqbpDE zkjf7gPz(&-VUf->OtWk9s3ve0{?6M`shL%IkZzebh{Kzo#?M!;_ny+Z222Mt}#O|XJS!L&AdSeTZX62f9eHKMV z9_RowpCxh*1W_9LC#q*G*TkEOi9glv`kDT@ zt}+C0^M5aFV%dVpC+vXB1K0Kd3b79WI_yFEr(v<*<>;7Xk*SjD zXXw1G*A1VC`Kw~iZU<6ZgPL6qEUrb~J!$YXe0K0Cf*da><+@!^PT1i2rU^c81g-6j zYY3h)8TFx8IxMx`WaA{8N_Z%eRF8wk#2HaQp4U0z0uXw{Dg-}|f=-I~go96gp;|HaErkYuJ){)b8YIhExGwgh z6!d4L&p|0%gZ_=kLR$D>l*w@Vo%DaICQzoEx*|$z15|0P6nWG++rhfs$xsFOvVq?5&;x)Pfw? Ub07yEP9d)mhUhvJmJ^S2i)qqTrIw7Lfh{*&alt94{D)hY{G~te z5B}2y*9~O(y$PUY#XX+$9mUg+del7*M)Ex!DMVJOj03_=S6p(+fBPHfw)~CX@HhU| zIX4XD_Zont>wt%S!uQ;@?^%z!!#?vmx+oM#k$x5sOpFW+Ty@_6`*(lsf5-mZFZ*-< z=8{_`I|ZS%9no{l)4rql;SbG!&a>`y&}tO^wmBVb9WAYx+e$HXbuC!4-ytXLDQ+FV z{e~NEH9rKp$b;x1u&c=ho zhXTQtp-O)D14z1#c-Hst`^ZZy;z11PW!0mq2vQS+?qsgZgWip0X5W zVqh%4+W~a!^_cJ8`_(Jazy0sDZvMmC3sq zKxxH8zTW=MFMH8?tovRZ`$#-q>$DqlQc4W~@m?#I!%A!)H;&x6&nOU#Ox~>kk~w$# zgdhKO=fm!`X3m^W7{9EOkCbbrP@yS}Ut7ACEL*d=dg-Lnb$tU9`P~N~X*=jSKl;?s zPk7iK^XBSx9|cbw-IuA*d{@+ds9&|rTe4=*J^P5UzFW4YR}fq80KlSkA6tF+Irmx9 z3){Er6`vF!5p#~A{;rB|3YEg7PG0SWuCA5VZ-2KnN#T@R#`3!fKxw~6ec?q9I$&N$ z9CbyELLvr`W26|66>^9aqp06y2!t);^hckcjDpiyo6|thdI!h!7eEW!y2 zkZLCc5Mtg;fAl$5jZ`k!38m9k;Bl^|D5nV}7G()`Lo+`Oj(Mc)-}^{NI0z8~TPe zY$5Ni13LD*uXA+WK|L*Htv8>(W_PGPK&!?Bl_ix2jZ_Q&_;okjG%_*VZ3lE6bn*^I ztkm0`x_o&{Q6or-#y=^GZ_N=19@2N|@cFN}7%r%c<=xu|l~z6GTb@~d)DiPKb^kAv zNN*8Bsz+*m+n8J8Z}8vyM_h14-+1>NP{`JtNXHJ^qg(Ihie>_D+XYF1T)TjnEji{< z8-C-H&be&M*Z_Gq0AyYJ+65Cp+(ed5g;ybnCKLC~Q|Gn!AF!4#bQV$Ms$Hb05m*T{m*x0D0$XK&j_I&zzEm zQ6bruc#W2rRiR}kJms7}{elfclX`Q!Lk?)^=*0G?K6lIVwx=I0F?fri;e$QaebiR( zZ@)t__V+Fu?i7GROV3KAA0pfCXl{?AB_h|VWcxf|q`&%a-{OXWf2v#Jj%t01x@jWs1c0`#9tCg0`0uy!E$gkL_o0QxToFpn_sqN%h&}2F zZA0_+xz}|YcV7Rzv(Xasn=gjN+cAgFG%yg=xLF26(}@~w<0gA} zpnmXb$#M7atOxAXQA*nlAS21fZVsd4)M?ikFck#3Mv#P*Lg9cyCF?n4U3tGp9oJJ% zp#}ui-|%bhNCTDWhd@C_LYK}N0}?R#JL4i= z4t_yQq}oiol0?V`cepdh@Awg`%92yB0{{_l+9e>C0`dzb!B4^@#EhxfzB47mMQ-p2 z{=_f1NmYL^RRUc371O8IC16Bh@Mo9?OaGrlm{9n|Sf3K5g>~+*vcj))A^K`_-iz@g3PQKwON&p41@So{}^ z84~+m$Cl)6cM4Zo<2pRx5jVJ|-j5mKj)@qT2Kg0(4n~F&;W8Vr$rg($6D!m01zaW2qeZ<&m$8+? z)2axKN)vu*r>VzOCIr1#S%eMNSe|wW_!-HJ0jJat2#BXDe)GEnA4~Wcsgv=TDl|x@ z$_fk0j?bV_RXG*Q}CA25*^AM2ST!D&hs6G2EQan6VU ztq>A23fD(I>dcg?3<4IJC1Na7Sk|!juh0HI_s9YAe=7g?p-X9I$-7D>gSQe(W(P7j8#@vhF(8CCfxE34B|(LAK&L~8fqQaD zx8Y~#3O99a41cqle)8|UN&W(Cv7bt30|JTxO#;Sbv&sPgDP3Omv$HD!+nRYmexH~5 zr^0h9$GT*+sK3V@subw2Ke$8?C@ZOF#H%d_4i~ z#y%$uh!l}CRX|S6DIfFkKBo-59E}2Btdzpxn}IK6Ui3cmyZ%1Gr0;1M(dC>|c*OxN zTv94#MSulCmmQwHT(C(;5*Sf@KV8m7Kh{~yrf3J z$O2&22Pw_5n*VHm^M-ql&>n-=Ck(2GU4EYw`2uf)D9ieZS}eLpM6!?ud+ZcE;TbP! zxDdFQgOs4kR{wX~Y_MQY5Ie~FY|zd36Q{f^=IxW zH0YcEXGwsetFqDk?JDbBn*_c*5&p(FFU$nqe4mv%yjbu@GAIAfD4z3#Pt^qu8B<&g z0eQ0Xo@&irl^IPfX{>P2tzj}-X^e?UNuSL|iHPJSP;uW@-~ z>F;6{fE*Vw%vR3sxXp_dlfIX^&EQ*{JJTm$<9qYcw_ZP18xqo%_zzN^@kGh*T-iS% zzYGGryOo`?>DxxT+Aa{@fH`@V}hvZEWuY#h+TcxjN@I!i>amZ&h28#WUc%|GwF!+~40ALhQ zH0}pi=D-r6leoe6emCd>?ma(dRPuf#@J(v$@shB?6Q0TY=X9*^zo66PCWHVCLFsTn z=j0##n{6KJxRoV$!n&G2NYhRp!3yJ&PHgxa5faekoMVE7FZhH{*x{I_x;|T8zElMi z_(15$Dv=U9HhulRLkdy_kCu#O|4DjJ*$Yy#C+ z|1qJuyA~&8Z4NlnZ0{*e`F%jhh(uf!Z{s&iRNVR5Iw5tNyFB8@{DjBcyRx#zI-4xB zptA^VH*4X`NyUF(@OwFRjyd8;iybWj1`HSpye)mbwO_F@k0)V^8{FX@_qoeMwphP% z^_re*Sq7@4T%lkLgrp3K8RrZ*;zW|K)1V_xhHkOhPd2{YU$RmG+_NkTEV8VC*y1KP zxy}|FiiTCif}aB~a6Mi?Oq(|6TIFji(+>pR&A2LB-i>dWshAR^`6ZTFWtDZ-SYt)$ zpz4pLa^bIndMJN)2?%8)B7sj$_U{G(MuL0Fv5G%-)4FCWD00000000000002MH(gwF1q{1p!6Z43eDRkuH1{ya zGBYzXGw%lfztsN&95XXB^9?gIcXfd+U0QzO&^kPxt%19RR`-icr6n)^=A~5S+UE5U zw*V=8KBk(YQk9v5^aGE%F$ben^;IXRSygsAK;ss-G^!ERV$~I@t5hph<9yccq;q3# z%sHb~byT}m>r@+5`&E{5!?vqN6{)6Gm(N?a>eGYSlNU}eSQ3et;um5JL>NuPjXIBv zuN6aAf&;qAi-T+0hnPYwgZO&C|Twe0!{5&sf&Xv(> zbk-d|av)E}Cbu8kx9dFs8&$_uxysgIZf|8N&htTc_WRbl|66*+b@3%P-GhazF2=~j zB+`*_B%@TLg4d2R==#!mehkvZGxBBPbeRJ=+f3CdgnKyCK4R>I2Y97)gMj8nc zSfr98F$PH#DU?8DM59qfC74DCA>q`C31F%lq_o@mS-~eE!RG;Dk&ih%?!3Xq_q(%) zwsBso2LL+4=QObaq}G=6EYDRIxp5kSfwdS&jy^O-0#O#kCg_~#VdvVv;qTx50uJxp zxjP&5zX0G@s*_}jYz=qwYE&_m^3rFC>Jrs;s=LIP$F8{TzVy0BU&e|nufxRDG)B@9 zbx?K8Btfc5k`z%KDWrxDDhjGbLl{+20IF!Bk-2J!|Iy_vV3Ci2yNbv;g2{d8UC=ev z-0*wb-w`?^KHqVaq^X%HceEaivZv5R(7v1>e zE4bjg+p%Ez1sE9_MKY3lNMjFY;sK4L0@6sMffzw-Gy*;s&^_y5o&|6%`-X6&^XIT4 zAKf<9otN{X8{R#K1lUoipDBwUI%UR-o6N(QBddTM6wrAX2faRey)KUI-GLqd{uBQ3 zgRkQFq5X%f&Hn&kH7|K~lbLSdjv-ra7%)RPb5%wSR9%w4kI!eU%?}+txcBN`e)j*b zUw+Azqt`zCB34~}BPJIvW@}483pnG%x3^J5nL?=GG@6+3!pAU&oDw9a!?wPs2WaT` z%?)=BoY9>{Ysz{H=$sQkpMvK})^b}YS0E{W!BYS^D1lTJt?S9d2eE7IKd|~|-@x82 z>$}dmf5Ex6G_GAi+u9{N8I`v}$swnxMHJ7O7*&m_##NI%cTTJ3@%*`pXVA;Vn5(Y1 z{Q<%6-rSV51LU46}l(<`fG zoWSt|dvS2bChYj55CQG?(4^2$o-dEv6SOM>;Wq$e%q6K;zOqC8AqO5eX)$ zXevvT0L;KK2{NjE?S5!Xt=8bU2GUC1Q0_TI%PeyCz`An`SRI0)U9x4b4R*VFQbFZf z|EkWp3OIsRTSqV*^9sx$S_jLRyV51ItUO2Ns{YK3wyArucjIbo`omALXY+b1M)niR zZK|EB{i>q`@+5hfX#vs>?U;;)ic|?TLiZe}CTb44K($P@!b{`=0WMs5+11hI_dJ1R zmt2Xl=>-a8;hrNfk%v=b3W-eRnud^pc?BTl2cus}V8drp2P}L~SPr47uVuX%8ewdE zSIdwOVH?~6NE@)O{Y_k31Bu19cR9y;-2qX-SncHl@JaZLs=y?~nul(gTiCo`K&df9 z*6(RP!0hoO*tcapHvaa9*u80O?ttxZZU=xp)IQab&>;zAhw7?&ssTkPD=^*Af520O zvjQ|FpkveoHAzjY=Cj3Js=7c#E>#FuU3t%=SaF%U=aQ8eDcmzoVHDEH6mUlT77-;- z`C18RRDDI4&&AJ;nD>KZ0&qh(Lm*iT-BUu)8{rH_;~BU9uHkQ@oGTL;g+|DD#^BB2x7>OD5soHgfi70R5ld0u`jqA=!JAHBjQ z5A4RCO{=l~w?8Rh-Q}Fy3}6S{@j&R1)C@IC_2`s?np3)=&X_IFLqOxuJ)0bqajF88 zXHXGySvoqp;DYOJ)sI&$$GEy@JUWIX89_2Su8_ts9#TV)2&Jj!6_CYmRMf*ZwtyR) zt17s{9E_0xQy7VY=jGsEyP-8E{1U8d02(2rs+Q4usnxRhEc(;7OOp0Y;o4@vEbAVc z#?})muB$@V(qq%T@j-&jSZ7&xtJ1ElVh^uLtwOB|VH82Hg$@{u?~A=%`B` z+`dt7TmOQ7w|hj_Z>pUkj|Q!3gF^-`*?i&S&h_oTq2drwst%~Ca?piz&lTQ5jk!eQ zqVdTo85x`OU+GIHrZ74+4{@SLvW^{|;;$jLqQH_YfkE5OPiwmY`M# z+mRt#e?OrC*QshPDEF!?pM$``U(`5-Eaxq%)w#b}9Sl@OUc^DQF4J1p@1lF+82U3O z{8#FFvnSCxdBOoWI zF>t?#j6-C!$l;2bi=0Cw0#OK+!9;;nrKxI6fgV%Goj^K1fhZmEpOcEJaNelMje&_` z73Yyrn9I4C$b)VCnnpZxqqgBsq%gg{mzU!-i!h^tH2df z@H~iv;+_5ImE-Ggu1Ri=mah2EWtZOcRZ*%(gq~eKLwDEI`6mebwKMMt<(V> zBY@*ncorSwy0iv(Lb1m8hYD&^!mN@6qBW-~pau+_lVT`*VhCd#6W%1PKEg4Hf;}?o z=LENmA|-|WV%W- zT$XtWk=00$JP1rG2o)3p=W8Aw9Ucs;Vx5j<{d1n}2v#w-pFx$_c^&4Djtghf$QUk9JV7+dFITg5e^Pc)zLor7b#Dbti{JW%lpJ>g&R1wZN zK$w#+DZmmVrsPbb3e57E@h!LqR!T@KxFZj%kH*9R*K@C54^y?@Y@s<=3x}(L={y{) zS*O1tJUnYz?@Bzcg;162;T=ln1d(8BUeo|OpCizYcK}w(+!ncJc@tmZ@{g&O@Vu@sKqxhQgEKjL3Y^S|N!Vm< z;-v1m@1^($x@iDRPJ9+1F9D_lnvk=hbVvb40IL9E4g%27Q=M3<9X$H1eXK*tTE`l= z&@1&R8t}n0P&=?TZgUuiomDYUfV?J{-a-ANV+Y3}a>yhwM|D|`ddYJr*I*nC$PQwM zQ()^JY8gALW^|Zkyn|mpLUUgaeI;->SOjPt2*PXYHq`Jda6|IlU2;SB1f()wpp-c~ zYVXWz>l9LX?$h1X9nh=4*kjd0?rZnM=j-;rPqU9x?}wK2cC5W)kJSJ4620%q0qC$h zH21*f{{C***UbH0wS&A4abK6($2wf}uM5HJKg)NRsD1u^0Q+k{uwK(&h1~1?aJ|5M z(w|YAKOXF^^!(-L&ad|1KmY&$fML-6sSmPhWdHyG0C4-z5OSU|0K5PI002ovPDHLk FV1l}?$m9S3 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-ryuuta.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/fruit-ryuuta.png deleted file mode 100644 index f7320923793b2d9f8fe9284748581168dd17756c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11722 zcmV;*Ej7}KP)O*z{gA#wF`?P$0RoPi7{zFVU^4>bK>7&9hU^G9YGOtW z4Fo3w7p;b3D%QCEihwa{6QfWhh3N+;A?<|H56LApu1Y8d)$sf~3!+dWE+&+Xz>Dy& zi&3Ov3-q8Q3MC^es-ygGOo&2>xPjr+>@?NKReVxeE>60CK#N7fQFK&2x5D2zf=6xrLlN_w#Yk?#3#9w184*0}_0T>>%6 zw_&VpN1^GXcu)j8w9duU;4dgDB@1qkJ|08Sd-|cjmh?&=kE{x6P!kJOBqR%uxO{9} zTqeD%Oo{N=N<8`!OjDw$iTM+gnvX@);GgOGM9on-nnoIWC$j|DY?K{9GIIFg0RkOy zB1eGO1GpV#tKA2L(?#JCmwN3{C2>7XG+>Kl`^k0P zCO`-wHsRU`A%tj@6Yb&xJuwch6)?ZUTy2+#leKZ7EK{NU%mQ`1x>pFcOm zRI6@+1D9^V!$1Cu`04sjpRrmp?AKHiL8GziYS~t?UaWD+vJ5<% zH*W@$$$br=>%d`DM-uU-F3%G+E>1>%WwYo`s^Zbc_KUaR`iox~9;-uaa;is-Sfk3$ z&W6AK^{?=8*q`<5*U#PaHf*&jZG)}6YkZD5;GKr&lRBP%#`8Va9$Ff8`` zt13(%S%Y#qogj$EQQ55g4F;$ip)nG=D`;5|h%DN)2hKluZ#e5uUsXK%vfJ(8OCCIU z;MT~d=dROzZ3sE?t%qRkGsu^(6G;$`S{|JtL|7AqWKVtXTK$0Z6uYLL1 z$da41)LmT&*?93D>jS=gl_)#J=QtBD_*cfkoqgy69Q^jPh}AGYDc}u^hfPKK?e_h0 znr>=B$hf5|p|bj;ufL*xn!LOh*UL5qb~_$L9DH6LAD>_iEReC;Y_8icICWjq^&n*K z<^#|mF3Hy~a+^?CV^%Z0tRI&Mi*}!aZFhba5!iF_e+^6=))e`)GNY|kleHiu``A^s zf2wU<+-#(&2&b2oszyQAQ4?X~jUVe?Tt-v3=f*H|PqCs&NFRToAtUkj_R{6Lo`uG;1HeAtvP*x_GMYTBunZtKRZICTeD{g_T8 zCIB;db{79L_V+q@E~M9lIqbm1m*(|XJzZ%$8-YknS`+v(e>>#azoRSoxP!0`CjKBS zzt5$|Z|J60bN8Nu0W+6Da?1`7U9*nr9UlL^MxPV;+OTm@sfz06#mUI5$BTkG5Qvyl zGhs~57RWmHP0gFR^K|g0k%F}`*E^NdmT0mz3lCp))u?69!B9IUo;_ZlRjd-lZ;NPX z+jboC1(?*o5OGdqLAs7j?fLr~rARO`YZELvbzifZ_bB?*vBhG6P=AA7o?O#nQt#YUiO7?Pz{iu)6vDT$OzaJ8&ZQFVLe5lbd_EQ?yU%fOh zYG%BlCAIAY-KH&vFSnkCDf_R6T-#wqZzZ#jJ%l6tUCQQtMuw#ZUuoFb`^RWdGC$fX zK_)8q@fE8QGuZ8i0U5RWAY^pv%f^^L&C84o88h09z*nC&Xbeqy4Tqj{3t(u$J{Z5d zFz6adt@!=(cO*j|whqVcA0G>QOd*xf`g39PvI-=Zuq{V#JQ2jlPS`l%aNKaL_WoSB zb~d6ETQi%@*UW;Uc6^$f6l-sgdJJ=EJ8A}Wot5X(d+|mXyZxe@@|CN&z8@K`%$_|P z*kh>rSxxqsLWb2ydDGR~q-=|Lk1>q+{6`&X_wRGn3bM&1Oty-m4cY-A#9+FWOXJD`Z+- zwAKcyRPlgP@K_X-pbFp>U{L{u!lO_?pn&oy00aOK06^-C9I~JMH|L!E$w_kmpU?8% zY$kK>J>UKQ@Bhz#ATr`oMpI|Eye~67xGI^B#NK@T*#e(^@td6j3ysxRm&wYBb9=+j&7FQrNYMxC7L}C(4hB~V+Zv&rUFvVpl=Y0ZFgCAB} z5(^=)wh_XyVVYuJqXkcyU8XJ_r~pC>&6X>u!l!Ydlt%z{=_d)KvU`2FYfClN0Xc;j z_^L4EgeIZ8f}UrZkNcEazgP0TnKNIbnN8-9MF}*Qe+R0AsRKm1FXi=t;AP;S82E+9 zs1ud6ze$|v@W(4N16#7eLaT#%=n?hwWwHm{~L`=9?odDZRun>w2{2HkP zT^MebM0ioDOt<-*HrCSKHgKCCHd|dF{Qv?3`bSD)tj3@U(R9n>da^w)qE3N)fqZznQtFDxuw*~LA8A+Cn zogad0F$gK~w{Sx}jpVh=QgY6hGIi+XKAIy9UILdH}lfNGpj5y zolXzV&~IoO_(@YoL!VzFYDDJ0K|fori5ri;G(d5Ck~PEDBDPiJlAl22P)VxBWJ4e5 zY7iJd#MU;EHnr3xGRi9a(G;G8Dvz$V&@uCSo{JRNlzMjPGxL;cOg8iZ9TWKA$;*hW zr?0rZm04@UdW!ePEY5vW!W-eHbqoG{joyIG!%<@(QT3FsfAHjGL?(Mys?$eiQh#QZ z)=bSRl`1jvG4u0)nOXecG}#wRuf{;4f}%V%7&=m)9?dN4>+O*QZkK(Tk3|Q?wDk;r z^TOJmn`0fip8Y!PnPurGy@EWgcdKM*2TXx&@*&3Y^Te)Kg#sg^vlQYCev3OMnf~(4 z)hw7aS`RQhxqYFY`t&1KVe~z7dXV)dhZ=5H#+w&i|JIIr>GH@C<4up}pzC}xd5`3| zq{=cL*<%qDkB*cY;=|=(ixeuX_xdBX z13_~591;Es$go{PMb=&tLgty`-Rv%{#4|pQIir1VjpXJQ zgBkCQ4TP3azm@U`>3e$aM<9`qqYZ2PGA|%9BC`>R1^QmwOuDd`2xfj_QM}9$nEEE8}m=kzN1QRb>6aNa0<<{-zpw?c*p!;No)_K zph7V5I1l!*vKx=gQq4KHaIP7A92@YLA9VeRDLuKF zYU7i)mCb*Ct`(KfwJR7TGVZN|-xK(=WBxfjC-_NNz%bB#KM!-gb~!H$gerJpDTqzD z4*KNQKgId_f-TVqB(u)`RMKFXevTY=W!hWFl@e~lxB}?stadE19{cZ&tOfKPMH#P1O~u;*6ygN$;czHTI|Pf6j^o2E2M>D}S%#Ag_>m*8-v6=jIe!2dUYSd1krXX)jM)IjN3$iwP0e zFo5ttN`A_NdbM~#LqTb(FgEj31OINmcAV~N{XHNz+!qie$PI{5YjvmAj-=PDw!tst zzP!fqt1%1ePw|Nv`#BpH6o`v@wa6dR^Tp8EDyFxI0kT@Rz>-x=0gxN+&nc<3CY%2S zQ%kz0#;h3@Z+u@fo2rDQ#>f|=Z9`~U1+d=|K*|Wh0$df6eI}@ogE94~Vw>Kxlhqp+ z7LHM^fnamb?Qm6AV<#OJcbW?jp3cg`1{pbGa!smgz;|^jFct6}{8RC?AoYe9kyCDD z10+yuN=L3W0K5Bq+FsahHw)+tn1sWr&6+=K%?!bmM& zzejRtsGC-!hEy_^5O_9~{`^i5Ste5W-E*MJw!>a~K8iu?KI&6{uC)68SkH?>{x z0Ul%F{tPQ85f%@gsTg}>kpBlkVra)8HJNVHw>+YVb{H7AScIaGWD@}O0#(-CJe=^( ze6bSvVeof64O&-`JO~owtx2gn^%-*2(!dpNXAw9h#_3?K!1%9j_PdZiKAtX#S$|m6 z;)V22Ok(&B>$V|5`QU9&sa*1DuBOOjC5!usw33GzA|2eAUbg&3QlBqX*{!u%oZx=R za6jWgqNSs>J?1KWidl4EFX<31Lz$sOV3B5T^&j-`y*HimfmDy7);8cJwri-1bg zCNwNkN|~sLVin53j(R3CdB#||h9H_BhE{>-R3Lpy$e6|_ke-A41i`C_Gt zNo>W8QUMsThi~o+xc%~{^TCfk*_3WVongW0kQjY-+1oBEann~HBofQ)RPK^Qe0swR zlv*v0$J_@-fB14f|L->oOuqSgL26g;J}OK%Lq}tKPN#+9GZGWeh~y4@c@Sc5=S`L( z27L3kJ>e(M^P@EP@4x=-g1{KlfBkjwyW!w^eqMV~sL(*>{-b(ipsHC$BBR2`B-9UM zWHwX36fsijTXLUq2wRXqq`@Qx^~D6na4PNYcfXile{v})G_k^oN+o_Da$W$#d2=P` z6`OdZkPLZRMJdAkFf6{UA3&sXX~>JmRqK-&V>Y?pq|$Ir;Tbv~4Fm+$=1pc2!Qt~t zNn&ye31Yi55-VTKx2R0=19;5lJ_w0ODjbjh`15=`x)loqNE305UD^p%#VKYf_h0&x z*r;G8*g3tJ3IA{Jyn&lLzAFypELz{_p97`QC{=XMHk`8!XID0yvkiy-kJgz^l@nTL zHV!3RsfAOI8TT`A-_YODaA%&+fZPQi-o@_Y?>BQLeUTu$csWZPa( zx#iW@RTszogezZq>cF6LK;UJkvNXN#5+wb&Ss@D$v1#ExunR=&;jlc?DrFxVQ90Mt z38hNGAwRawy}%Y*&Y3^MN!E)N?_f;sqZ3I#R;Wt zK*)y5zX61+S3gZ6R=T51;x}>;vqpZtZ+7;eM2vn||4pdo6_bE8a6%a@V)=fWMD5m7 z&ruJOn~0gqewOKjl~o#}1E$C9t(b^u!)i+>lq&HgBvlBRva)-QMvcuUw!EW^-0j;F zX4szv`eEfFrhZgC7l)L)^-mpk08k#*S5s*pazTksSJjg{*2vVJUe~7Q#U4wQoZ}oj zf_3I3^hwb?>byOY3g99b*5NKE|;{Y{NZ~5Y`Xd_eI#ifu&x!P+C1C7UYrarE!Q2ILv!24k9U3L|3C;Re}0p}yMH@BM3zPm_?jXX=(%I#R0BiRc4RA!R)4^7}VpTNtl{p=_|4gTux!)(j zQqND>rb2%v`PB5|%LN&zs)wPC($Ccmm05wkeRBPIdz z0|6H=m8cRh{T}^(30H|%O`>++lTwLSVP$RAu1_c5J87_w$S5X<^HVZ_ozmR#KE8OxCA8Q2cHeln8*nuv4&`O>r zM6B4YA3s;A>?)OmRtm<1-kTF;U;ul$h`4>a^D%VuQ1v3_MpvT0kXc_Y^ZPKfmIKRx zJydGecCVtZ-nEa2<+H;3_|*J;&Hp|5ks^R?|5?d=sLxhYbHAU_mC*as=jN!)Y^Zv) z^O6}yfO*9JDbK{TT@?{)J7khQl8C9aq;$MDu=a+2(A|O6iL)bi!IFVwaNw z0H%AK(gTFezg6Pg?{9P^lvy3p%rEm_$q>plqwzo|v*lmA!}<)WrG}w?lg=>2sRTKmYtF zL`pJsfIA(%0`;TvpQD?|tEhvMu$FEZZ83h((u_<&J%z z4`!PxA`PxrGT2tq+`m`0m8=u-!V)iH$zdN9%uZ&Y57z5K-2OKlc|*Sf=YC1HrH1^; z77tc%P24F(Y&LO#K3K$%x38n_#Lh(QiEjLcsav48#@s(ozR}3see9!2gz9y z3(IbLOiCCuh!^T$nVNt+UwhtDcg>B8|q2F_>mkbemm?CC-`WF*; zkj#o)`SDrUWp3cS+uZ-iM?MlNVw&5`ix?s{;8>OXc$AU`r;(QNoHz?}TgC08N%78o zZP3Vz7$T;g6{X~$z-7^nuy|kCGP``yoc(g{k6*+PF)t-Km1MZv4Xt5~d@l)Yjml+C zSWN)cqe8?gSQ9PLlG$}=5i^(m?xw1M2gb%v{=DZDH6v*;JK!RcQ?2Du`HG0yMIW+M z*mB31tKQgJfvHsj7I_k>P{!w1vH9lKTzPAAmXRW+DFJ&}88fogLlU*R3I9sVpp#1rPte4X@JHWt3M zby=Q;xfsTuP|DH~FJc5)7H% z?{iY>GnDb`cmjr<3Hic$te^(6Gs}`BW_`*?^Y^SW8)U0Hp|tr)+hkgOw6;Q9n?h{I zTz`P)`x^@)Mut0lpm76atg25 zqeqW4gx)RBBoIxF4k?4Ip~Q3nqmd7h+1b*wvjTJC!Z&K<{AxZT)h%0}dg`f25lh0Q z($afm5``8GrM4l$O3YXR+ugJt0K%EsjAqFf_Ij%Swf^i&po9X(NS~m^u&`a>=1$ zOacao;G)ocdy>m^C0>5_rTSxTyHGjS@~RzKGJIFqfC4ryD+PdMXjixQ-QrIuC78Zh zwj*x-;5R>jt^U{%KM(Z{AGCl069sdXtCp#Solu%rEHjp5LdHIRUv5Yb44|8#)gWT( zk7?6|_mtvG%lgVwGua|w0A`?-5j9-IBv>jhI~V!tzg22_k1U|s-^{7!#smz2&9%vV z8Y*J>a3Ql(zR{PD-v8QTWCehW=;ppk#?;s^7ct*@G5(FLseH`OLIS`x+PU9djh&qP zI-OML=k;3d5HdUQ8~t@|ySq;y0pKclEl>IO4DXTI$));aBhS9pW#uCPn`x5)HEMn` zGbNBYwH(ofBNAe>PAGQVOayS4%Rh1$T%vTJKVv?!cC#`YQS!Jt{BB49*o2AL04uJ2 z;JUGWWGS}yUnLCy^RT|y02hw96+_;t#>8tr0f63fmb+wq2w2TCxYtZga*0`m%M-ot zMdKdeNGxpce$COfVMus$VisOz%9z{TWMP@tVi@rPfNd+;n8uYlqN^Wg#Y~NKnPnwt z1D!PLV4@wX=>#(?W?jRqGBgQKk5W;h=3>!zH6-Rk}@;%Z~;^(Vv3eZ%8X%F8Ja8_HUW^0%ppR}{w@GSOxaA;r<6T*qDk0f*~muv zyZ4u<^t=G76tNZzu*#|;4$Nx_yBz>?~DEU=U#ej zN}Y5=qSk+Av+A|c0I@E>gS=s;Na053$6Wc6Waqi0kvhNV$2fy|8>;L_?C%Pi0pF66E)#uU&fQ#Fl>aFY- z>;Bp|fAvSy(El*L>`mr~7yx~-R&EAI!~_6L+wzJbVgO+HgR6DUm5NyQb$;&W&#wRG zw_m*ewIBUFbMKE?!~kI3g5lM7efjJ3wLF@sl#q>I!~kG92G_oX%R`yj_$?Lyux!n> zZ?99ED@?#_LE@-I3;^aWxb|IS{B`*|k5kYhOG35itNntl7~c zts{!LC!0d0V1Y($)TqUG~R?)3;+>}aP2E=3h0Z~?iB-oX`>>h z)5?gx*k%F%h}aNW(m;0tXfBfzN&rOcG#7?w=v#A>|NXbme7K(H{dYdmr}x%Ca~}W} zt%{hkvd*tbu(U_4I|!~NiG4qgVlk-}09ZC8V&1RvEKI`Xag3e*SCeW1fK?+R=HlXO zs~u-&7tfoRCu`o37~=9`ZmVX!01ufg}*xNXuT4kIGAz0M~9 zP}8`PuX}Dl!~$#~X0@n!mJ$G`{!>r+wg2sinAt3%Zb3Sm0Kmz(2=j*p%ugx;KV}6b zB>-Hy2&iOgMZ|m^kH3B`Lri4h{g@fSyuJIcYWvU&rH{EP8}W z?h3|`06-6(TNIiVF)xR;$<;;dgO&Hp`fs&3-53%8ECL$(VIpRO;1VnsF|Fnq%DsOz z0f2BeHY+&_5!275a`^F zl3s$fFJf-i4R!Aa&Qb!vCSY(na4BN^0foEw<7O!V;Jn#}zBkuxXg$KPo3UD4OaLHu z;9F%;b0TKW`RAT{?)tUYUJDsN%2+LylfeOitIjr5Yv{LmGWpSuepKOGUZeVAfg4`| z;A{*HeP4+9)?05~fA+JV4IiJ<$B4CB0Kh!p6fg9Wke6S6`TD*0-jk4db3eK-7BCPF z09U@fwZ)Jzx9e|{h$(FRD6%gW;NAy-voSRE-Dvvu+ixcklc0EWKfW)f7z6-Vc;map zQ0C>OWC~?y{y7Hq#RA;>0I;zg`fdBetdvx^0agMN-xtHZ4=@Dhu@84Z56VhOg`H5U z)C+%2xc32u;nI3Vqbns961DhSo4hZEdmms3ww9fY=Ty={?)|V6SQA%^%LxD+g<0DT zeYaUIc!oBVu2gw^>+88NboiML1tl0>CCb&?-PG>(3jpKVy~Mx=p@p`%TFnzN04;5k}oL%U=~*{#V;28v0Fs!&AiRRPbs5E zkmTMEC@BHB$*9_uI~Oiqx1Ug|X)nPlIi-|Xh8uSCB_#l-k}Aa{1SwQnY70aPWd?eH zQ#6}}Day84*p9LIl3V2~B_%*oLW%nKH5)pDMRmxMwUrC@BGonRa5Po|&EErBL=%rHDzKJl<1@Y2hNKj4ugR#xoWj zJ#GjGfNkLkp87^A$x>)fSGP3Mw$!c&)+K-$n}vJEDv0R>0J6+&*S;R)!J;dG>BKRG z#AE2}Pgz#xHA<*&?df#|TA}S2WMKd&;&DUy{PBai^9TIY;hB)#1~m1s(s*gH_S4yt z*Pv6(B)0x*nLm?m9`BQluF1jx%2?%_-tnRA=Ezt5UlyEDhGn3hjqVpQ04U-AWnpi> z{dT-)m6dWA$19m_-+l$*J~3_u2Pk8nKedYw_2dRHeV%7-1dk8P(hl#50l<|n46G?D z8Ne&Gt*ZBDvF9*jI{|>Q%tXRb@xwen_7J>}AJq^lam&kS09f>IbcglB&W2b=R9jz6 z{YV`90Of4m{8?!~Y%@6?XI1vatd!380|DT|?^&$)Azn<5%f|X*4K(EZ!qWNeN&j)y_wZD(#1D2hKvhFV=v?1OVohmQ#9oqkK}^iu+<}@OQUp zP*MUIYacPHs2>((FSyJIc?(`S0K8%Pj$c_nEXwFPtGq9!*F;GPu!p6aTPyB|Eu&^e zYwU~pnrzEV0q}-NG%D|hokyL}dS9&K_hdN%c)&~>GI_28y>jY{MVE^DeD(h!H!0x_ z{>=mcZ&>+=k*}lnRn+?NK>e`!B!*p7UrhZ+y?1*&U@9ABIL?VX>v;fgn2#9wifG@D zU$A{t51B;nnEkNb&FhWeYUsY0-dnw=h1c1sgiNAmf6fGc{0>JmfMp@9&DIo_gxTi)&wa;RS^* zt}Tl6`&AO@Ch&b1a44hcc?vfT?-OQ1pRYv8OHL~nCB{SF?zA1_2_=wmNw_w-@9ZzV z^pb=~H(DPp{DJlB|BFjW^M=(XVqQK=%(^AHeog|OzCq}HRw*dK_pIuOVzxxkpmp(D zr9PL1vLt0%dXRKIz658e(BCgH+xMXA=d;a!m7#7SXyIn`edXfQPd|O@`>mgsxamF7 z{~L*2A0e|7%enUv0cvJ>i+D*$lyTVu6c!TAeSIMP{H@J@`~Byq^3GYgol0kgy~g9d z@2|f4s{X7>R*7IAG1J$?iqlJ|nb~dPrSI%2X-*|x9(pZ$P09#8d+9XFRdUvFMcLZ3 zSkI=q8E04AQa^Es_b-*B61GFj(Hg}JC>^f?GOs~OO+AQRG1F^S3F#iF6IusWUIN$p zUP{=Mu^k|4%Noi|;KXser{|S<*y1W6onBa5@2QEJzOm_>gWg|EvQSVP!kO+>iRbbZkA;!|~>GC5s~M zq;WJM8;AO4ai_q*kam23CafoB0#?mdhIBHi2YxKVl^XxarV&zB0!+u+2UF;w+T%8_ z0k^KGKh}bvrMcGB)YsRH_Z-8^cYuX`(KUS{DG}D|zr~HdsIiQ9LDOrONJuP#|3B#C zb!Rctd)dR?A9qR#2$?@jsb`b@f>$W(NniA-q$v0UdSH>;=y+AZV$}b%7o5$-wJ{O g8KF=A53Qc&T|s_-~a#s07*qoM6N<$f+Z!+`Tzg` diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit0.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit0.png deleted file mode 100644 index 2d312ceefd87171f2b38c5d68b2352957b7872f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9518 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit100.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit100.png deleted file mode 100644 index 7884dc072d158832135ef370d5405e03afd5987c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27548 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 b|JNWrIk6BTzE1A^-)dzAHThq%=3)N_&dpa@ diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit300.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit300.png deleted file mode 100644 index 3e4ec2e047e2fe6befda6d2c174a622f479edfb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30325 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit50.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/hit50.png deleted file mode 100644 index f02ad11a17461e4032e969151dbe53ccdb298623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22638 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 BI)VTI diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-0.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-0.png deleted file mode 100644 index 8304617d8c94a8400b50a90f364941bb02983065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3092 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 Y0OO;-v8NaCZ2$lO07*qoM6N<$f&jDokN^Mx diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-3.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-3.png deleted file mode 100644 index 82bec3babebd59263dc486e5900a3a01ea4aaed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3712 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 JPDHLkV1kmK?iT<6 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-6.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-6.png deleted file mode 100644 index b4cf81f26e5cab5a068ce282ee22b15b92d0df12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3337 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 TZ*tsI00000NkvXXu0mjfuoP_o diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-7.png b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/score-7.png deleted file mode 100644 index a23f5379b223d61079e055162fdd93f107f0ec02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/skin.ini b/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/skin.ini deleted file mode 100644 index 94c6b5b58d..0000000000 --- a/osu.Game.Rulesets.Catch.Tests/Resources/old-skin/skin.ini +++ /dev/null @@ -1,2 +0,0 @@ -[General] -// no version specified means v1 diff --git a/osu.Game.Rulesets.Mania/ManiaFilterCriteria.cs b/osu.Game.Rulesets.Mania/ManiaFilterCriteria.cs index bffeae717a..53c9a313b6 100644 --- a/osu.Game.Rulesets.Mania/ManiaFilterCriteria.cs +++ b/osu.Game.Rulesets.Mania/ManiaFilterCriteria.cs @@ -29,6 +29,7 @@ namespace osu.Game.Rulesets.Mania bool keyCountMatch = includedKeyCounts.Contains(keyCount); bool longNotePercentageMatch = !longNotePercentage.HasFilter || (!isConvertedBeatmap(beatmapInfo) && longNotePercentage.IsInRange(calculateLongNotePercentage(beatmapInfo))); + //多选过滤实现 if (criteria.DiscreteCircleSizeValues?.Any() == true) { keyCountMatch = criteria.DiscreteCircleSizeValues.Contains(keyCount); diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 042d8ecfcb..c4cb31de89 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -109,6 +109,7 @@ namespace osu.Game.Rulesets.Mania return new ManiaSbISkinTransformer(skin, beatmap); case DefaultLegacySkin: + case RetroSkin: return new ManiaClassicSkinTransformer(skin, beatmap); case LegacySkin: diff --git a/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzHitTarget.cs b/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzHitTarget.cs index 77f19cc6a0..4281891950 100644 --- a/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzHitTarget.cs +++ b/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzHitTarget.cs @@ -3,8 +3,10 @@ using System; using osu.Framework.Allocation; +using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Game.Beatmaps; +using osu.Game.Screens; using osu.Game.Screens.Play; namespace osu.Game.Rulesets.Mania.Skinning.EzStylePro @@ -17,6 +19,9 @@ namespace osu.Game.Rulesets.Mania.Skinning.EzStylePro protected override string ColorPrefix => "white"; + private Bindable hitTargetFloatFixed = new Bindable(); + private Bindable hitTargetAlpha = new Bindable(0.3); + [Resolved] private IBeatmap beatmap { get; set; } = null!; @@ -27,7 +32,6 @@ namespace osu.Game.Rulesets.Mania.Skinning.EzStylePro { RelativeSizeAxes = Axes.X; FillMode = FillMode.Fill; - Alpha = 0.3f; } [BackgroundDependencyLoader] @@ -35,25 +39,50 @@ namespace osu.Game.Rulesets.Mania.Skinning.EzStylePro { Anchor = Anchor.BottomCentre; Origin = Anchor.BottomCentre; + + Alpha = (float)hitTargetAlpha.Value; + hitTargetAlpha = EZSkinConfig.GetBindable(EzSkinSetting.HitTargetAlpha); + hitTargetAlpha.BindValueChanged(v => Alpha = (float)v.NewValue, true); + + hitTargetFloatFixed = EZSkinConfig.GetBindable(EzSkinSetting.HitTargetFloatFixed); + hitTargetFloatFixed.BindValueChanged(_ => updatePosition()); } private double beatInterval; + private bool requiresUpdate = true; protected override void LoadComplete() { base.LoadComplete(); - double bpm = beatmap.BeatmapInfo.BPM * gameplayClock.GetTrueGameplayRate(); - beatInterval = 60000 / bpm; + calculateBeatInterval(); + requiresUpdate = true; } protected override void Update() { base.Update(); - double progress = (gameplayClock.CurrentTime % beatInterval) / beatInterval; + if (requiresUpdate) + { + updatePosition(); + } + } + + private void calculateBeatInterval() + { + double bpm = beatmap.BeatmapInfo.BPM * gameplayClock.GetTrueGameplayRate(); + beatInterval = 60000 / bpm; + } + + private void updatePosition() + { // 平滑正弦波效果 - double smoothValue = 0.3 * Math.Sin(progress * 2 * Math.PI); - Y = (float)(smoothValue * 6); + if (beatInterval > 0) + { + double progress = (gameplayClock.CurrentTime % beatInterval) / beatInterval; + double smoothValue = 0.3 * Math.Sin(progress * 2 * Math.PI); + Y = (float)(smoothValue * hitTargetFloatFixed.Value); + } } } } diff --git a/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzNote.cs b/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzNote.cs index 0161bb25cc..c87ea445c5 100644 --- a/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzNote.cs +++ b/osu.Game.Rulesets.Mania/Skinning/EzStylePro/EzNote.cs @@ -35,7 +35,7 @@ namespace osu.Game.Rulesets.Mania.Skinning.EzStylePro MainContainer.Child = animation; } - Schedule(UpdateSize); + UpdateSize(); } protected override void UpdateSize() diff --git a/osu.Game.Rulesets.Mania/UI/Components/HitPositionPaddedContainer.cs b/osu.Game.Rulesets.Mania/UI/Components/HitPositionPaddedContainer.cs index 08190610fb..eb0ec3211e 100644 --- a/osu.Game.Rulesets.Mania/UI/Components/HitPositionPaddedContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/Components/HitPositionPaddedContainer.cs @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Mania.UI.Components private EzSkinSettingsManager ezSkinConfig { get; set; } = null!; private Bindable hitPositonBindable = new Bindable(); - private readonly Bindable globalHitPosition = new Bindable(); + private Bindable globalHitPosition = new Bindable(); [BackgroundDependencyLoader] private void load(IScrollingInfo scrollingInfo) @@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.Mania.UI.Components Direction.BindTo(scrollingInfo.Direction); Direction.BindValueChanged(_ => UpdateHitPosition(), true); - globalHitPosition.BindTo(ezSkinConfig.GetBindable(EzSkinSetting.GlobalHitPosition)); + globalHitPosition = ezSkinConfig.GetBindable(EzSkinSetting.GlobalHitPosition); hitPositonBindable = ezSkinConfig.GetBindable(EzSkinSetting.HitPosition); skin.SourceChanged += onSkinChanged; } diff --git a/osu.Game.Rulesets.Mania/VariantMappingGenerator.cs b/osu.Game.Rulesets.Mania/VariantMappingGenerator.cs index 2195c9e1b9..5e4da2d480 100644 --- a/osu.Game.Rulesets.Mania/VariantMappingGenerator.cs +++ b/osu.Game.Rulesets.Mania/VariantMappingGenerator.cs @@ -42,13 +42,22 @@ namespace osu.Game.Rulesets.Mania var bindings = new List(); for (int i = LeftKeys.Length - columns / 2; i < LeftKeys.Length; i++) - bindings.Add(new KeyBinding(LeftKeys[i], currentAction++)); + { + bindings.Add(new KeyBinding(LeftKeys[i], currentAction)); + bindings.Add(new KeyBinding(InputKey.None, currentAction++)); + } if (columns % 2 == 1) - bindings.Add(new KeyBinding(SpecialKey, currentAction++)); + { + bindings.Add(new KeyBinding(SpecialKey, currentAction)); + bindings.Add(new KeyBinding(InputKey.None, currentAction++)); + } for (int i = 0; i < columns / 2; i++) - bindings.Add(new KeyBinding(RightKeys[i], currentAction++)); + { + bindings.Add(new KeyBinding(RightKeys[i], currentAction)); + bindings.Add(new KeyBinding(InputKey.None, currentAction++)); + } return bindings; } diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/approachcircle.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/approachcircle.png deleted file mode 100644 index ff8b02ce800824f510e8655a1a9d977418bbdeb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4540 zcmV;t5ku~YP);J

@NHN+%xmd&%Mk3yL--e&pG%0_n}mDQ`*|v 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 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/cursor.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/cursor.png deleted file mode 100755 index fe305468fe9efc47be6e9e793baabdab04aab4da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10496 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 lHvJ5V|K9=phm5}k7yxVV^TAT2(qBnTK@ z0-l32%{aNe_uRQn>?9|hf!n#ip2wW8x3=Ts3m|d+4Qb+fVseKf#rdn zA?|+&whi_j>@!#lY)`y^MH#JOM?c(q&ai4^Z*+HeKd=%Lm&=tO3A<6cJILgb*v)S|t*jXcwTurt&j1E-0hBxf&;7YnT zaKvIUo~)Z-yL#n|N9;wGU>Q!QGizaCA(Ck0yu7^Z+}zwOiin+^oxP!S<4u>OyDx{~UhYP_b_|;Gd6SKuUGbbgpp9`t4 zuP>&Gn4O&!z42De57RsXBCzh=d|g#lMHVtPHYN&LW+|WyMwhvehK7cGGhylN?d3wy z(_gF-T0Ak^+uOZn!Xh-gFxXFJArKb)^hJCPozzWzFLZ6OLOwxQ4y||u5%CTW3-#G%EpOKiF?SBr{}0zPSNZ7njxA)!!clPzCqVIo-wgyl56+~n(;ni_Jo1OkD1Vfhil za$v)$cVI>ZjFcm#>+F2@4IJ*tqtzP@=%Sg1mf)-rL@(a}LpQi(m5Sff)D!f5RVU)R;u zk%dU?u>@h+wc?TUV7K|g=kt+;=&^^25GQMNC+uM+ECPG1COS4pH=SMgkj!@Zy;t^zzGL^7M?C~|t z6(P*kfX1LgbBAOApi1 z{yuZhQ9(k1J@9cko>SVso=31tK4U#XWniAXQxWlxN0?XA z85)+b3Nrd#2H(8Hm=weF!_2XsP{{urDf3fW$_V)*zyQwC!s?l~#8?0T002ovPDHLk FV1oRZC2Ifx diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-2.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-2.png deleted file mode 100644 index dbf7bc73bc620b8782be5518443a36c91d1216cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1756 zcmV<21|#{2P)p$w|{(9A*RO z%p)u&yhey6EFmmnL=hHhoQDXF6GjOWgfYS};Su3)o_`i<;vgGCSVdS(SWj3U!T>%b z+#z@f_XrR8=7J&~#YA@yR?dK)=2trhXbg7}s#TVi5kV`Gf|W4K6PU!MmH&*(K^ z1P2Zr5N41hELn{>GGIKuq^71W2{vM6m$taLxGxF|3vJM?k?Rx}7t2q5wLguAeAL(1 zd#qNg4NpPuxe7O14mqn4ALo>7ayp%lgY{;GQ%tnBwmOYm3$o>}uS3pi#Q)`b!GuH* zj6OR$I(}8oojrT@wvlT|vPE&XXc}?OPItxe$&)9q8eN!WWo6gZBohMVS+q2cOy!fw z@#DvP+S=NB^j^8Ds_L?ox~~v!hiJJVuurv!|Aove4l*(_?0U#oR8-h;!+eMW>3Xn6 z(A?ZC90_TERP|ykmtMlRGWo-Y51;p^d3g4&UAr13(ik?vbCLCOa&i)k$WE$T{y?p6 z(fTowA0yl8;zM7tRasf-2Jp|bv$I#m#Kicz9gWfyi~K8Y5T<+>=jkQxa=GMn;U#X* zE&fiB$fHBaVk<)R=9P*cwed5djUQ_i*BQP+Ph_KB;!RCWZt3uM-|7r>5|ekK_9v_( zY=AqdoD1*oBftXtQN_`D5gct4Z6>5{y#*U&LWQ0n{+Oi_m^hP%Muz|*gJ@nNyo#*O zt9(Q>yrS6WVhug&PH`Qw$M^L{n|$9P>HC^+JB!{65wWKn-3I}F8i%zg4o;mqWi=A* zW5(j~V$B3@mV+SuA<7HU_T9R5>oZh} zdamPeINa&!>F1@S^Eq)H)NCX|O`7VJJiVlmEB5T!W0$7BferpI=ZA=}nHMYMkuH-q zqU-(p_n(&}f^y*oudUD#XZKi!+(JkWmNd1BHYrCSdtV{aqtmLaAW27XD*uGAG{mHl zXue~cRoxRbO8ONvuY@8&8ty^q|5LrB(b6eMBiWsSi%e>`hsB^Y;&?A{tGvra2`0;k zdtf0-nuc?HjZb;!Dk$Pa8jbW?&W6k6VDJ3N( z88eMCBHY>8={|Dg$W@K~Z!`#M^G`Ta-r+?$?w2@|ewXlp{3FQX=+UFrnQ9ptzHs4! zi*D4Zh_I0X8FeekE2XkZCas4s$Wr^}K7IQ1?Eu}8-tjRfqkd(5ZQ`ge;2%{2y}iBY zV!}4)iTxzF5K;tB0XcKx)!#O;-Sr|~m*^RFb#*T3aKvBA2T?OiWPLbEqpX$W=2Dil zQ^YyJtO=$Q59P4gY|3_RTr1+(P)rdr3CF7w#r~qaS$fxBb%?jbzE>2vxw&E0Hrz?_ z{4U-OoKBo&vQA87W@aXalXzoeqbw7*Rz^j{k#yb`>3p`{Woiv+^Jik3cPofTibjA+ z%&?M1ZLZk-d8k>dFzI}g^bYYQ8DEl2Zu*Nj%pEWL|9Oc>+x^L8s>q@RYT=G%13S#Z yFpz!1`;+&0({xl z!WaUPdgUhj#U&~~aA31EC}4od2qXp);Rk>C$q(V@0L@|`3WhWb5t+!%0Xk{M#jwO7 zFy87s^+8jVj(AW5lU`k2HI|i?>6ues16J%NAXsfYe_EJVR8;t6wX3VE zSrhpVa0^y@&r#+K0;sL=Co@y+3lnK+X)(|g6VEjuz3VLHV>CI12US&7Q6V8Ahka}! zeHcmD@7Rmu)|4I@85uk~J8N*4gi@&t=6&$O!on_*i7c2!nNn^mbApYdV-}Nxx;?_f z!vm(Krrzfv-rn9mnxCI9tTsjy9dP{X5sr3<1W z930H%4Sf)^H{*i zBS{23h>YEV&d$zkj2iBePfAL3r{lM!Xu;d&A9CaVthdcD?N@}gDm z0j^g(N?h~+p(Fv+QpuyO2L%OPpy_qMm(EHzw+0F`z+JRQz&J@&lSuWsJkUqbN^g;mSxM zT!Pmws0%MwZN(QZF1vWPUU$a#S@Iu^!cEWv=#M*<86LjhJejQzO*3&iVy0Oqs=}c^78V|VEb9L^3T!n)9mi?uJ-iwG}{)zAn>o) zRH7&YS{gtoba-xnJ#*CK%&C_sDjlchk}Nkjms_j%_xH~;(|h9TJb<>r(jQz|St)T> zBrz%a0kswq$#J<~3W$==I$n?MulP}{wpWMGgDweGY!)P?#mqK!LbJHXy&Ex1u8VV5|6Z3J^r>Hsg2ytxRT5j0W(_@fAd~9rN zQD_QHOiX0+kjBNaC8iu}0 z)H~d>*;k=$m=R7u93Pg@Ru1KL!s6m$9lpP0NF$dHN2INV1oi*UQajCJo0XN7Y2JE0 zh%4OK*!UCkszew+5Z262DjaJCM6bTjQ<}EeDTJ}Nq|}UJvgiXq_NEQNbqnx4;10eD zbg9~6h$~2Fz03AZPy#@@j*Ezh2z8d6Fe)r8ELfZioYMfu#?jHyKN*J;k2$K8egz&I zTxBA=BUD77D9Ql5?4{6dqA>RhzySB(bgRC#^C|^bHkMMh$^%4ilPQtOJaYUw8a|12={s5$!(MW|36v#JpL1403@th-uUEs@Bjb+ M07*qoM6N<$f~Rj>w*UYD diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-4.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-4.png deleted file mode 100644 index 4564f6d8bff88ce7a1e983aa9192b8c882789f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1814 zcmV+x2kH2UP)MX4xD zf25+&_`^?;7>(E#Nd$>eNnaomF(fo5Ch!6eeIN!x0uMwXfe?AmHFJrMt*yQ6a5&_FpC`1^Z%w=C zJCY8WYw)Tc313)1#2v`)6Jb+6$LNigvs5SK0`Y68Roagv#t zd04gI?(XgpsX0WL_w_Uuj!^g^YjkvUm{A7?@uH%lNN(QG(FqU9pAJXFeQ9ZFQL245 zH#f^fMrnrsQX#Tpr%s)UGP@en)6?beh7t+$b>j)X=yP{WO#V^nzYkT ziD-p&VPZL<2?uf!UK@vnZc~*cFyuGx+{z;nBC(An#oOW<1R!anXgv}n{$vuE zg|7&3&&S1m85tRoCf&**?`=v%m;{7fnh2L5k)NNR||qVjAY%u8;Hj*e1)OT4L0@dLYwS=z2sXh`JJ z%nFIRy1F#Irw9_*^);6di-j#4_6{SG#Dy$+QPaLj_>#sv?CXNWD}<+o7IH^|T&d3m z30*Ui&cZ4yD?M$zNSj}U+pZQLhy%XR^MwTqMMWqq>!TaKBZ*Om^nL@*6nY(h( zesPn{W{cm-Bw%fAZ3A+Gg>sOHTKmM+q@<)HmMw0Y1ZzYt2dx$vjA$Tln2QAKu5!?V zeB)LoVz=96w;C2o*jGwvSFF0a`rEBcq`bUb-nYh9_dt$XSRk>S;h zK?z%})-&Avj&PR7@05u^BtAxXhwD!3W*r?JNqV`9E2Ti0XQyJN6UP!^m&@uJd}_D{>E`RYWN-cbhDXLyEsd@;Ht{L zsYE0)D6<~oHKX!BSCcIMuCIl}x)SlW{ZC}8+1~;T0CqcF2-dk}y8r+H07*qoM6N<$ Ef`bE6AOHXW diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-5.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-5.png deleted file mode 100644 index dcef35eb594a4c047cf37dcfb7acb660cb155de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1848 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 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-7.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/default-7.png deleted file mode 100644 index b9079ad5d5f863ccbbbeac6ab2677ac0d2645698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1452 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 n?OHhGXep*ZTPPG6 z96*o~Ka@eKiOiH35FtuXA%TyY06%;%fA9$jL;O%6p$U)@HP(nCkWvBxO@t7JLo&jBQyWN|r{ch6hwv-du0@2lV4-PIkJVTV8TdcDlE zHUN9TS%53R8Q=i0C7*c=FajO`wgC6o^^r7LL4u9|Pr%CzJ_65g1Lgn=fF-~R;343N zmWTD|1{y4@XBK=F@FpXB5Cch%17-mmY$vRfwfX_Q9=G--K&;Y=US3}IadB~OF)=Y- zo}Ql09v&V}%I8;BR<@RxmkkRG3tNMOgX^80oogyzgKlyIa0~d{mm&*9&%otvKoq@S zP*C8Po}L~Q931Q?YD%NgxHCLFJlECLHCIzpGpG3TAYcG}dsl^+MY4?OWk4vumz|yM zU0q$B;Ns%qbPztUxw*O3*w{E&R#rAiZr=iQ0IzjTWR*m5yIWgZqaq_CgAOAlO;1lR z#>U3BFD)(Yuv@Z(Ep`kRmx*cW?MJs1zWwjHZ{u$5*{2tO& zM2Vh)OW1yhqE9w7Gz@rqdw&7z)rN(IT^$=6o7?L-bS-%9GJYq!^$y@giRG3}K^4QRZOk=;(+P-TJ(|ymkdq z^A=`iX7+1Y12YT;GMoAXUQlxbFF*+X5*ixnl$e+pEJAc(U|_Pjxp|RI(GvB5&j6-K z$Kb(0(y~@@ad9}A27w{%&17L>%T6cLsH&>EBpM(^MMZ;T`W@g;7R}TA=Ire3nwGT! z0s_3jSbSG;x6e__q6m3|TU9hgp;bplMz*-y0d51)$3zd9hQVOi(YhuaI=*D;LCIcV z0!5dSlHx6D)!N$HaWWkRqDC^8(x4Dzl*a{1)*MLj@$r75`H=+GG*eS_oRlGpu0WOSCPWCiWQbOqp6&0EOr8s14>8`oDx;l%j zO;Q-T!D&wRgzPcd*Vjk4-JoJse;&B|5J1T9q|E^z@&731&jX&54P3P{MeR%WRnrj{ z@Rbc*mGQ(zxqVts89rcpsgIu}zhlq_b3r5{)YsS7cgTsjZKDhfEJH*V3=9lBPo}Ri zjiF;DkjVvdb91GvN>bt~>I_cStja+W3RxCUI}9E+eI0NS2%lqxrD>$5rV5L8%->|X z0V(kjC2O*7eSQ5LN`XVQqqerTF;VMQ zR8&yw`CCv>nnzDh4;AdIX0l9l{LcSUQc^Om*oHkvX=!PKg0Qqz`3@69uId<39jg}X zS?yJW0Eu>OS7J;}O)WsF{sUxy&o?$U3^Hqsj*iZ99)M(QNtrluvWzeW#;5#)V5u9s zM=)SVz9D1-IX`6$hHWC;wkxd3X4=ZSy1HZs2M7EAqf-bmvj)XxE2+W00*()!scu;p zXlv>&W5XJV=xFw>(WLZkX&P@t!xQP~-xb+I6BY-;^L{YrMsnkt+wp>M_8{EN~O1jQh5XIM=AM?&4=F#5X-efHT2G4jbi!w4Y zhLp`4z_8B3J1$wvIC4EiEm{d$oQzNi2!TmYZrnEU5qs)^eyUS^oOd6!H1_ z`BByqz7>)(Fa2M9!(H+oGBg=jEL*B$aYLa_Z3P|`o z)32V)HPqho$eCgySO5S307*qoM6N<$ Ef@aS_IsgCw diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit0.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit0.png deleted file mode 100644 index 3c3ebbfd0b56ddbc5ea559c041aa55c2901b2cf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12904 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�cZa_2kS}f04>ihEu+(-}$68mAH8q>c4Yg}Zw1U5cyjPrzcc;21 zO}$F%L)_@T&0)*iXf-CvhjIO&mqFgsMtO0u9|8C^bCA~uMy{agX#U1Lf3yS=T8V3V zC`|-zcm6mMrruab(wUEJ^lq~9wIU%F(T@Dr`RSvfIRR#VjIn%mnC8%Gu%2`$9~bp< z+maNMH~22(3vM`d=S(0OZ@g$m<3Y_Ge4+FUjoH2rY^OlFHiUDH9u2-Jr!WDfO;0sQ zSH5~hJhf0|pdF`2)~VAW?&z%MnQ=!f&<|VfzMBwInyt$Rx%>X<=SlD4!;UNT>@PlNtt*&nR zy0BzmIP`)3j5bWkjyClEQIg)5FK C#z4*13%nv%sar3_~4ci)7wz%BiUeMi~U~D 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 Dvd!~3 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit300.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hit300.png deleted file mode 100644 index 24945f7d925ee3cd4dbb741907aa1a4e8e90a1c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33649 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 PUkRuy>nK&jZ6p5&sNh6p diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hitcircle.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/hitcircle.png deleted file mode 100644 index a5a3545abf2510e7eec395bf47b73d9082e1fd8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3572 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 u5 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 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/reversearrow.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/reversearrow.png deleted file mode 100644 index 7ebdec37d356490d018f711ae525abb3250be3fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4853 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 Y0OO;-v8NaCZ2$lO07*qoM6N<$f&jDokN^Mx diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-3.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-3.png deleted file mode 100644 index 82bec3babebd59263dc486e5900a3a01ea4aaed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3712 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 JPDHLkV1kmK?iT<6 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-6.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-6.png deleted file mode 100644 index b4cf81f26e5cab5a068ce282ee22b15b92d0df12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3337 zcmV+k4fgVhP)oInXkiAowm zxg2vDgN+Ra8+@(L^|fAmr|*rvpF50qmLrXnksfBpyR&b;^L^jgq3gQ#Lp>Z%`8lV2 zR{d1aO$b|Fe{bXz5f|VFVg#}B+GQd~QvE>4f&uwm__4{IJ$u&nmkSmwP^3s84)6d8 zCV1t%Ti&M&u^`Y3bPKwG9yxCi#rF<8ikv$NF-0m?h$I7Pz;HpTob$?i6uFRzP&?2D zv zJ$tsx)XH`phgI{ zh=qef(mMD_!?d{b% zJ3F;6zW5@vckkZPt5>fUOU@kBkNRm);C{Aum?ea*VGp?ra zgGY`W`RVh|KOaMDxm>QND~fP?e0;n%a^y&D%a$!k^XJcBv3>jY47fU82ste^v47BV z@=LD-`~u*Yz~6T5+SS?C*7n%ef*bWvC}dd5?%=g(#mkp3>v?&3m+?J&fu93&B)%Ez zE`yhlixGD|3#QJoI_0yqG7b_W81M-oFV(_eb& zC1%-a;IF_R5gR3JSVz+_+(TqjYgmQ4wS8Fz_qj$Kqa(OH7z588davm@$j@ z?b|m7MfRckWj^3at)--B0czx;9r{+l6uyk>G4aAyYJWOuL~-MxEP`}EUKFPqwrU;1N6DGd1;lJhNM z$=a{K{<^8BrzhgI>2CIGv09R{T!N5GU%Ys6tTiUg2Qo{0_uY59rGeL4EcTG}k=K1f zkU`#9TwHw5&T@=Bem6Lb7Bv(*NDjsD8K2K*+oIUW>C(?X|GY|wHA>L;ipq_c*z$X3 zUo%4CzTfYU7X;6z_3BDXOZyle zwgS`b?ol`F7II0jS|U^0?x6I62xu3<*sR>iJA~AVkvYOV@C=5NkmUR8>+0%Sk@3E` zxVVS!0y>Zez!T;~ZeDcXBC8tiE@sTqU)7t2p*FErgAilbbQ{wZ`e|yk!b`K4m9fwp zvOOTBhZl`WO-&t+L1z>Oo#6=y32_LII8)3~{e~bAdZ9j=&zw1PU&5kQ2>2!Io8D* zBRk^}Q)y`K6F&a<B-&wu^(*EPgsNLCiTQa=Zr-(}mRW>fY{D|kNI zdW~_(iEPrONe-x-e7JZPPLDH{s3<9F*DO)KMur#41Y7m)*9I~qh z)Q(6t7gY6P2-tg4P7JZBKJi%lGg^d1Fu79zG+;KUmJ4-D&C;a+GiHV*Cnx8uTemI; zgN`<0#0V`?@1_NL18=?cRvMIW?rj`6{eahXn|5kZ54M+Ew{B@`)~xA)>@Jphp;iiL zuMEP999g7wbadoE0Z&6)%16klU_n^{d))c1H7#Qo{J2!CkXcJ{&lG`gEA;!|tv`dp&Kje(a4p z$T`h2op;rC{rdH8TFFJ!xeUeFu7Tp$U3-6X2;d@i&&6^i>Mp20eiKUcwNRewkfBt+Gv&k+lSjmx1 zS<+t86hYY`54j&9mMlvm-*eABmmY1CprkqyPf4htBIid^+&y~qXpk+*t`4nUy*fn} zJ|iUyseav(o#usioDfTwjnOkNzW8Fyqt+bA(vWl6Mx2zrH}3vio=`DEue@s(Fz$-~SLbrdWZurl!V&i%gw7 zd9u?wi7{gtd${}L&p!LCQ_4!u;Qsc1gHEbgYZ5R6(rDpFAAOXam6c^Xqfo(ARaI$) zg@xb1bC;xuH@ZxZkBp0B0?L33jGc)!yLfSKgV4f!K#xdihgd5~;wwwGlQV#M@4WNQ zEX12;=Tc@Uy|ri09zWcAN;(R6Fs&|=o-@*(5*jnXggJBOcsLuFpEamm8q{kn#=8vM zh|?7KBP1RtiK5Mi8p)@SSqp1ZVC#%K4ulelZ z!w)|UqS;5B5xC1mUDRKD?KK84S79fCe*i}*2J-Xsn~REybZ+9KExgszT6V(QfuG3D zF*Mx90|{9tBuJT{8qI@PTm-qZvY?>AO}%A}7iJe1I~azwW5_jr2?%~Es-|3ec84L=P0t}b;+m;)2b+OITeog)gu%P$B%bnpuU1Ga8(xERg#%aYO`d1IA`}rQ`M}&_9G_G zlAohMbUfVR%goI5qK3tSloP$zfl}jOvT!ctJbv-w#Q`9!rQH7S(=nLX83vrXEPU#!$D=TsqQ)`zW2$cX(! z#9|mE)#ABFT8dv>o+$8|h{c$ehe~YrnZ#y5$OPnEujzSz_`Cddg!L~YRLhGqEe>6l zKj9cK5ey3Y1pSZmml98-Y@L=r<#3wduqfZK`ym-$bXUJ)PBIne+3u-Y^mm; TZ*tsI00000NkvXXu0mjfuoP_o diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-7.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-7.png deleted file mode 100644 index a23f5379b223d61079e055162fdd93f107f0ec02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 zcmV-+2Z{KJP)me#3{3O=paJEob5+V*U3o#8b12GSgK*5+fg)$R>*bGqz zu@xdrBK?##CxxX+6pDEdF%0n+{eGpa3S}h-QPbGi*m~i@h3~@Qu=2U#PN&nXr>AG~ z?AfzF4Gs?WVHv5MDf*dhf%q2U`!i?Gyq%ky)7Rq2WHS2v{JehU%9S~|_74#45DkQs zEDNRF5RFDRdOV)B@hP~p-|uI;ckiwsd^VB})Fa8ls4RmUQ6x!PI}-(QWo2cowY9Yo z-mW7@aPy35!VuQhdWymdZQHgjM4~+0qGS?;!*q6NXlPnh)io97a=F;{?b`zeQ_reP zk%xR38ykB&Jw3ezz+{@HF?{8L@5KX4j$evlEI+NgsIF$=g9QxqwlDP_-4Ub zMdOr-6lKrLM+b>nab!W5%ri%?cs>sOTKcX{ZEbCJSZb>y9*?ujmoHDikAKtDv_K`* z6}n)GUX#R|BD6%hAW9d6Ndl}gji?PIFj7%bp<*emd=Z@=m}U`f-AOg3LT=%vP}(<7KQM z$B#g^HduL=0DZp!dezKBWv9HWrluykW5*83%DV{qIIW64SV3QuFrkdRD+!-CaiSi3 zcq`~*u^8*_?tc9#=!?x*&h&$21XJ}{^A@mK1?XeKhK)1A%=)gQM~}8x zc^5)IFfhO#KYsi|Xm3_+1`Ev??Bzk|a6%1Z9dZWRt~Y z%dW6E@ut#6`2$w|S%Um3MmLejcV5g(7=AH$Sz5Sz{-DCmK0fu$kho|I~@SmOii z#9)VD4g&!vF(sT0Ul8oyEC&hZ@&LK-uM6G(C%(?n4mUY zKKR_s0d62nK3%43kZix8&-A@tj`_cBvQ7cXd4LEYQs4!`g|KEK*$wo_ zXSeBhujwJ~ioE0K(W5~RMvfervtYr3@sB?GXu_mPlU(89;hNLw z)IeDC`~6x^Pmcz|T17=g@40j5+VQ>i$dMyg@ZWl%F5t5PXp#qL6Vg3mX@5vJz{zeQ zIs`}tMgrNu_=19hIcwLhO^l6=)gmGyw6L%+&EdG+gv*9asB=G->=`jdv{rLbMr-<@+EK;xCYb;X}VHRAYp^7 z_-U97JuP}4@W8~06X(A7-g^&?8a2v6YX(|!up2E;;vF3w+Rd9cwW6Y;j>5vilUJ@> z`8N)q6XKQPBCU527R$PXD2M&Kz{{}c-|+PPxUfEu4J34)3v20hb#(?>T3U2iQ}6HZ zzvFzkijJVvOG`_2xY!Ncvk3SJun-s{@xpB5Bu7G3p>Rn{_i*TeM=(??o_OMk@aX7h zTZ__CZEbB@Wo4zdXU`t(+O=z4@J&9U6C)EnZQ3;Vym|99`nt#Cx#L>&Z(8}|k3a5S zvu4ewjg5^*u=@;fS$w$-M0?HAA0tD*2>8uYPd)V&EfdTlYJ)H8?d|P40!Cl7Xc2?r zIIs)Y3Ty%X0Bi>i=jP@%W0VX_@_&IF?*qd6&Ye4Zd_La}{HK5h1JWgZ8rD^bpGiMO z2v6CvWlLUGR+hsqm>4ko_wU!9dFGkQS>{(C0>Z-~vDz3A45p7h`lw9O%|*$R zDn~LPls332)v8L)xw3cf-Uhmm)#mkjwG}H?L`$wuP-N-1iY%*EB+6;h(4j+(C$!pF zl@KhNSdS!b2+1x+tr8{t1p1^R(f1ljyriV0s=K?}^7_1YWMrg<5zZ6?MhIDll7J)} z4j+sSRiQ}s{Q2`8VzFka>)oQDf^AAV_DHaFvZ~n%7H~kY#R^f6@G~rXoAM7;rRWBi zE?sI9$=4+$`a;M&b$!D)q3%I(l$@L#DQQ&+f5Wo6>FN7IJ#}COwL2(f+$}|iR*Ftf zPfrLndgM@3Q`0E|-LLNB6rvo)jzfnIRdASD!|i-3B_$OwKiU>YuoOn; zrzpXBNqG7Wxsb!u2E~dsQ{-W&peCbwO@}V_4Ie(-QWMjvAgR6b$}4Aaeab-!^%}8o zzsnS@Mj#+zd(f7oKq>h+Tu!I+jylep<>cfzjvYIeit_0c-yI?(lcoA(nTS5Jef#!g z=wi*vy%;B~j5x3Tt+(F#1iMP5kTi%Z=&m5C#f{XY!>XB+Cr|eB;(>%|@gYNoXpcYs zco@`D#*G^{lJM!1hB59s2vj~OwguGnWC{3 zVnwnWdRi1cnt#=*RR@}ynhuJ3yCl`I9UOa%>>{0l8p>oLx>EG$mkSpz)Y&(&6R^{^ zRASV()TR97Z#(72W9%YoYisq_UVBZ4fT8IAHLy$?fTX}q!74lZRiS|J&@wYKwN0Bg zSz3pFOv?wezFmibjzU|vZk>kwepQD3s&um~q$tUM--n=;_ zF)`70Xi0`ioJEBA{PWLm5o88okfAhd6!X-n=F#E9BbRH-moL|lb>b1oxft>W(?mzF zX%g?2qKlO_gl);MP+`g$(V+qgSwLrtf&{K3kFwWdr0xU$D&Y5{I9APbs;jGwfC{!@ zB#d^3jVk{0JK+1$5~YZhooX_MB{2{95uS86oZinr+ii??cB>#lP5Y^Iv%dgV13wh3 zmVLhm{sI4QJbn7KC1Dzegwd&#Nmf`QQ&*fK2vcOU#Hzo2>7|!yk>_lQG9~e*C<>L* zYX1ya4$J`_7K==l@7(u2;OD?!@Nji!&z?1|VP#UcI`zw6v6Ad`z0fi_+rMiTG#=nBrs_>aVY_cfuGW=gyt$ zqz?y^pPW=d@TH)dsZy){Z%lMdv5E<{;}9{l?k6(Y@vx-QFjcvt(ewD2PV8C^rX!FwH;c6@fwLr< z6S#cu6^Yj2 zHQ4#mm-WjzZQ>dYXytpX$STc@j>0Fw6)j|)su^=)1VT28%%P~|-BNATxJ4-dk4`h>H}#Q?{*{EsZ*!AOiNf!Mb_x&FI>3L z#9zZ zBrL7@ZIgb|Nu&}P?>42D>K!|F)Fa;xrOL9h?3giQvspDb*^;=|19des?5%vJN4Y$ zTo#Cb$$G*zpitHo{!B%N4)@#(FTBuC0mIcCt7~#US9jig^UZeo|0*C?eBEOVtVw*U z&UPZC;tVMGd2{B>aZ@-4a|!wuI|6pL<>lo@KZQ>vm>m!#VL3TD&e^kP8*TdlJKVnK zo_lU@V`JkX>2TFjYKK}6a|&~x3>oF(dJx`A3pX@0gcRax4UD5f>kwR-v04KQl$>0{ zc;k&XI&sfExc5(i1tNYD#LfP<5^7qsi;(troDg2ep)4pUsIRD~Fa&p~8xLkvi*{T{ zdG^_7t7RcYE!vG0-;cO$(Jo-^R&}_EqH`(CvokU>rfk@-;Q{E-Fe)Mj$Y9rS1N%1k zyoQnMEG#TMA5}z)1s){sI9)pHfWZtCME-NcDUY^*$fB$);rz@rb zQd~p5a*`-edNWRrN5NfU)6>(VrJ`{WxdFr7Dpjait=LHWQ)gO4X*JDq5A5X#3)1Rs zBd-vT2|$$WR|Uc?WL2l2W?R}!ucN3}PufjlCFE--gLzfTXAsgzxa9+#?F&vHuEb z{FqKQ8OQ*#fE*23@;S*T$}0H84HRLL>;T$;7NA+c_nkm5?!{Gzf&9Qdlg5uIHz3(` zU?h+S6amG2EiEk_yKv#cvE#>&&nPS`OvuX03RF~77=FLsh{a;Y_uqeS4h#&$>gwwH zE?&IYx_kHTpW52m>T&IL;2LlPxFr)H`99n?GF;+5-KT|cf-L(8pa2*Rj3-vDTJ^x1 zHERm0s;UA>Nl8Y0e7q4128}=Xe;Q&TOn zBsko`iI9AEcQ;od_U4;!*5UOa{&iX=P%l;|@vxi4?;tHctO(}hJG2;3~%3Z@=BPZQHh8`1nWQj99%%v-p4;Y30)a$pQ?n5?~4l zSMS)djauK2i;FYp_XPc3A2a}0ZvFc8jGY<~ z*K@kc<*Fz-j(AC7(}3Rt?`__^87tVv3}AW`C5}%~6PMS2S z`MKwwGjH6uVPZ0l*JFZaQ&W?y4qfDOQ0Am46nMcOX`n8`2QfB*gE4?g%{TtY&EXF&Dz^cb(d{`$a|Uw+B7 z#hiHrI1ZeWOhBvE0{`MFpvWA0_0?CSyw1@-k(F?7-_uV&Jx^ABloYlECnc&#b18C> zkH<4pu(G)g2HoY$mkneV`tAuKcUDr?O{sLZr1D(^>VSWvsMKD)desV4r>w&Ju3fv9 ziC~;qIaB08z>PF#H3FF=Z8%nb<&{^u+uPeuNnyAO+?H}2!ZNBX&?9<-CHoS-U-$02 z@AfmxI1Of-^73*6RhNNSC>1$HGMvv&I#EPV=Co=v{Sc4Ycst<)8vVK7$Lmk?Ydu8!XyyRAFAT96o3Bt=LW2H zMO>goBM%4jKWmbQKnRvuD-GZ5j=eL^;>HLJsE*@!q0_Vhs}f&~i} z_$8yINUjcw5*;MXn@8YJVUil=wu4$Bp9kT=AXnLmOAgZUUT#RgrnSe68Iz;+pF#az ze&ufm4jj0_0P$Kn{$NH%M!Kz`9n7PArD_D?rCrOE>Q*F8MF}*9MapYX1wwqO;-WXr zgQQh-cV4=5$s8(3CQh7~FA_Fa)FFR7orOu3G)w+hD9uC}8wz5^j2TmwFJEqW)dFQ4 zu80thb0Xa*)vWc|+wrNvEX3hcT&73*28e%Mt zI(n$o%Kzu*=O=5f;YgY}^fq$nb(UE-7a{3qpM93ro{qOOfm!leDd6W-qSAf?EG;Q1 zc?4o<$yZ-}m4fblNY_yAk(Za3XxqW^>01bWQn4CQW>20zeR}-dxpRF^Kh6#W0b-!5 zNqOOg7Zx5nb}UzfQHP{6MtT~oISOrBDUkixV~_a|2UZ6&+?I`j3d8wqWbYu|FE?db zzWnjWA2*=uEreEs#;@o=YUc%4RxjU_b;3k!o46%{`Cu2tDcl;0o9 z9h_P?+}pnIcgON4NMNzmT@U;f`XV}1BfwS+{%=A+nH?P+W@l%o2{FVH?b@ax$gM_z zuU>;K+*40I)hHd%BN8tOdJ~}3ShL8?Gw{J5QLe2D=(U7&A?o1t^mGHAwPjsq2B#Hb zIt3X6jf16OyaqEEgjJWV$sMp)MCBqB@#jvQIB{U>)~%Or-@a|QiJRdLihitwfmktC zu3TxXTer?|)6{z9#l-Eqtfnq%)V@cG~Rr<=EK-SWKt=FOWX0{#%bzX_<8ydO~R5ftJv6o;@Vw+6KW$R?q4=gvKV zPGt^yN6J?#u$)|gOG>M9>HGTnjI(FYnje1nVe=PXd{GCz(k`(>ojlnqi>Q5+D_5>G zOJ?gAYnylMnrdQ1xk{U)G9RjBAC~kQ8c$ZU`;ZP(Rfi*$%Ocy-(qh!s)<%yUInoJ9 za20=FkX_Oixgqxlje>%L3Airk((8JYp>~*pQhky&IcUg5OodS_b2D&K zG;UI9X=z4rad9%TMi@6ya<$80FFGW@No$pWv}YM-44pc4DkL%1qgncn{pp~HpES`C z*-B4n6Nm@_Wwilxu%Z-U{)MpkJ=dkb7|zvrr{nEzPXK#&`Gb-50cW&XqK+ zoR8jY(dyN!S0e9bz_;R%SN-Tz`cb}n5ge`i_U${006QkBu~DqitEHuw_O~iraq2_? z!F(Tcxm$&#l@Yj6#O*b$Y3|o^wC*03rRU9?S6x$6Q%ohMG6IkQ3#5Z|9$b3d(xpq4 zo7~bG*1PtTMN=n=r7ca3j${-`yA9^={rmSfN(O6@)eJk4_Ny}%1VIv0n$w02vqX7$ zc>*#=H3F|)tlXhlS|=P7!kOaFqoMXDp)~v5HiMWo(DWL6_Ut(=E7>YWiP{_IpjIMH zbzP%j< z>4J6+6LM;tmG-a#4MM5z%$YMWx6(~Ly<)|R1l*jud5SaxC1TAS*{jGEvTO(@0Tq)c zPp*QL4Z67ot;~JCojZ5_D0_mp-TYaVZxxJI+G}cRDpE}2 zRj}84?X}k)fkI1W3bY^gsIx%^5P_w&K4Uw^UXVdcvi9qAfyJXaX!mAJ?r-?$2ic6j zE?McWO-;9R#8e?ZMgpyJ?hat1-mGnh+)Ya$2QrLu;-oen7t=@jzqn%-91#>09@#eSe~xa{P!cO1}4eYfP$L>rto3I{Ze zt;qLj8ayImXxLBG-0Ra~YMUycNdW!TZ`%>l^>x&?9q_Zss;qVI4{tbBQkx-68-DQ^ jB>n#KLQK@`Y9D2Zm_ee00000NkvXXu0mjf72dv# diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-comma.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-comma.png deleted file mode 100644 index f68d32957ff8dc2e6e26e2b739eab85385548faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP) z8ION{U-N9C`MxinYv|$`M+}Q$F)W6~uoxD@Vpt6OzhDOaIXgR>o2*u=8V;)D@TF?C z+T17S{{H?ym;%w+TADXmhT?$-O-NWvN0;UR_GXqT)+8VcT7_OfX+F1jnFIZS?x8!# zh8}URz_+nygyLs1rfHeIXpZ(*xcNFpGu`( zwcG8nVHo$9mzUrA{eGSAow*&jOrP%XnP4jnsY0KQkB@6tS64o6^aq1MaO`wCezV#1 zPfkt<_8IyJm7o-H)Y71MrP!@^ySuwPg+f7WY;1^ZHX9uC`MfBVO5*6~=mXZgWiM7_ zg2J#BUQj3&i!V*nT&N{Y(}Zo?M9#738`=bqh+giU0>f>loV9|82+ zaU80#CVuw0IXW_vYCm)NDP(>JPj7d--Su=j9k?q&C<*&31~y-*}fwjTm!p*P&Jvpnyz z)m?^=o3|X6i423GymcH7s?X++lz!!LDcrGp4_y83T(4ux)LkG8*W#nj518@;Wz|pB rcm*5_XP0^3eKYf&7eE$5NN3S}(it^R$P@B}JRwiW6Y_*SAy4SP5!!0C zTE9FJKtC>>NlHB>x7U?fC3eMrUE}-6&6|p1Lzp5^Zgp4;-?Tka0Ir& z1rTBaEJ%Zoz;`eQ3$UbTh&3rgX9|7}x(Kd<2wyLO^E@RI`3er0F^e8jrdymkWwHaJ zU>EG6-At#`*8_n7WhgqG&Jb^YGairM;r=~O+gUez%_x%?%@8~chr`cux!mVouO}vx ziI~l1Vmh6Q;czJ0?Y5Q8W=ZG?xDRe~_LPX7{ta*sJS`LoBN8x8Qyg!)u8YB7AXw}% zxJ%jddP>*89q=fXO1TEF6vaC~s48xE{ zqtTROY?u4ELr$I4>-A5|~39QXWMIpY}VCkbsmq$cd@;G3M5vml{BBvrEa%t<@5R1rBdky#=iw0 zIjg12+aCmBcDQpy_7jQ3UL+DBYmj&PwOZ{J`d!cgAHWx$%}VBs{OkvExyH8F_z-XN zhAjBd4tYuwo)#^QA>$xAWkltmAR9EuCtu}5>6DRg%ppIcnq=Aa2%R;=oZ@xF169W7 zDr`CzH^QVBIE8JK`;M1drwJD)wp9Li|3LU5zyS0^RhH-3lmq|(002ovPDHLkV1mea BUy%R+ diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-percent.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/score-percent.png deleted file mode 100644 index fc750abc7e80287192efb65633e58b6b19e47125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4904 zcmV+@6W8pCP)>HPEA?bv`x0yR5sa^IhC4IP-&%2W!qCT)6~GN6jP8z zltl$(hYNRk=iGM=@9+a<{p0;+&Rp*D`+dJ>|D1Ea=v3#IPV=h$PLh+zA^z^}r3W$! zGSIW_KsG`4u0GIsjfJ#}={1b#=re=(4i|0#YNprjY=)m@0_q3k3FJZV@v;Kd0W|n>QZAbRG^nNiO?^UR0E#l_jgTq9~z?!8NzghdU+poJL2g+hsf zr%s(3>2NrVMMXvR`T6-ZbeqY?$H!~YqD2vtCQb6+wr$(ljEsy-_`CopALtxOAAjEj zYuGe?=SEiIO=||zdXeGb;n7b$^;GQbx8L61U@)iw0|q>G>#eu0fbXu5AobnyNm!iC z4z)E9C>-cIe}DhP6)RT!WB&a4{vIA4N~hB)tJSLZ?Ahb^^2;xA!^W3iepw$D7N$%l zlbSejV#3_Hb7Ph-U;alyK|vN-05e)gekv`XA88NQ97OAmNJ~pgUb=LtH!!Mj-IkUX zjSNns|XW)x3H0^tau1n;SBX zn?MHf>esKInlWRBY5Vr=6Ysg_p1_kQPX@rpK|sYoRTMCIU1YF7xdbv8mYSNH^vENR z1SBLRC|uKMG%Balsp{(L)P@ZkPK)5?=uYJ3;9;i4!hqsIgHtwc+&E|Y^yx<2I5HzI zWE2-FuvbA>_Bc1})?TD*91RaRCO`cV;31^JRgM9}_V?m^S0O^aH#Y*}zzT%68g zvABfB&uwmQR^WS%l$4au;q4xv<76FG@VTw4nq($@$l0SFeDJ|3@X&S)+U<7L(9obR zT)3dX9M#ydW6_M1o10sk-?_WHtEi|bwPVK)pC5nxal+1>J4ff`miEGX(4U%`nq05AY1g8_2nq&;fsEnr zQ2Y3bpW%0`#RCTps3}vXd=GDT0Uf4*hJnW_qjhJRG*S3QMnje?S(4!E>)VDwyc!!D zReE|lGMG=%(|Yvi(Sbkw@IxZ_uK~=i)i+zSJD4+W8cANrELsIJhMFoVDN)~j_nrFn z*I(7<&70NW!Gm4DBQ0Vo$^*JUDGBp%OII0GBFb^v7<|huw|JS&<~BdV4OLZDsWofX zoQJoVoN_3L1ikalJI!a#oSE?ItFNli(9kx*vDs`cM(}=S3_n8+6&4oS_U+r(yldAk z=P$qff>B+qUcFkOfKk)7lu8+O)|5 zzIY7Y{t0x3g2*6X-n4b=R=?S^XGaeiGNcWYcpoHjmlc3kTPiCnFJFQSHeYt-%9SQs z8pH|t~*}3o*C3~41znaK}Kr%Bk?P!W^q8gaph!G?3&%c4t3bKg) zB0(YZEr4n)vu4e5`7Q>ZnwlEa;sv3_ik@mw1|Aps04W-@riwlVzGD+uw3;xglR`O~ zT@z^B4rI^<9(bgc@+4Y7E_lKK39#2FM#W>fwhU z_C*NCxcKLve{T8x_ur5Al@^tzbaF6UlNv!k0}NWu0R-qnZ@lrwfvgb;1OTcvLDDaw&AO2 zbN~JK>m)wK`w_8h*|H^%Hrz~t8Vs=QI!OG%oH9_0APDrulN3><7Hz5zE@l!V*v0(( z{8PJk?`}fL@`V}#O${Q(VzAx>N+gPZ;DHB*vDry54^h&(fB*iY6g-^NoC>?^uDcRP zjT)unNQ^>-#9v2REYxVx(N|11(?ikG^Im-M#RE_)I@vd|ℜ1r5i{-0$U=)+!&zI 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 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/skin.ini b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/skin.ini deleted file mode 100644 index 06dfa6b7be..0000000000 --- a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/skin.ini +++ /dev/null @@ -1,6 +0,0 @@ -[General] -// no version specified means v1 - -[Fonts] -HitCircleOverlap: 3 -ScoreOverlap: 3 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/sliderpoint10.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/sliderpoint10.png deleted file mode 100644 index 3e2fe66a1c0a91e6f21d9bf670d4515ef8cdb3b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2349 zcmV+|3DWk7P)g)FE8#1J<#gUh1g=F2t{7eib~wk2-9Orvft z+cHgNGMCLPV+#@x6_7G{*?>|SZ7F@T?}gsBwzu~__qq3ZIcI-7=ehT3fw+Hml3(ua z?K!{m{k?sE=Nunb4?hr4;#cAh0oY1}lIsoMHFWs^=~?@~=)pJV?;sEY@_>9G7syc? z2*3o=KvGExu++xx2zd15Dv7Ay0&1?M^rQe?eVPjNRU@s8Uj@00)(V6c7U@ zfid6bwWBro)hWFmy|1%?< z4%xOHkW%^p0)c=%I5ar?`X684-*l$wKMI(wlm>x$KpAiYuyE6@n{K{m^F3?UuU@~T zqO77=3hDFtd{Rqlsg|~u{&)Ak+kCp^bO$g5i~>;wHa!=p8}>Y439$X|zukMx>a?ZV zW?e1qmK-@YIs-fj+yTs2##I4d1@7B;>!ufv{N?B+tH+jBr!B3HYv{RXN$Zj&PyOxG zK<)h67l56>TBRrK1sCvyIs%l|FR8D8_1RayAFu<#OqO`Xf|N#Kp$zu9h1o8i8(J__>-D9SG;5{}^WIW;DwMAvju>2ySSzd(h# z?xo!?J^butm;*q>7s>h4 zbMHK~=E2nyLt{fpm9J^_DFYsmIY2lsoEQA((SHo@YuYz?;FANXwaafQsVuDuAe=1G zk{Tn?5$mUa_{oQ=fJ~t58+U*6>%ZRf#&<|bq{=8MB%{$$&b6P@o_O)`L&uwsw|#i} z!@h7Z9ND;fW0~LQ&k#~57z)(hSbM|XkN0+}ymWI@_&gxPsuC9fD}b9TODY?NKN{X9 z4VhuG=v0(_|Jpb3^sk}DacX@t0}O?whh~=U4Q_3T1VG)nl3bTDNX|@eBjOpHb~tu z#vP_*l1wIf@5Fm8ie83+aiAPnh(t&!XVJG`__?X(rfLN+ABVSRf%MW*7|3tDsd2tY z2?suqNF+Ghe)dXqDjHP=`D&_as%pw>N`x+EH8)Mu=o{{fcMf(AsN9_Z;;PVW1dj0@ zkiry%{GqT)iCo1#SAh(wiYtT;k1g5?Xt+c+<7_JWTFJlciXb(_WW5O-3p%vlx<$Kd6h6kHq?fWp42(;?*nbB z@^qkJ_2ShFy(!@iBW=*q-7=`aX@H^j2mz70s=7jtuP21IT-L~jgVJ-qn8&@>e zqLT@=uIV&)HjhPP(J|%8Bv6Ll znOuJ^3Rn>iHx>hnp4#!$osnQ9C=%IJvW3m~)Ht8Cf6|3RRa2flGM>zYddIpQw@4$~ zWsJ0ep3*tmcC=l2(Jh)J5F4Br95~i`tlKiIS)M5l7qj!WovVO_z;a;a{L=Zi?7Dl` zT9FV))0rnsL3Aog|5(5N%E4C-;T)zXJ;f&7J4{H0y6pC4jZ392z>;7|l1YvJD}C|K z%bkM?pj$L41^V(!`(He$>q*N@8<}-se~8^%cCV}~th^a$ShZ-?=0nfF|4_t^1ZBd} zFHJ#oYK*=spIa{b8 zLIJ*fuD|*G?>_$hu^)cz2U{Yc2;pEDeDIa3rFj>A*|NQ7rblb2YbcbuL`*weXxb(d zi3$2A`mN^<{(RrL{&VMmL9TH+cR~7rz{8s!UMUTUNQq3Y=qa6(-6vXA2;5F1R47t7 z{kZ3~!>{cfk44i@YF*ON)M7432^bB<4fS1}T}CEzX?rR4$w9w_(8l z&Y3?OA9WnQxa+oETQ)4(u)J(uX`bKb$M5qaq`QUOVqlS~#-IW;jdOGxQp#L{c1g~?dK4-h3vli|Wh<&yR96>QR|qKr z0P$2@J3DyRZIx5X@Te-5scSeP1Jc_LD{*dn1q!^STt7wj>giV9Ts>jM5XCs>!4d`B zy~;xNzO5-h(_{}Hv+gx>m7|onj{>>syZaz8_aZ;{F~B>#j{@!;C`7jX3fxYW)#vtV z`+9nPbH2Nj@e?d000VQNkl?W96~}+~O-Wwz2qX-dfW$zUi3SL!Do~?>45G*fsEW%{v4v%8OD)z#D?(kXIJCA3 z+T|BV5D`m77DXi%uvLO6ggJnO41~x?#5CbAW z81Sp7uHM;{9v6@Xq^PGuy_0Hg6bJ!9rAxmW5XV)1O9QfiTwoB8sTQ;U0OLbI574Hh zTN#3KiU$~=BooL;&@Ghle)U}!(5du=m410G0G9VNfnl5fwt2;k<8HcH*P~9uFs@}h z05+RVIP8v?Q*%YzTiZ|n=)sD$$|y^37LW(z-8%W!af|O+TwYRCl0P_maHf<}(=<)C zw6%C^&(~hu^zr8E|9$)4<3Iz@1hgw)(L@k^DP#xw0mFgPmIJM?WM^b~q`02x31QGB z7cSQE#Pd(A-??w+7eJ$;L4Tld!K?+-*ZgYD!m-8Ua!j^MlJsk!schT+`SxQg|NPsn z7cSP-0B3;~6^-b%BH#it9)Ixh^6d01j||H`LA(0UV>)#g>v(_n`v-UK+u4Z8Yqz3H z(Q_-GTeRxYRkP7S`UMCugn=*M!w?2(DQTp-QnA@=puzmx=8rEeE-k2BTKQW2rFxBc zj#vfaG5}Upa4wp;c&Z3Xd_G@th-`LTP8W8Y9Zib|P)bQ#M;j;4o%F8#$J#0&pce4} z1#iFb&d(RmUR)u9(lh}GgaS0TH*==pOk_{>o|dvvWu7^=%^8s4&cJRn89RJ%VgFAz zeD;gc_mA>n=2w7tk&t}>NX6NRTXTCp*|Ve37xK9bAskXln-Ib=z|-F`x^PU&$e|-O znGl*TUl;XF4Y3#Ae(_V_qT*}}81&>%pPaYou0<6hAbO2Agu$iOOKkto_U5NI{{C}i zT>5LPUZ1gK&XRnaJziOha*F!@edQ|)fBDkm9Y6=*Q#3OA=72+aEC(nA@_~UWFS3A~ z?9A*Ns^6*}S1_=^W)-%G9^pds1z!K>>xVaN+wc)^3bO*G73LRCI{e|`Ke}yhr;Nk_ zcX&HETzfb&`!}=S2F@#^`cE7&anixJ4&G}LBu?zcmd04|!s0&x)xdG!5)ifZ0U%Up zI)Qqi7C502=px|X@#>Dkf}8@I)Fm=zN=Ii02TvUIZrHY=T6w-pc|Y@+$DWy+W=nI5 zpy-`1bU{~F7ax4~!4cpBa0WOHoU1uoa|Y<0D`OI=OVVBGj-_*#PEn5ZU{*EFaRmTT z;+fu!SyID5=FV4lR+Nn_^N64z(LLK5l~Z!D21I0MDVXGU!GEV(;YWR zpF~DL#^RFdOk>yje^0o*?DpXb@Bkot-mUW{rrF(25t2#sgMko-P9ADj`a2VN9RWn* zTuVeuqDOT*W|d4)biX11E13=DQ89J&)QpEJ9=xxosT+T{AE6r%lW~bkGMwr5El+Qm zIdk&NNh*JaPQP*bIHD4CnKVBX4080`(MA>NZp_Leu=*pBJik{&Z;xgPR|Aj;L_cuq zz@>o;2R^#=rKMZ;*X-}``~Af97}Ah&(Isw|+p%uRy4jc;VQ#7;wZGJ5@;pNljYj$M z_?PFD*8_@n8sI7)Q=Vf{=rR#f_Ob1<2xyr5fJ<>WRe=lv&7U0jq-w#s1#j-E-qjci zg)nsEvSb@NU})w8Gai@(3@*tp8JP4wCW%I(7*T^$4X0X_-jMRX3vgGAtr*_-8|ynw zXcjB1o=7GFuqh?!KsIL2QUDBAobv+T1E(H&`H`(B>P~bU(aQlCQG=pEMMHpex83a$ zVUaXPkLc7j*ZCFSqssd>m6-j?N0%2TRya$7!5}9aPPP#5PK`tgS;l)XJJ6B91fUF< z2o$O84`Mb}^_%u?s{I4V&TLB8BP8s z91ar-hp4Kls#P}hcBWPtwPW@yLxAGdOIF`It9;h9R7Xm>h9-}mJ$mlhch-J|hzdF5kgJvVD( zLq|g+kWpD$IRu-QWSo=|pWjbyQ*ATQx%cS4b5G3t^>`5z*i^dNaggK5ajS?9P!zQT zg{yzEdZyGtM&iatViCH%J#5;)=_|}~YgMgSVh%U~&xpJcBbU!yzR>74FuDvxK$zke z3~>+1dTQQN3xUx<(cGzX$I4i8s5`tJw0qn2ZPnYp0h+6hRUJE4cdX5b8AdA{3w3?dztwqnVALZLGpP12h128+UKqV?+(~ zsNOr*?Qrw_qUS4sF~H;*r8Dk)_jm8!EBpehtU;a>D zW?q)l?o0w<2m{^F2}Xm2^)NL}H5b2Y`0nhcgPZm%<&8=%VeYaT=23DuFk*b(_(=~} zJUp{BzjT<}<#yUMn`yihM2#ptp`O^0rX!7eYxf?hI$d=Lv(al(&sJr8FMSdLI8;^0 z1B!v-#gi9LFX&$|%rIgOiPSVSscD*M@wN6edz(AVJP<;}Zc`rPPCYjgqS((vNsM zp%LGF!m1MZl(Cjr$3Cm2mc&~Vt88YgXNJ;kCw|to?vlJJS-pz$R^7ksdO_>+w^Pw6 zLxIUqi`&(Ep%g{cV%Dx0Qr?LvkXO0}a1g)9vc$R%vbtYOuO*gFaTT3cyqUA9#hgm4 zTQf+$GBgrAEv~glpY^PU(UIU7OSd5TN>W}=r*@rpiT9yeg0jTt54?1_=K5FC{e#B; Y0Sy+ultD$RxBvhE07*qoM6N<$g5gp;DgXcg diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-approachcircle.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-approachcircle.png deleted file mode 100644 index 3811e5050f4cc0404a5713b1b875ab33ac32243a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26350 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 S&tJL__^tB%W98pWj^KYrw90@0 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-background.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-background.png deleted file mode 100644 index d84eab2f15eb844ef0c37f3a0fbda07f7f4b4d16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46103 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

Gk~*^-q;;x5EnoHUef!Db4# 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�r4vqggU&a{!Z;_c?}k>Xn?pcZ1606Q~R$ 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%0Adh;ycK}XpES)0?nv?hw6qc!^ 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 LNVHN!-~ayrzhB6! diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-clear.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-clear.png deleted file mode 100644 index c66f1c9309cce5f54b6345d84a5bb4efbec30a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39074 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%0Dwjh0N}037W8g|D4}N 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 kWRgiHc{?~s(fh($ diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-rpm.png b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinner-rpm.png deleted file mode 100644 index 73753554f74fab988c7e5d8c7722d22928120682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10583 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

SjXN<|hNt%y;m$|%aMvI6 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 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinnerbonus.wav b/osu.Game.Rulesets.Osu.Tests/Resources/old-skin/spinnerbonus.wav deleted file mode 100644 index 5e583e77aa7441b968e4ebc8de47da1033206c29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309536 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

}JOkaT^af>To^nKaittEF$R(n9ODq-t4bDj? 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

942hnQeXd_w3}~ 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 { if (!initialPositions.TryGetValue(ho, out var initialPosition)) diff --git a/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs b/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs index ae8ad2c01b..e2cde1a325 100644 --- a/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs +++ b/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs @@ -157,6 +157,10 @@ namespace osu.Game.Rulesets.Osu.Edit rotationInfo.BindValueChanged(rotation => { + // can happen if the popover is dismissed by a keyboard key press while dragging UI controls + if (!rotationHandler.OperationInProgress.Value) + return; + rotationHandler.Update(rotation.NewValue.Degrees, getOriginPosition(rotation.NewValue)); }); } diff --git a/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs b/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs index ac6d9fbb19..ca4a99b9cd 100644 --- a/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs +++ b/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs @@ -220,6 +220,10 @@ namespace osu.Game.Rulesets.Osu.Edit scaleInfo.BindValueChanged(scale => { + // can happen if the popover is dismissed by a keyboard key press while dragging UI controls + if (!scaleHandler.OperationInProgress.Value) + return; + var newScale = new Vector2(scale.NewValue.Scale, scale.NewValue.Scale); scaleHandler.Update(newScale, getOriginPosition(scale.NewValue), getAdjustAxis(scale.NewValue), getRotation(scale.NewValue)); }); diff --git a/osu.Game.Rulesets.Taiko.Tests/Mods/TestSceneTaikoModHidden.cs b/osu.Game.Rulesets.Taiko.Tests/Mods/TestSceneTaikoModHidden.cs index e6d5c51902..5336ea604e 100644 --- a/osu.Game.Rulesets.Taiko.Tests/Mods/TestSceneTaikoModHidden.cs +++ b/osu.Game.Rulesets.Taiko.Tests/Mods/TestSceneTaikoModHidden.cs @@ -5,10 +5,13 @@ using System; using System.Collections.Generic; using System.Linq; using NUnit.Framework; +using osu.Framework.Testing; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; +using osu.Game.Configuration; using osu.Game.Rulesets.Taiko.Mods; using osu.Game.Rulesets.Taiko.Objects; +using osu.Game.Rulesets.Taiko.Objects.Drawables; namespace osu.Game.Rulesets.Taiko.Tests.Mods { @@ -69,5 +72,106 @@ namespace osu.Game.Rulesets.Taiko.Tests.Mods }, }); } + + [Test] + public void TestIncreasedVisibilityOnFirstObject() + { + bool firstHitNeverFadedOut = true; + AddStep("enable increased visibility", () => LocalConfig.SetValue(OsuSetting.IncreaseFirstObjectVisibility, true)); + CreateModTest(new ModTestData + { + Mod = new TaikoModHidden(), + Autoplay = true, + PassCondition = () => + { + var firstHit = this.ChildrenOfType().FirstOrDefault(h => h.HitObject.StartTime == 100); + + if (firstHit?.Alpha < 1 && !firstHit.IsHit) + firstHitNeverFadedOut = false; + + return firstHitNeverFadedOut && checkAllMaxResultJudgements(2).Invoke(); + }, + CreateBeatmap = () => + { + var beatmap = new Beatmap + { + HitObjects = new List + { + new Hit + { + Type = HitType.Rim, + StartTime = 100, + }, + new Hit + { + Type = HitType.Centre, + StartTime = 200, + }, + }, + BeatmapInfo = + { + Difficulty = new BeatmapDifficulty + { + SliderTickRate = 4, + OverallDifficulty = 0, + }, + Ruleset = new TaikoRuleset().RulesetInfo + }, + }; + + beatmap.ControlPointInfo.Add(0, new EffectControlPoint { ScrollSpeed = 0.1f }); + return beatmap; + }, + }); + } + + [Test] + public void TestNoIncreasedVisibilityOnFirstObject() + { + bool firstHitFadedOut = true; + AddStep("enable increased visibility", () => LocalConfig.SetValue(OsuSetting.IncreaseFirstObjectVisibility, false)); + CreateModTest(new ModTestData + { + Mod = new TaikoModHidden(), + Autoplay = true, + PassCondition = () => + { + var firstHit = this.ChildrenOfType().FirstOrDefault(h => h.HitObject.StartTime == 100); + firstHitFadedOut |= firstHit?.IsHit == false && firstHit.Alpha < 1; + return firstHitFadedOut && checkAllMaxResultJudgements(2).Invoke(); + }, + CreateBeatmap = () => + { + var beatmap = new Beatmap + { + HitObjects = new List + { + new Hit + { + Type = HitType.Rim, + StartTime = 100, + }, + new Hit + { + Type = HitType.Centre, + StartTime = 200, + }, + }, + BeatmapInfo = + { + Difficulty = new BeatmapDifficulty + { + SliderTickRate = 4, + OverallDifficulty = 0, + }, + Ruleset = new TaikoRuleset().RulesetInfo + }, + }; + + beatmap.ControlPointInfo.Add(0, new EffectControlPoint { ScrollSpeed = 0.1f }); + return beatmap; + }, + }); + } } } diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/approachcircle.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/approachcircle.png deleted file mode 100755 index 5aba6887564782a216c030b6a0143830612193ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10333 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 H<7ECnYE>!V diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/skin.ini b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/skin.ini deleted file mode 100644 index 462c2c278e..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/skin.ini +++ /dev/null @@ -1,5 +0,0 @@ -[General] -Name: an old skin -Author: an old guy - -// no version specified means v1 \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-bar-left.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-bar-left.png deleted file mode 100644 index ad55fd5a96f702c4a6cda17692d78723b2e8c487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17758 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 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-drum-inner.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-drum-inner.png deleted file mode 100644 index f5c02509fb63c4f5d68a81f626b9ae07fd22e800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4661 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 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-drum-outer.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-drum-outer.png deleted file mode 100644 index 53905792cb2e40cc5e799a146c1ccfbcffcfa369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5585 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 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-slider-fail@2x.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-slider-fail@2x.png deleted file mode 100644 index 2d9974a701fa4cbb8fa5fed9174260611d312751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102010 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 z 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 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-slider@2x.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-slider@2x.png deleted file mode 100644 index 07b2f167e05f2ece819d34d2a98fe091fdfccd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96449 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

  • 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 Q5P%;=IaS#TX|vG(1MkGfH~;_u diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikobigcircle.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikobigcircle.png deleted file mode 100644 index 63504dd52db36e9da6b3b40a08a9d3ec6e1e34f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3079 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 JRBqrF^Iu$8TZ{kz diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikohitcircleoverlay-0.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taikohitcircleoverlay-0.png deleted file mode 100644 index 272c6bcaf75c18a985b971284b11162a13a2cca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20284 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 pu7$$YDiL. 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.Game.Audio; +using osu.Game.Rulesets.Osu; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Tests.Beatmaps; + +namespace osu.Game.Tests.Audio +{ + [TestFixture] + public class HitsoundPreviewAnalyzerTest + { + private HitsoundPreviewAnalyzer analyzer = null!; + + [SetUp] + public void SetUp() + { + analyzer = new HitsoundPreviewAnalyzer(); + } + + [Test] + public void TestShouldPreviewHitsoundsWithLowCount() + { + var beatmap = createTestBeatmap(10); // 10 hitsounds + Assert.That(analyzer.ShouldPreviewHitsounds(beatmap), Is.False); + } + + [Test] + public void TestShouldPreviewHitsoundsWithHighCount() + { + var beatmap = createTestBeatmap(25); // 25 hitsounds + Assert.That(analyzer.ShouldPreviewHitsounds(beatmap), Is.True); + } + + [Test] + public void TestShouldPreviewHitsoundsWithExactThreshold() + { + var beatmap = createTestBeatmap(20); // Exactly 20 hitsounds + Assert.That(analyzer.ShouldPreviewHitsounds(beatmap), Is.False); + } + + [Test] + public void TestCountHitsounds() + { + var beatmap = createTestBeatmap(15); + Assert.That(analyzer.CountHitsounds(beatmap), Is.EqualTo(15)); + } + + [Test] + public void TestGetHitsoundPreviewPoints() + { + var beatmap = createTestBeatmap(5); + var points = analyzer.GetHitsoundPreviewPoints(beatmap, 1000, 5000); + + Assert.That(points.Count, Is.EqualTo(5)); + Assert.That(points.All(p => p.Time >= 1000 && p.Time <= 5000), Is.True); + } + + [Test] + public void TestEmptyBeatmap() + { + var beatmap = new TestBeatmap(new OsuRuleset().RulesetInfo); + Assert.That(analyzer.ShouldPreviewHitsounds(beatmap), Is.False); + Assert.That(analyzer.CountHitsounds(beatmap), Is.EqualTo(0)); + } + + private TestBeatmap createTestBeatmap(int hitsoundCount) + { + var beatmap = new TestBeatmap(new OsuRuleset().RulesetInfo); + + for (int i = 0; i < hitsoundCount; i++) + { + var hitObject = new HitCircle + { + StartTime = 1000 + i * 100, + Samples = { new HitSampleInfo(HitSampleInfo.HIT_WHISTLE) } + }; + beatmap.HitObjects.Add(hitObject); + } + + return beatmap; + } + } +} diff --git a/osu.Game.Tests/Database/BeatmapImporterTests.cs b/osu.Game.Tests/Database/BeatmapImporterTests.cs index 38746f2567..f3ca665380 100644 --- a/osu.Game.Tests/Database/BeatmapImporterTests.cs +++ b/osu.Game.Tests/Database/BeatmapImporterTests.cs @@ -1018,6 +1018,49 @@ namespace osu.Game.Tests.Database }); } + [Test] + public void TestBeatmapFilesInNestedDirectoriesAreIgnored() + { + RunTestWithRealmAsync(async (realm, storage) => + { + var importer = new BeatmapImporter(storage, realm); + using var store = new RealmRulesetStore(realm, storage); + + string? temp = TestResources.GetTestBeatmapForImport(); + + string extractedFolder = $"{temp}_extracted"; + Directory.CreateDirectory(extractedFolder); + + try + { + using (var zip = ZipArchive.Open(temp)) + zip.WriteToDirectory(extractedFolder); + + var subdirectory = Directory.CreateDirectory(Path.Combine(extractedFolder, "subdir")); + string modifiedCopyPath = Path.Combine(subdirectory.FullName, "duplicate.osu"); + File.Copy(Directory.GetFiles(extractedFolder, "*.osu").First(), modifiedCopyPath); + + using (var stream = File.OpenWrite(modifiedCopyPath)) + using (var textWriter = new StreamWriter(stream)) + await textWriter.WriteLineAsync("# adding a comment so that the hashes are different"); + + using (var zip = ZipArchive.Create()) + { + zip.AddAllFromDirectory(extractedFolder); + zip.SaveTo(temp, new ZipWriterOptions(CompressionType.Deflate)); + } + + await importer.Import(temp); + + EnsureLoaded(realm.Realm); + } + finally + { + Directory.Delete(extractedFolder, true); + } + }); + } + [Test] public void TestImportNestedStructure() { diff --git a/osu.Game.Tests/NonVisual/Filtering/FilterQueryParserTest.cs b/osu.Game.Tests/NonVisual/Filtering/FilterQueryParserTest.cs index 9968647cb2..8bef6b04a7 100644 --- a/osu.Game.Tests/NonVisual/Filtering/FilterQueryParserTest.cs +++ b/osu.Game.Tests/NonVisual/Filtering/FilterQueryParserTest.cs @@ -178,6 +178,16 @@ namespace osu.Game.Tests.NonVisual.Filtering [Test] public void TestApplyBPMQueries() + { + const string query = "bpm=200"; + var filterCriteria = new FilterCriteria(); + FilterQueryParser.ApplyQueries(filterCriteria, query); + Assert.AreEqual(filterCriteria.BPM.Min, 199.5d); + Assert.AreEqual(filterCriteria.BPM.Max, 200.5d); + } + + [Test] + public void TestApplyBPMRangeQueries() { const string query = "bpm>:200 gotta go fast"; var filterCriteria = new FilterCriteria(); @@ -185,8 +195,7 @@ namespace osu.Game.Tests.NonVisual.Filtering Assert.AreEqual("gotta go fast", filterCriteria.SearchText.Trim()); Assert.AreEqual(3, filterCriteria.SearchTerms.Length); Assert.IsNotNull(filterCriteria.BPM.Min); - Assert.Greater(filterCriteria.BPM.Min, 199.99d); - Assert.Less(filterCriteria.BPM.Min, 200.00d); + Assert.AreEqual(filterCriteria.BPM.Min, 199.5d); Assert.IsNull(filterCriteria.BPM.Max); } diff --git a/osu.Game.Tests/Online/Matchmaking/MatchmakingRoomStateTest.cs b/osu.Game.Tests/Online/Matchmaking/MatchmakingRoomStateTest.cs new file mode 100644 index 0000000000..c9219c871a --- /dev/null +++ b/osu.Game.Tests/Online/Matchmaking/MatchmakingRoomStateTest.cs @@ -0,0 +1,153 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; + +namespace osu.Game.Tests.Online.Matchmaking +{ + public class MatchmakingRoomStateTest + { + /// + /// The number of points awarded for each placement position (index 0 = #1, index 7 = #8). + /// + private static readonly int[] placement_points = [8, 7, 6, 5, 4, 3, 2, 1]; + + [Test] + public void Basic() + { + var state = new MatchmakingRoomState(); + + // 1 -> 3 -> 2 + + state.AdvanceRound(); + state.RecordScores( + [ + new SoloScoreInfo { UserID = 2, TotalScore = 500 }, + new SoloScoreInfo { UserID = 1, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 3, TotalScore = 750 }, + ], placement_points); + + Assert.AreEqual(8, state.Users[1].Points); + Assert.AreEqual(1, state.Users[1].Placement); + Assert.AreEqual(1, state.Users[1].Rounds[1].Placement); + + Assert.AreEqual(6, state.Users[2].Points); + Assert.AreEqual(3, state.Users[2].Placement); + Assert.AreEqual(3, state.Users[2].Rounds[1].Placement); + + Assert.AreEqual(7, state.Users[3].Points); + Assert.AreEqual(2, state.Users[3].Placement); + Assert.AreEqual(2, state.Users[3].Rounds[1].Placement); + + // 2 -> 1 -> 3 + + state.AdvanceRound(); + state.RecordScores( + [ + new SoloScoreInfo { UserID = 2, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 1, TotalScore = 750 }, + new SoloScoreInfo { UserID = 3, TotalScore = 500 }, + ], placement_points); + + Assert.AreEqual(15, state.Users[1].Points); + Assert.AreEqual(1, state.Users[1].Placement); + Assert.AreEqual(2, state.Users[1].Rounds[2].Placement); + + Assert.AreEqual(14, state.Users[2].Points); + Assert.AreEqual(2, state.Users[2].Placement); + Assert.AreEqual(1, state.Users[2].Rounds[2].Placement); + + Assert.AreEqual(13, state.Users[3].Points); + Assert.AreEqual(3, state.Users[3].Placement); + Assert.AreEqual(3, state.Users[3].Rounds[2].Placement); + } + + [Test] + public void MatchingScores() + { + var state = new MatchmakingRoomState(); + + // 1 + 2 -> 3 + 4 + + state.AdvanceRound(); + state.RecordScores( + [ + new SoloScoreInfo { UserID = 1, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 2, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 3, TotalScore = 500 }, + new SoloScoreInfo { UserID = 4, TotalScore = 500 }, + ], placement_points); + + Assert.AreEqual(7, state.Users[1].Points); + Assert.AreEqual(1, state.Users[1].Placement); + Assert.AreEqual(2, state.Users[1].Rounds[1].Placement); + + Assert.AreEqual(7, state.Users[2].Points); + Assert.AreEqual(2, state.Users[2].Placement); + Assert.AreEqual(2, state.Users[2].Rounds[1].Placement); + + Assert.AreEqual(5, state.Users[3].Points); + Assert.AreEqual(3, state.Users[3].Placement); + Assert.AreEqual(4, state.Users[3].Rounds[1].Placement); + + Assert.AreEqual(5, state.Users[4].Points); + Assert.AreEqual(4, state.Users[4].Placement); + Assert.AreEqual(4, state.Users[4].Rounds[1].Placement); + } + + [Test] + public void RoundTieBreaker() + { + var state = new MatchmakingRoomState(); + + // 1 -> 2 + + state.AdvanceRound(); + state.RecordScores( + [ + new SoloScoreInfo { UserID = 1, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 2, TotalScore = 500 }, + ], placement_points); + + // 2 -> 1 + + state.AdvanceRound(); + state.RecordScores( + [ + new SoloScoreInfo { UserID = 1, TotalScore = 500 }, + new SoloScoreInfo { UserID = 2, TotalScore = 1000 }, + ], placement_points); + + Assert.AreEqual(1, state.Users[1].Placement); + Assert.AreEqual(2, state.Users[2].Placement); + } + + [Test] + public void UserIdTieBreaker() + { + var state = new MatchmakingRoomState(); + + // 1 + 2 + 3 + 4 + 5 + 6 + + state.AdvanceRound(); + state.RecordScores( + [ + new SoloScoreInfo { UserID = 4, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 6, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 2, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 3, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 1, TotalScore = 1000 }, + new SoloScoreInfo { UserID = 5, TotalScore = 1000 }, + ], placement_points); + + Assert.AreEqual(1, state.Users[1].Placement); + Assert.AreEqual(2, state.Users[2].Placement); + Assert.AreEqual(3, state.Users[3].Placement); + Assert.AreEqual(4, state.Users[4].Placement); + Assert.AreEqual(5, state.Users[5].Placement); + Assert.AreEqual(6, state.Users[6].Placement); + } + } +} diff --git a/osu.Game.Tests/Resources/Archives/modified-argon-20250308.osk b/osu.Game.Tests/Resources/Archives/modified-argon-20250308.osk new file mode 100644 index 0000000000000000000000000000000000000000..cbaacd3f4b3cb99ece8079983114a10c91bbde3e GIT binary patch literal 1716 zcmWIWW@Zs#U|`^2klv9I<$bDo-f|%CC|HDnp*TA;PcJhsQ?+L!*C7W1*5A#)+tXKZ zB$@P1ICtutSMHIduVz&h+qI{2AI#tUVe%hV~`v(lcJ5|xs8W^a=!h=88g3bXFtDhWt(y7;tFIj=T zO;6eT12o%3W-ZefHT5j+P|DuOUOhWi{O!8Q7c}ngO=jk7a~0(^yuif1=H|`i^|St; zDf<5_bY;jt#-PB1r}Mr2REyM&b9@wQ7_RI_cRc^Pk? za#FpWUQOpwUd>{ttL%;ATHo`VX1(_Qj^lPQ`EdIwyb>M6TC`!7B)?m2hF^n>#}gRpgHeC~^Oz51w^7S_sJp0V=UWyj)YfxGVRO0}1i zPiz0JXEKv#`uiw5UJmBRI(>zGOM_!B1RQ_yQ1;B(0w$9#(`_bqYYq$YCn;`RXqx?3 zEz{-ap06>DR?Er-?8;sVFH_hqd|}on58a%$Ptp@^g&PV4yMIw|WQh6Qn4shtdn#Y5 zx9sJQ*i8A?!&;F5^n~CG!5_4|Qc?7af>>;6qK`f$%TldsN)6PbrRB za#gH(;R6ZQsbBr>>`gZ~@SKU$i0Mf#tHah`LUntlemS%8`ceKYR`!?PLYG`p*$u=S z#lF6=_${(L-Q975hfq(~^ewA)AKjQy>Up~RdRfM-X(yAIrtZzNm+|(ua!XuO>iDfy zMnKLXJfJ5bnmP9J#;6~bE7ni6xos6OhokpDZ>4KNsngeL&DK9$Cj_;WCR(0eR$Azu z92v(L?;ugH7SX%Bv-`XTd;D>e9nTg79l!NQ?f9b?%Xi-34c+2?bH;(A52guP2$)+e z_1`c>MNr~z(AlXE_&fHvm4;PKnY(>*`6-XOtUHJIq|I1;RI@nO|1(>LT>NwnxzeQ_ zDssn{{akDHTJ^@ZsCwoNo3kdqp0#-6ZnHY$OG=(?ABzM`WoLXe7Cm@uPqA^UpPOQk ziKl7z{=$`2$E+V@E#5eLXXAB)^x3`X7k(_-t|G}ef0<%cvCIy?%d0HcWhW@=+TWS> z_FZMg%3b9;%buL8zmm21wnNLy!gI2*^An#7Oc(UIf5*scJrOe}u$^Yxxm(60H|IhvOv&)K`e6~!8U!nEsQw67!-`X_O%iJ^0vL8shn{_Sc z_PTsYpW2D7Yj$q2V-rfcWIs7uI4rgQ@#ljyYVLk=Yhr^bFjw0FF&_{I zNIt=r%S4yEq%)Dy4tbH;o+Z0K??d- zVn^0KeY%PjSbQ)ti7?Ph!@K|h literal 0 HcmV?d00001 diff --git a/osu.Game.Tests/Resources/old-skin/score-0.png b/osu.Game.Tests/Resources/old-skin/score-0.png deleted file mode 100644 index 8304617d8c94a8400b50a90f364941bb02983065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3092 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 Y0OO;-v8NaCZ2$lO07*qoM6N<$f&jDokN^Mx diff --git a/osu.Game.Tests/Resources/old-skin/score-3.png b/osu.Game.Tests/Resources/old-skin/score-3.png deleted file mode 100644 index 82bec3babebd59263dc486e5900a3a01ea4aaed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3712 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 JPDHLkV1kmK?iT<6 diff --git a/osu.Game.Tests/Resources/old-skin/score-6.png b/osu.Game.Tests/Resources/old-skin/score-6.png deleted file mode 100644 index b4cf81f26e5cab5a068ce282ee22b15b92d0df12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3337 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 TZ*tsI00000NkvXXu0mjfuoP_o diff --git a/osu.Game.Tests/Resources/old-skin/score-7.png b/osu.Game.Tests/Resources/old-skin/score-7.png deleted file mode 100644 index a23f5379b223d61079e055162fdd93f107f0ec02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 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 diff --git a/osu.Game.Tests/Resources/old-skin/score-comma.png b/osu.Game.Tests/Resources/old-skin/score-comma.png deleted file mode 100644 index f68d32957ff8dc2e6e26e2b739eab85385548faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP) z8ION{U-N9C`MxinYv|$`M+}Q$F)W6~uoxD@Vpt6OzhDOaIXgR>o2*u=8V;)D@TF?C z+T17S{{H?ym;%w+TADXmhT?$-O-NWvN0;UR_GXqT)+8VcT7_OfX+F1jnFIZS?x8!# zh8}URz_+nygyLs1rfHeIXpZ(*xcNFpGu`( zwcG8nVHo$9mzUrA{eGSAow*&jOrP%XnP4jnsY0KQkB@6tS64o6^aq1MaO`wCezV#1 zPfkt<_8IyJm7o-H)Y71MrP!@^ySuwPg+f7WY;1^ZHX9uC`MfBVO5*6~=mXZgWiM7_ zg2J#BUQj3&i!V*nT&N{Y(}Zo?M9#738`=bqh+giU0>f>loV9|82+ zaU80#CVuw0IXW_vYCm)NDP(>JPj7d--Su=j9k?q&C<*&31~y-*}fwjTm!p*P&Jvpnyz z)m?^=o3|X6i423GymcH7s?X++lz!!LDcrGp4_y83T(4ux)LkG8*W#nj518@;Wz|pB rcm*5_XP0^3eKYf&7eE$5NN3S}(it^R$P@B}JRwiW6Y_*SAy4SP5!!0C zTE9FJKtC>>NlHB>x7U?fC3eMrUE}-6&6|p1Lzp5^Zgp4;-?Tka0Ir& z1rTBaEJ%Zoz;`eQ3$UbTh&3rgX9|7}x(Kd<2wyLO^E@RI`3er0F^e8jrdymkWwHaJ zU>EG6-At#`*8_n7WhgqG&Jb^YGairM;r=~O+gUez%_x%?%@8~chr`cux!mVouO}vx ziI~l1Vmh6Q;czJ0?Y5Q8W=ZG?xDRe~_LPX7{ta*sJS`LoBN8x8Qyg!)u8YB7AXw}% zxJ%jddP>*89q=fXO1TEF6vaC~s48xE{ zqtTROY?u4ELr$I4>-A5|~39QXWMIpY}VCkbsmq$cd@;G3M5vml{BBvrEa%t<@5R1rBdky#=iw0 zIjg12+aCmBcDQpy_7jQ3UL+DBYmj&PwOZ{J`d!cgAHWx$%}VBs{OkvExyH8F_z-XN zhAjBd4tYuwo)#^QA>$xAWkltmAR9EuCtu}5>6DRg%ppIcnq=Aa2%R;=oZ@xF169W7 zDr`CzH^QVBIE8JK`;M1drwJD)wp9Li|3LU5zyS0^RhH-3lmq|(002ovPDHLkV1mea BUy%R+ diff --git a/osu.Game.Tests/Resources/old-skin/score-percent.png b/osu.Game.Tests/Resources/old-skin/score-percent.png deleted file mode 100644 index fc750abc7e80287192efb65633e58b6b19e47125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4904 zcmV+@6W8pCP)>HPEA?bv`x0yR5sa^IhC4IP-&%2W!qCT)6~GN6jP8z zltl$(hYNRk=iGM=@9+a<{p0;+&Rp*D`+dJ>|D1Ea=v3#IPV=h$PLh+zA^z^}r3W$! zGSIW_KsG`4u0GIsjfJ#}={1b#=re=(4i|0#YNprjY=)m@0_q3k3FJZV@v;Kd0W|n>QZAbRG^nNiO?^UR0E#l_jgTq9~z?!8NzghdU+poJL2g+hsf zr%s(3>2NrVMMXvR`T6-ZbeqY?$H!~YqD2vtCQb6+wr$(ljEsy-_`CopALtxOAAjEj zYuGe?=SEiIO=||zdXeGb;n7b$^;GQbx8L61U@)iw0|q>G>#eu0fbXu5AobnyNm!iC z4z)E9C>-cIe}DhP6)RT!WB&a4{vIA4N~hB)tJSLZ?Ahb^^2;xA!^W3iepw$D7N$%l zlbSejV#3_Hb7Ph-U;alyK|vN-05e)gekv`XA88NQ97OAmNJ~pgUb=LtH!!Mj-IkUX zjSNns|XW)x3H0^tau1n;SBX zn?MHf>esKInlWRBY5Vr=6Ysg_p1_kQPX@rpK|sYoRTMCIU1YF7xdbv8mYSNH^vENR z1SBLRC|uKMG%Balsp{(L)P@ZkPK)5?=uYJ3;9;i4!hqsIgHtwc+&E|Y^yx<2I5HzI zWE2-FuvbA>_Bc1})?TD*91RaRCO`cV;31^JRgM9}_V?m^S0O^aH#Y*}zzT%68g zvABfB&uwmQR^WS%l$4au;q4xv<76FG@VTw4nq($@$l0SFeDJ|3@X&S)+U<7L(9obR zT)3dX9M#ydW6_M1o10sk-?_WHtEi|bwPVK)pC5nxal+1>J4ff`miEGX(4U%`nq05AY1g8_2nq&;fsEnr zQ2Y3bpW%0`#RCTps3}vXd=GDT0Uf4*hJnW_qjhJRG*S3QMnje?S(4!E>)VDwyc!!D zReE|lGMG=%(|Yvi(Sbkw@IxZ_uK~=i)i+zSJD4+W8cANrELsIJhMFoVDN)~j_nrFn z*I(7<&70NW!Gm4DBQ0Vo$^*JUDGBp%OII0GBFb^v7<|huw|JS&<~BdV4OLZDsWofX zoQJoVoN_3L1ikalJI!a#oSE?ItFNli(9kx*vDs`cM(}=S3_n8+6&4oS_U+r(yldAk z=P$qff>B+qUcFkOfKk)7lu8+O)|5 zzIY7Y{t0x3g2*6X-n4b=R=?S^XGaeiGNcWYcpoHjmlc3kTPiCnFJFQSHeYt-%9SQs z8pH|t~*}3o*C3~41znaK}Kr%Bk?P!W^q8gaph!G?3&%c4t3bKg) zB0(YZEr4n)vu4e5`7Q>ZnwlEa;sv3_ik@mw1|Aps04W-@riwlVzGD+uw3;xglR`O~ zT@z^B4rI^<9(bgc@+4Y7E_lKK39#2FM#W>fwhU z_C*NCxcKLve{T8x_ur5Al@^tzbaF6UlNv!k0}NWu0R-qnZ@lrwfvgb;1OTcvLDDaw&AO2 zbN~JK>m)wK`w_8h*|H^%Hrz~t8Vs=QI!OG%oH9_0APDrulN3><7Hz5zE@l!V*v0(( z{8PJk?`}fL@`V}#O${Q(VzAx>N+gPZ;DHB*vDry54^h&(fB*iY6g-^NoC>?^uDcRP zjT)unNQ^>-#9v2REYxVx(N|11(?ikG^Im-M#RE_)I@vd|ℜ1r5i{-0$U=)+!&zI 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 diff --git a/osu.Game.Tests/Resources/old-skin/scorebar-bg.png b/osu.Game.Tests/Resources/old-skin/scorebar-bg.png deleted file mode 100644 index 1e94f464ca497c1eb0645586af13f489c28bf6f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7087 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 Hu0mjf)F0A( diff --git a/osu.Game.Tests/Resources/old-skin/scorebar-colour-1.png b/osu.Game.Tests/Resources/old-skin/scorebar-colour-1.png deleted file mode 100644 index 7669474d8bcce7afd6a0bc8c247b2c0ccef46c22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMv3P)p000dL0ssI2y8t*G0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzeMv+?RCwC#+uKfqKoo`HwP^v37s}Mv z^v!%U1!Ihfi4kX}CPfX0X%(^kzi_c2n-*@mIwiGMK`l9bAd|@>+2kxH3;8PBW#@C; z{Cu^Jc@@viL-4zIex{JtVGGC4)cTyOZsjiG@m%+Q=2AMB3N?PF(pxDjRlkO;GHmsW zDi?wks-NXH;lwsq^CWj2U&p`iW6Y~g&f;}G#QE*L)Y`aRc23sGTTLhT%?uwWlgXpm zbdw3dY%FoWz8$vl;lR0=*8l*=7DjA@#JG(ZmZjD|Aj#jH%Dj8Vb z0@~6~q?G|y$p8**XzN)n_m!^o7qL;+0F?}&zc{Cs002ovPDHLkV1lE5)RO=J diff --git a/osu.Game.Tests/Resources/old-skin/scorebar-colour-2.png b/osu.Game.Tests/Resources/old-skin/scorebar-colour-2.png deleted file mode 100644 index 70fdb4b14637abdf6237c4bf883fac33542d91f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJQCP)p000dL0ssI2y8t*G0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzbV)=(RCwC#o83->Fc^m45BKBF0C$_a zGcQd`G{%^iSZSw`Wa%hu62#{T2XC9NWt{Nvv0z?bIH@L+$vN5NEM^PGL-C!9SaTCX zJA5o+j>AyD4&h@JYqruV9Br;{rFG10%`RlWm220Q(nhwE^D0YOyQH0eS6zqTH)`Hg z?PZ&|_Eq&>KJL@JgsgaK_uR=(F&}?t6ZeTU?k78^yG}mNTPLS#&d-y{}3GHw0Ev%NR~I1fq&n1`AM`PHtbK|Bh8k^vBQXJ~o4HM|P2SiJ60GQj*AXdAu| zD+ACa1Hh$*wnV#}lCGsiY{(h_B?CZOoVk+hwQ{%8GWND>UJwAFWPn9@I%QDH(4Zwu zpDAwy41kgW;6n9f343z8qHO?_4DbgPo7n{Gh`%H^(FVYC}$xlkqqJN(O*oGR(I!04(ILP<;w80AoP?p8+Di_5c6?07*qo IM6N<$f~e2NAOHXW diff --git a/osu.Game.Tests/Resources/old-skin/scorebar-colour-3.png b/osu.Game.Tests/Resources/old-skin/scorebar-colour-3.png deleted file mode 100644 index 18ac6976c95a162914d6cdd371abf71aca48c72a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 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 JPDHLkV1iG9rlSA= diff --git a/osu.Game.Tests/Resources/old-skin/scorebar-kidanger.png b/osu.Game.Tests/Resources/old-skin/scorebar-kidanger.png deleted file mode 100644 index ac5a2c5893b635520d3f8e3804ff87101664d591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7361 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 diff --git a/osu.Game.Tests/Resources/old-skin/scorebar-kidanger2.png b/osu.Game.Tests/Resources/old-skin/scorebar-kidanger2.png deleted file mode 100644 index 507be0463f0732a07aa7df87cd57c1f273c7d55b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9360 zcmV;BByZb^P)1RCwC#oeOjv<#osJ%s!;mTb3+a zwu~g>w~;N|*zuD`NK0r#0wpCRv|tBtaY9Q72`MitezYMWP2tefb8?!VlJ>OCfwm;1 zXY++w6sFs~({DJza=Rb(P^B>f(|#?DhqW2r=|crW}r%A1f~^^oCc(v#!@MbWvXeQsu?VH zR6&)-5KJd%vSlx)ftt!f?I2a#`))0E)Ijx)QJAuW*ukcPsySGoYJAT;mTZ=(rno62 z3rJ}+K=qChnCU>uX#i&es@lZqCQ1i()Is%*L6{zgV^12W*55V@TXg`c*pBTtgVl;h zEmZFqfN6s9I6(BIc;9*xqylO}Rcx?Kn2N*sS-(Fjp?b#vOxb3UnZ*2@`5V6rX*G20 zgS=w1OpgIiwppg+09H+LJZhjyV+5uN%4>t?bvQOZe=Fn>ijj3qqvdMJEmu86q{K>x@raimQnE&Fc*bjNq0?ut5OAc0_vic23 z$E1+fs5$2{#-@el3)AZW)aL+|EpwHr=+VcQ(}vBflAPBk9^FCTdup%s+_pj5ELLes z%;CK}Eww=#{F-T@=f)h+ykG_b0iUL6UWmu%^ZAWq76Fv^@p#;$C<<4ftMFPVSij*~ zdSd-@hp0rMjcvPW^TxOAP&atJUj9%_lB76v#d*&n%W@3DdnFQy@c$J)zI5qQJbS1U zHS0$M()lq3G$)v4Wo6#t;$pAg@Ar8;9v?$R0s8ngSCatf13+&y8uf<5Vfo_4i%;P7 zN`|SbDm~eDEj_+|g@Z3MXj~iHUI)~-32=nq_qUgpmTrb#6?$SNB_&ExQIP`3F-RQ0 z9goFgQ3ehjap;Tp^z_7n!C)NvmF%F_CZGnSo-qS7E11>Q)of*+nwlCIhtFG8Rpn=k z1WcA<28x2`HqVcOWvdi0+uPf}iTyIXCVZbBePSi5+7&kERduK-7234nE&9&p1B9D~ zff4}joHlLR(+rh?vaqG%{TP4>fsV+)z(52#BcV_z4xljrjrI5UE9cIgQ`|$X(sT>$ z9TQGb)-X|c4AI9x0k8;G%2Eug37}8|DD)y0SckAsK$Umy-1${}_G(xV!CL9--&jfy zKeE&U(Hag8jU=9ETLhS1`oYuf1RVs+T#0JbJ9qBfzrp!P3>0v=`sMaC3cX?I4Fe)r zhP=JKy3I_2>7!3vO@Tle{qS!) z2)fuxm!3X-y6DCmZ~QTi8M1;KiGhY0C~lm7Sg0Qs>BBj5yPi-4!1g;QEz}aJui(iC z@8yD7TU*O*r3XNLIQGFhivTfz*QJ$}m8HA^Xax$n9EDo?`s=SxKXBl{^rJ_QHlI3m zsu=~#zd?0%b@cEzeuwT}a}}4lC?8E+mO`nA7)eIS>i*Y54=EArb=O@#N4qPbP1WG}s;Gul09NtZDZm^tsNTy}&01lisx8Ga!>oW*0rt43o_gvJ z;qc4@uyOojO^{n4*Fvs?R6%|Uc^0zu@JU*G@85|sS#!_ThILvyV3ed&knlfE!1Uud zKy6QMp_l&s03AN8Cmqu2>glQb)vtc_N9;u1dFP!kqfO;dM!9g|f`ay+9U~R(u$FD| zp-@nz%K;MreT|Kceul|yC91P>0Ideg>JL8nVAgZbJ+~TFov_I3jHv&*G$-&pWQ}qB zKU=;@pS)oTj)Ev1u7V>LCy8Nt@jg4tMRe?gAg#XZUun=}jxSf^!@tg8 zDfaDa#(w9HcB5_dh^p1}Y9;Yr5l4P>=wL4`Tk?H)$5F~h*GC_HG!+h;aM~cn@QQ`E z&WR9*F1=KvDWpO|l}8FDUl@lQ*fA(@#IW&V>07M!S{GR%KXE zZ*Pze>^p7i5|tCZZ>LU%>89WP+XT#fbg}pQ=9_O$M;u(jKsgbD&`P8#9lH8P1gbnz zFj+XA2l4Tp46wxt=$vcrk1#PbmSD+s<`sUxXLiLxs|X z7`U2aWH?CyfGpzb!AMbF7O3(_!DKNmRJfP8tBW{M@S`97=u>baW;W$nz+`FvIy)~U zm6>Fm+Vg+^7X9}x4^bg?ojrSYJYaHavWSJP6g81k*WQRg^^O!w*2Rf-?j13zCO;R% zfddD)OGJ2=Re2V2qY1R*93>A$V%JfoA3v}6uoP0)`Sa&FtP(K!M&(Qvt}jZ?LqBus zPt7Kz@s1Qsu4=gr1xPQvLhdc`Z`-zQI_~ghzS~z9Abv6-UAQoiI4#L2hrMr|q+L6Y zQK5BRym)aocN}naiyM|}9=1?lmOu*zRUQeLM!%((yS%uk1mfl7c6)pKY%+rQLTsj| zx^ri{aiW@$3RGzOw&OG$x=x-vS&19-i+tUDlkzn(*hCu2d1S?~Rlo8`z%+sKoy$EX z;c(d7-`_7IAfG`-MrNN82R;MIwTIA*5%=#qZoAP{gfks99J)}$a6Ed|u3fv38%8Mgv=qg znlYMW<*G^a^Pe4|LhIrl8SWtO>+4&H8}w^zm2yvUn&hA7-92dO| z-Y)k&(wckc0VXHZ!#OyI&N!2Y)kg77MErhZGpGO93mzztE*$UBTmju%~qow9uL_&k)rj_l$IO zoK6bdb7|MAssaYgm?cRc5u#DZxN$;=SG)4oRaxmL?gG7QjY{`@CCON>O#w9>So@O# znP8@EL(|pIsj6G2F|$5uiI=u!=|KG0<=R`6BwWug$Ymi&5(A%)OA!c5Qy^ z6bnrAw<8t_3+e1Um$$B#`8DEN80y;lRr<=G=~n6h)#m^;n-pO>Mp8Npm0Vheta)WfvBii!lc#qqa(R*+l>9nRZ}fDNX!5j zvkXg#<=uXox|S{uLp?rtb47Q=QMim=1z*TzMA zcCe0Kt{V@^DejchSg8%>e88Mb=^njgi`l=gGbvA+&1PnM8XK#H!!zgrB|k)_i6Nc} zbamyet6>VPQ_+EnDmMn8uu!(nxB--p@4kl+)}(}Lf5tV{yb+QMFISRNRJWPDTql_3 z@rGoWEr2=O1~c8$dHGhi^+s3{vFu|8%y^QO=3U*+8Aq{b6wu;^s0oOsn6K}=8*Ns|3xy)S%5h`14#R`wfS4kf`zq7 z7MfiB7FO5n*%bn)u+FGrz|<1eEsQsDjE{+S_4Y3k{ox%$pl&4RIVIf8yOa@VI@3-C z)&_G1U{13I_fAq63+*wavNAwb)mkF8rzJT=cIQaROILY$5d})10p=Ht>eX$`Xg^sP zrec7MTdbA$pZ@~qe~0v!Z*mc`P$nz&W{5+HGS9bn8|3;yn9~4rDh*Cq;FLJGs`7|J z))FB_KJDiu17t{yn%9gJpKh)CX=@3nQhx2{-0^z*8PzQ`5>*6L1(%>gIQyrnx|qk- z{jHzZk6-$?#82N~l;uy-RI#b}Xl^^WGdW2tkCBlPLDl zoKt^WE$yeCd=Dk^wS(=bM`+XYwpXaiC!G#kfWvX%|7s+`is5hG*SiZ87p4@PS3kS%WU$qAQacXQTO9~6zZu=AM zXN_T@9M1*~v9_bSPEMvzo>H8bu9>r{#6!m1V-!P`8x?J6a+T}k9N9f!hB|F}l8T$t zL>-y3dTEpMZni`ich~Ci4m}((7ZOSIhBP&o>BP#n7Ff{|F=^&|UO!r11 zlN$ng>1vr*P0>h%A`!g}H60=+aE>rzgO1WCmJKOWw^Qm!ZhBkt=;2V(SY*@zawN$c z<>UFSlatyiH$i@nNGMcMZLKPRY650(@VB+72>c^aRalY^HBK!pbvfypG^vtGaPLK; zQ2~?N&u9c!0Ab5CtutYzQHyhAK(tz|q7;sToW^U(#z&xk{-^E~mKh(?^D)%(G-Jgu zUC~&XmE|PH5w(sNRjuBJnvW8O1V}E}a2SOhffWg;dLm$QLs?F`X3VU?Z$$8WF=3&R z2z10$M+=PGs#tq$%JSyxL)2(4IShFmQMSC{W~~zYvyHznKd@t4KW%C|nZhz-2~Sp+ zs6`@1)ff^`TSa2sz193I;Skl~H~Mr7)q=2sh_DzTU>gm44o;xllT`lwK zD2yLXSZG9VKSkQlutuwunh>4Z)nB|!bo7HHHNUWxyW6Ekv`k)Zx>XW1OE2rnthrAF9aQnAIEi zQ*z>56ETHCk`$$xGplmawRG7;+#nYL5^t41x(UnBug=xK4Vg$ULD-TC>hsX?9 zOc7V+5U!ZpYXG_JwImg<8fBSjg^ILIq&I_QrdmP4E{{XLYi5f!wOtSn(qro@DE%@h zR!j8@s7=jPR9RU}9lc>ufa$uoer)WQEk{fk3sX!1(3tK3iA1?#!qi2Dl?n@m5y-I6 zx(Pm!@#z2@x4N!snFz~7b;}-ZIBJ9|dQ#q=K(InJEmU~Q0J&r95a;j^N_9p)D|we`|pZtO{s{);Agx@H@yd#C+kl)E)V$P_|+;fqZu)R4&BL|`$x z)tGH235klmivKB)n5Zrp%)&+WS?T)Z4Ndr7NdLZQi{nPPqB-`mm^B1f{VZI?+F))o zy3$fjm!1l&YcH45RI%2*z3(e-++`N1eSmst2+(B5C}O1JOz(7nuDPx*saGRa2*K6h zlq)Lfs(B?SyolbWiOh{ELKG9Ekf`Ax0V=n9!l4mBC%D!%abhK1(Zur@MT{Fl*JWC0 z0-z-sZyxji*fMu+9|E&2MN)g{ z^?(@?gTuoSOLfaBzgRLndw8+~=zgFULk(^V=eHKovK5nrWo*q5LM&ZYi>ektV-W*rT*RAZfNvFH zokkoQM*GL1M^kf=Nb0-MHG5920Gen&4G-5EUnaWC;)B&KTjlOuLtt*q05ervN@;j$ zo;0~yH@Vz&3(0Zi!rd<7Vdw2zRgz?tR$YtGK~u$GWYM-L5-wbV!{WiQhxl1pRVkv* z4!)zi#1A<=)A>bX|K0B|K&W&HkRY+32>A6(P;y7J9^~t~;_*RUJS{?Z7tw+JnRTtb ze*rw_OB5Wq1gL|$#5f`)IT>#{Lk#kbJt<+vGW7U6S!&v;uw|F=XDVk%$z7BgkVcFt6CAv zC#=*+&k4sUs#l$%e!3QIc2QA!U9;y*Ag>qBR9H_aL?UMXR!wP{4AYhc$`z&^WXg8b zlVZS;M7gioY5$EROXaqN?_5qun|+5WtW<^Nu+=E47q5L(Syf8Wa53%K-7NzD`z=5I zL&zS{Auyfh&hw#Q`yc~`#l#Y6xI_nYQhNpqRdijN;uTg}R$hv5rkD;MOs(t28>iFc z1|NmOeH01~0ID8`@*@z6(f?^pEU;DXebW)9;-aVD&4kL1ai}L<<~{>ZDT}VRB&fR# zPjAUmE&!v-Rb{~R37DG34*>aT`HCs1sxQzxrw0<<`n;_(g8T=+KAWnlRXt?kHZ&GB zs=&bncyimO>r&z}V6q;cK203-&6__3)$Rp4c+OeZAKW&Zii=_SW*Zuf8qc)o5EUcl zWteZhLG;evv@kPSW+tF1!Fp1F$h1^4x%g~asJnORedLRma9hS!$>JAnnxX`7dc`;{ zMp#lq|Ni1JQ6jBIm-Tl=6*!L8Juq8T)3KO7@-A++XADpow8&UY5^c4xO4bEY_#tcP z;>jB&shDKQ#ECVu_18mnH8zc-&wg&UxM8BkC_nM|19X|~r4CaPR=Mx(tS!?H*6I{# z8IlZ?%0k^%z1iFV_V$`DZmJ|njXay>8+$w`NG~l|cs*m^anAH+>M@Ug*-3c-rA);a-9=Vic zh}TmF$Et)TO{$}^(lUDIon&20mtKkRX0icLPa!I*mVl_Kl7PBzFVFAb2vbb~GnPZ! zna<122$V8dq~zkYb=-^W^?J7h=2VZza|KTe{?6Mz@_368I+W-TsRAFagj7K)0HF*H zQ;`6*zr9Noa9v$Fee1DLQB6&`QJAvc4zm>+Rk*OwxDHcOjaoqExp4tgDgnqc@^~u9 z=c^>2zl!|63IJyPMdC(i@6dIP8&^)N*L;eqtIKtGnk@FDN=Yyepz(e8fSKac>@cGl zEYl8BA$K!(x*DA@Y>(vg96rUx#XP|wPiwOtP*?D@;5>`;n)}M&*>YmOk`5hI>8Jm3 zir#v&o8CK=e&wMB3n$aUMRl}nc?~sBmEpbiqK)grK4^HqG2un)Abg^V^}r&%o^pV! zq*EWNh!aoI;r4Dib~L@NS+ge7^ci(Ddv*=gjF%}G?4?ks4^`{{Zp@(Yn%OBs+qxZ4 zH^w=soD9>=dN6rS$LiJ!3j&pA5GyS$Evl-j3e?ut7M(qN_Ax;IL`6jf;XM>qkluc~ z6CgiII+^PnPO!(Jmt^^h2KwBs4K#C>2Zal;aF*ii`HG~xN3Ui9ldW>!J3)Homz{L@ zaBjL<<~86ZY5-IZ9H1WR@9*a+%6ZWB&Ojirxv#G;#w$m}x%+46px|MFnQ8n`!J$@G zRu&mkkq7GP>PqYD>r0OvJN7Uvb;0rD$EmYZf3}5_ajPMBQ|4z+wi=n7=V|Z}zw54V zpa&joMvU19sA0VyRPzF63999C`p4&w(XO3^(Z!Q~G&VMhdFJ6T?Ww7$d8(_cE8N@L z8wBL2xz@`_z;tRuDTg-I)#ms6rLwXz89>F1))OaAEQXXpy0&cDvgFK}Gd?cd?-;@S zr#Tt!;&+>j&)#piIvhtH>FlHKE{zr~9xuWo0!&FRp}yW?dhVG+u+B47C|%u`E{X7^ zsj2Dh*4EbN5YjNjFq)JoEHtX}$g~lH>9+eU(=ZfQStN7GDM019*$Gf3>^(2M@WSoq z&YcUeb-Y7^lM83NRT*iiUmM3ecbul*?COW}Qv#T!V*gJ+exH8(TYU!WLh3qw`ZUL; z@AJ)CU0toA%H`FW_?kx)rrS|}1%b*yaiL0idAWi%Q{^`Ewbx!-bn4WpSye{iG!n?Thr8BCdL^>BTn@8P<_&>Q8Om93SR{}@S_xdP1z zD(+T=mu6(3xPv2L8+z)gr~U>p=?5INFR;aTxmJJI8^6JWp%*Ty5E&!xjQ-rMjnq7~ znubHylqpjVtzEnJzY&LqAYrypge+p=SQ_C4dGdL-B`c@^s&cz&Tx^tqV(WYG!3V!P zY0{*F9ftMrFzaTcu-1_K#}uA7KryiCGivGfJFcW)u#Y04AfSfC@f}~9Msw!WQ6Y69 zjy|z&-MYW;@9*z}MFtUrMp$^kSgw_5gjZMc6rkpDm3)A8ayuizyX6Ff#8a%IEtMuu zo*caGw%hhxxNsp9kH`J^T*Y}s@pc#m_N>wC(c}>PvvvH$fbm14yKDK1Cc5Xo**KGa z=c!gH0%m$*;Wf%GK|_`|dQJmernXwdYr7&Z?tT*G!?si>s(V*h3+P84ij^=0$Q| zmB}L)iJl#wuZ)WPW#spl11ix#zeaoZ9HqT)y)OokWztn&Uw?A(;>EwY_uhMd+1J;1 z5%791UcA`b)zvj{=FFMk@#DuMyy|a9M@M`lVHOgoE2s?(4W7ovMqVzdi{GbOOtGDs;rMV2z&A3Ahs$_p>Nu&T4O^9o)g#glA62d9#O1-A82x^ng zmX?+S_uO;Ot7tZQ0rL`XsBZfiCag1rbByBqQGktSvxGAhXt~KkufgpaDqxA6E?|mv z(6|?d*UjQpicomG^i+VCpu+1CI2U5cW;h&y?c2BWTB4r>s7CH~V`wvHhan+hk@^sk zuo&|rMi#{Nfn1uZ_hm|w-kT@OepoETQzYc%$s+3hs94-2ET}yWLH`@j&54k{Wy_Xz zaJvt^LFgPn)6mbtNqAJZL0-Q3a>E=Bpst~E-V@cUhpiP>>4T+;CA7?S(QwRbiSdd> z47eBt%j<6!@j^Z*RL|C}Tkk_5E?^7fVIeK^BXrd~V~7Zko)=ZEVmx)G853E^qUzO* z4k2N&XiJYB_0fl&K64#z?#kPH{q@)X9gca`Ad!RSPz(Aw*&gIIxB)dZFfb5;afV@; zVQw?I%j|N(94?@)+f+D79^Cbb)qYWEURbJ^7ggtua9&P}0UJwDF-%?;MXWA?0+sge z-TM$v+^<)waay!kq4^8+u|+X+-aRoqMH9U)`q&@6*H1Mp_P6aG0QC?%X}mZ)tbX^x zg$tj-4W&WioCJaXDE=>iVvF#`2LQ_5WHAoMxXlDyB^#JG-$L5Ye>!{xe_5cCZ8=K7 z^ujVwwqCA^#cF@N87mg?B6xmY`vv9cL3rRfapJ_Ic)gsvuy|tStCwiBV3C@zOfl}q zGAeIysHH@Q4@q>ST@qYAGBzj8#mzQDYcv1)h<;)KNMmWyo&;->j1C0Zy zl8poO`=2FE##N6cpgBP`LMabhDlZDh3*Z?*#cQ@sSd5=xa`nrL-oR4U?*-8N}#%Vkw+ZDsj#Idw^4WB5U zZD{g)H|sE2?N|ev7gQQLIiz(uQv1B^Ns~q{TFmnm#Dmr*x3#5mvsvm*~S2Lpn>Iq~yoqGEEtp zH%wVJyA%QR@Yn@fNT{hEcVv0h$lgsADaQe#Qzvz>puKJ3+KBU}ImG#yXdd z6I3+~NQF{AI5a9?5@k20XgHi0w_}v-KNra+EWpt+p4lm{H`|8l|nf4B~9tQW-p3NQeX9?xKN4)>%00000< KMNUMnLSTX(); + var externalEdit = await skinManager.BeginExternalEditing(import.PerformRead(s => s.Detach())); // should not fail + + Assert.That(Directory.Exists(externalEdit.MountedPath)); + + var directoryInfo = new DirectoryInfo(externalEdit.MountedPath); + + Assert.That(directoryInfo.GetFiles().Select(f => f.Name), Is.EquivalentTo(new[] + { + "skin.ini", + })); + + var subDirectory = directoryInfo.GetDirectories().Single(); + Assert.That(subDirectory.Name, Is.EqualTo("folder")); + Assert.That(subDirectory.GetFiles().Select(f => f.Name), Is.EquivalentTo(new[] + { + "test.png", + })); + + Task finishTask = Task.CompletedTask; + host.UpdateThread.Scheduler.Add(() => finishTask = externalEdit.Finish()); + await finishTask; + } + finally + { + host.Exit(); + } + } + } + + /// + /// Note that this test passing / failing is platform / OS-specific (if it is to fail, it'll fail on windows). + /// + [Test] + public async Task TestExternallyMountingImportWithInvalidFilename() + { + using (HeadlessGameHost host = new CleanRunHeadlessGameHost()) + { + try + { + var osu = LoadOsuIntoHost(host); + + var zipStream = new MemoryStream(); + using var zip = ZipArchive.Create(); + zip.AddEntry("test?.png", new MemoryStream(new byte[] { 0xDE, 0xAD, 0xBE, 0xEF })); + zip.SaveTo(zipStream); + + var import = await loadSkinIntoOsu(osu, new ImportTask(zipStream, "test skin.osk")); + + var skinManager = osu.Dependencies.Get(); + var externalEdit = await skinManager.BeginExternalEditing(import.PerformRead(s => s.Detach())); // should not fail + + Assert.That(Directory.Exists(externalEdit.MountedPath)); + Assert.That(new DirectoryInfo(externalEdit.MountedPath).GetFiles().Select(f => f.Name), Is.EquivalentTo(new[] + { + "skin.ini", + "test.png" + })); + + Task finishTask = Task.CompletedTask; + host.UpdateThread.Scheduler.Add(() => finishTask = externalEdit.Finish()); + await finishTask; + } + finally + { + host.Exit(); + } + } + } + private void assertCorrectMetadata(Live import1, string name, string creator, decimal version, OsuGameBase osu) { import1.PerformRead(i => diff --git a/osu.Game.Tests/Skins/SkinDeserialisationTest.cs b/osu.Game.Tests/Skins/SkinDeserialisationTest.cs index 0eafe33343..a493f334fd 100644 --- a/osu.Game.Tests/Skins/SkinDeserialisationTest.cs +++ b/osu.Game.Tests/Skins/SkinDeserialisationTest.cs @@ -79,6 +79,8 @@ namespace osu.Game.Tests.Skins "Archives/modified-argon-20250424.osk", // Covers "Argon" unstable rate counter "Archives/modified-argon-20250809.osk", + // Covers "Argon" judgement counter + "Archives/modified-argon-20250308.osk", }; /// diff --git a/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs b/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs index 58fb02c90c..3021589cdb 100644 --- a/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs +++ b/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs @@ -325,7 +325,7 @@ namespace osu.Game.Tests.Visual.Background private void setupUserSettings() { AddUntilStep("Song select is current", () => songSelect.IsCurrentScreen()); - AddUntilStep("Song select has selection", () => songSelect.Carousel?.CurrentSelection != null); + AddUntilStep("Song select has selection", () => songSelect.Carousel?.CurrentGroupedBeatmap != null); AddStep("Set default user settings", () => { SelectedMods.Value = new[] { new OsuModNoFail() }; diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs new file mode 100644 index 0000000000..e5886aa607 --- /dev/null +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs @@ -0,0 +1,209 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Diagnostics; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Testing; +using osu.Game.Rulesets; +using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Osu; +using osu.Game.Rulesets.Osu.Judgements; +using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.Play.HUD.JudgementCounter; +using osu.Game.Skinning.Components; + +namespace osu.Game.Tests.Visual.Gameplay +{ + public partial class TestSceneArgonJudgementCounter : OsuTestScene + { + private ScoreProcessor scoreProcessor = null!; + private JudgementCountController judgementCountController = null!; + private TestArgonJudgementCounterDisplay counterDisplay = null!; + + private DependencyProvidingContainer content = null!; + + protected override Container Content => content; + + private readonly Bindable lastJudgementResult = new Bindable(); + + private int iteration; + + [SetUpSteps] + public void SetUpSteps() => AddStep("Create components", () => + { + var ruleset = CreateRuleset(); + + Debug.Assert(ruleset != null); + + scoreProcessor = new ScoreProcessor(ruleset); + base.Content.Child = new DependencyProvidingContainer + { + RelativeSizeAxes = Axes.Both, + CachedDependencies = new (Type, object)[] { (typeof(ScoreProcessor), scoreProcessor), (typeof(Ruleset), ruleset) }, + Children = new Drawable[] + { + judgementCountController = new JudgementCountController(), + content = new DependencyProvidingContainer + { + RelativeSizeAxes = Axes.Both, + CachedDependencies = new (Type, object)[] { (typeof(JudgementCountController), judgementCountController) }, + } + }, + }; + }); + + protected override Ruleset CreateRuleset() => new OsuRuleset(); + + private void applyOneJudgement(HitResult result) + { + lastJudgementResult.Value = new OsuJudgementResult(new HitObject + { + StartTime = iteration * 10000 + }, new OsuJudgement()) + { + Type = result, + }; + scoreProcessor.ApplyResult(lastJudgementResult.Value); + + iteration++; + } + + [Test] + public void TestAddJudgementsToCounters() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddRepeatStep("Add judgement", () => applyOneJudgement(HitResult.Great), 2); + AddRepeatStep("Add judgement", () => applyOneJudgement(HitResult.Miss), 2); + AddRepeatStep("Add judgement", () => applyOneJudgement(HitResult.Meh), 2); + } + + [Test] + public void TestAddWhilstHidden() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddRepeatStep("Add judgement", () => applyOneJudgement(HitResult.LargeTickHit), 2); + AddAssert("Check value added whilst hidden", () => hiddenCount() == 2); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + } + + [Test] + public void TestChangeFlowDirection() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddStep("Set direction vertical", () => counterDisplay.FlowDirection.Value = Direction.Vertical); + AddStep("Set direction horizontal", () => counterDisplay.FlowDirection.Value = Direction.Horizontal); + + AddStep("add 100 ok judgements", () => + { + for (int i = 0; i < 100; i++) + applyOneJudgement(HitResult.Ok); + }); + AddStep("add 1000 great judgements", () => + { + for (int i = 0; i < 1000; i++) + applyOneJudgement(HitResult.Great); + }); + + AddToggleStep("toggle max judgement display", t => counterDisplay.ShowMaxJudgement.Value = t); + } + + [Test] + public void TestToggleJudgementNames() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddStep("Show label", () => counterDisplay.ShowLabel.Value = true); + AddWaitStep("wait some", 2); + AddAssert("Assert hidden", () => counterDisplay.CounterFlow.Children.First().Alpha == 1); + AddStep("Hide label", () => counterDisplay.ShowLabel.Value = false); + AddWaitStep("wait some", 2); + AddAssert("Assert shown", () => counterDisplay.CounterFlow.Children.First().Alpha == 1); + } + + [Test] + public void TestHideMaxValue() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddStep("Hide max judgement", () => counterDisplay.ShowMaxJudgement.Value = false); + AddWaitStep("wait some", 2); + AddAssert("Check max hidden", () => counterDisplay.CounterFlow.ChildrenOfType().First().Alpha == 0); + AddStep("Show max judgement", () => counterDisplay.ShowMaxJudgement.Value = true); + } + + [Test] + public void TestMaxValueStartsHidden() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay + { + ShowMaxJudgement = { Value = false } + }); + AddAssert("Check max hidden", () => counterDisplay.CounterFlow.ChildrenOfType().First().Alpha == 0); + } + + [Test] + public void TestMaxValueHiddenOnModeChange() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddStep("Set max judgement to hide itself", () => counterDisplay.ShowMaxJudgement.Value = false); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddWaitStep("wait some", 2); + AddAssert("Assert max judgement hidden", () => counterDisplay.CounterFlow.ChildrenOfType().First().Alpha == 0); + } + + [Test] + public void TestNoDuplicates() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddAssert("Check no duplicates", + () => counterDisplay.CounterFlow.ChildrenOfType().Count(), + () => Is.EqualTo(counterDisplay.CounterFlow.ChildrenOfType().Select(c => c.Result.DisplayName).Distinct().Count())); + } + + [Test] + public void TestCycleDisplayModes() + { + AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); + + AddStep("Show basic judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.Simple); + AddWaitStep("wait some", 2); + AddAssert("Check only basic", () => counterDisplay.CounterFlow.ChildrenOfType().Last().Alpha == 0); + AddStep("Show normal judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.Normal); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddWaitStep("wait some", 2); + AddAssert("Check all visible", () => counterDisplay.CounterFlow.ChildrenOfType().Last().Alpha == 1); + AddToggleStep("toggle wireframe display", t => counterDisplay.WireframeOpacity.Value = t ? 0.3f : 0); + AddStep("Set direction vertical", () => counterDisplay.FlowDirection.Value = Direction.Vertical); + AddStep("Set direction horizontal", () => counterDisplay.FlowDirection.Value = Direction.Horizontal); + } + + private int hiddenCount() + { + var num = counterDisplay.CounterFlow.Children.First(child => child.Result.Types.Contains(HitResult.LargeTickHit)); + return num.Result.ResultCount.Value; + } + + private partial class TestArgonJudgementCounterDisplay : ArgonJudgementCounterDisplay + { + public new FillFlowContainer CounterFlow => base.CounterFlow; + + public TestArgonJudgementCounterDisplay() + { + Margin = new MarginPadding { Top = 100 }; + Anchor = Anchor.TopCentre; + Origin = Anchor.TopCentre; + } + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapPanel.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapPanel.cs new file mode 100644 index 0000000000..c46beba037 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapPanel.cs @@ -0,0 +1,28 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Graphics; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osu.Game.Tests.Visual.Multiplayer; +using osuTK; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneBeatmapPanel : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("add beatmap panel", () => + { + Child = new BeatmapPanel(CreateAPIBeatmap()) + { + Size = new Vector2(300, 70), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }; + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionGrid.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionGrid.cs new file mode 100644 index 0000000000..79ed79e388 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionGrid.cs @@ -0,0 +1,184 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Testing; +using osu.Game.Beatmaps; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.Rooms; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osu.Game.Tests.Visual.OnlinePlay; +using osuTK; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneBeatmapSelectionGrid : OnlinePlayTestScene + { + private MultiplayerPlaylistItem[] items = null!; + + private BeatmapSelectionGrid grid = null!; + + [Resolved] + private BeatmapManager beatmapManager { get; set; } = null!; + + [BackgroundDependencyLoader] + private void load() + { + var beatmaps = beatmapManager.GetAllUsableBeatmapSets() + .SelectMany(it => it.Beatmaps) + .Take(50) + .ToArray(); + + if (beatmaps.Length > 0) + { + items = Enumerable.Range(1, 50).Select(i => new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = beatmaps[i % beatmaps.Length].OnlineID, + StarRating = i / 10.0, + }).ToArray(); + } + else + { + items = Enumerable.Range(1, 50).Select(i => new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = i, + StarRating = i / 10.0, + }).ToArray(); + } + } + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("add grid", () => Child = grid = new BeatmapSelectionGrid + { + RelativeSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Scale = new Vector2(0.8f), + }); + + AddStep("add items", () => + { + foreach (var item in items) + grid.AddItem(item); + }); + + AddWaitStep("wait for panels", 3); + } + + [Test] + public void TestCompleteRollAnimation() + { + AddStep("play animation", () => + { + var (candidateItems, finalItem) = pickRandomItems(5); + + grid.RollAndDisplayFinalBeatmap(candidateItems, finalItem); + }); + } + + [Test] + public void TestRollAnimation() + { + AddStep("play animation", () => + { + var (candidateItems, finalItem) = pickRandomItems(5); + + grid.TransferCandidatePanelsToRollContainer(candidateItems, duration: 0); + grid.ArrangeItemsForRollAnimation(duration: 0, stagger: 0); + + Scheduler.AddDelayed(() => grid.PlayRollAnimation(finalItem), 500); + }); + } + + [Test] + public void TestPresentRolledBeatmap() + { + AddStep("present beatmap", () => + { + var (candidateItems, finalItem) = pickRandomItems(5); + + grid.TransferCandidatePanelsToRollContainer(candidateItems, duration: 0); + grid.ArrangeItemsForRollAnimation(duration: 0, stagger: 0); + grid.PlayRollAnimation(finalItem, duration: 0); + + Scheduler.AddDelayed(() => grid.PresentRolledBeatmap(finalItem), 500); + }); + } + + [Test] + public void TestPresentUnanimouslyChosenBeatmap() + { + AddStep("present beatmap", () => + { + var (candidateItems, finalItem) = pickRandomItems(5); + + grid.TransferCandidatePanelsToRollContainer(candidateItems, duration: 0); + grid.ArrangeItemsForRollAnimation(duration: 0, stagger: 0); + grid.PlayRollAnimation(finalItem, duration: 0); + + Scheduler.AddDelayed(() => grid.PresentUnanimouslyChosenBeatmap(finalItem), 500); + }); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + [TestCase(4)] + [TestCase(5)] + [TestCase(6)] + [TestCase(7)] + [TestCase(8)] + public void TestPanelArrangement(int count) + { + AddStep("arrange panels", () => + { + var (candidateItems, _) = pickRandomItems(count); + + grid.TransferCandidatePanelsToRollContainer(candidateItems); + grid.Delay(BeatmapSelectionGrid.ARRANGE_DELAY) + .Schedule(() => grid.ArrangeItemsForRollAnimation()); + }); + + AddWaitStep("wait for movement", 5); + + AddStep("display roll order", () => + { + var panels = grid.ChildrenOfType().ToArray(); + + for (int i = 0; i < panels.Length; i++) + { + var panel = panels[i]; + + panel.Add(new OsuSpriteText + { + Text = (i + 1).ToString(), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Font = OsuFont.Default.With(size: 50, weight: FontWeight.SemiBold), + }); + } + }); + } + + private (long[] candidateItems, long finalItem) pickRandomItems(int count) + { + long[] candidateItems = items.Select(it => it.ID).ToArray(); + Random.Shared.Shuffle(candidateItems); + candidateItems = candidateItems.Take(count).ToArray(); + + long finalItem = candidateItems[Random.Shared.Next(candidateItems.Length)]; + + return (candidateItems, finalItem); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionOverlay.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionOverlay.cs new file mode 100644 index 0000000000..4e596d65cc --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionOverlay.cs @@ -0,0 +1,68 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Testing; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osuTK; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneBeatmapSelectionOverlay : OsuTestScene + { + private BeatmapSelectionOverlay selectionOverlay = null!; + + [SetUpSteps] + public void SetupSteps() + { + AddStep("add drawable", () => Child = new Container + { + Width = 100, + AutoSizeAxes = Axes.Y, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Scale = new Vector2(2), + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0.1f, + }, + selectionOverlay = new BeatmapSelectionOverlay + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + } + } + }); + } + + [Test] + public void TestSelectionOverlay() + { + AddStep("add maarvin", () => selectionOverlay.AddUser(new APIUser + { + Id = 6411631, + Username = "Maarvin", + }, isOwnUser: true)); + AddStep("add peppy", () => selectionOverlay.AddUser(new APIUser + { + Id = 2, + Username = "peppy", + }, false)); + AddStep("add smogipoo", () => selectionOverlay.AddUser(new APIUser + { + Id = 1040328, + Username = "smoogipoo", + }, false)); + AddStep("remove smogipoo", () => selectionOverlay.RemoveUser(1040328)); + AddStep("remove peppy", () => selectionOverlay.RemoveUser(2)); + AddStep("remove maarvin", () => selectionOverlay.RemoveUser(6411631)); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionPanel.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionPanel.cs new file mode 100644 index 0000000000..addb0ed3a0 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneBeatmapSelectionPanel.cs @@ -0,0 +1,57 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Rooms; +using osu.Game.Overlays; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneBeatmapSelectionPanel : MultiplayerTestScene + { + [Cached] + private readonly OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); + + [Test] + public void TestBeatmapPanel() + { + BeatmapSelectionPanel? panel = null; + + AddStep("add panel", () => Child = panel = new BeatmapSelectionPanel(new MultiplayerPlaylistItem()) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }); + + AddStep("add maarvin", () => panel!.AddUser(new APIUser + { + Id = 6411631, + Username = "Maarvin", + }, isOwnUser: true)); + AddStep("add peppy", () => panel!.AddUser(new APIUser + { + Id = 2, + Username = "peppy", + })); + AddStep("add smogipoo", () => panel!.AddUser(new APIUser + { + Id = 1040328, + Username = "smoogipoo", + })); + AddStep("remove smogipoo", () => panel!.RemoveUser(new APIUser { Id = 1040328 })); + AddStep("remove peppy", () => panel!.RemoveUser(new APIUser { Id = 2 })); + AddStep("remove maarvin", () => panel!.RemoveUser(new APIUser { Id = 6411631 })); + + AddToggleStep("allow selection", value => + { + if (panel != null) + panel.AllowSelection = value; + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneIdleScreen.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneIdleScreen.cs new file mode 100644 index 0000000000..49daedb6a3 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneIdleScreen.cs @@ -0,0 +1,89 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Framework.Screens; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle; +using osu.Game.Tests.Visual.Multiplayer; +using osuTK; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneIdleScreen : MultiplayerTestScene + { + private const int user_count = 8; + + private (MultiplayerRoomUser user, int score)[] userScores = null!; + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + AddStep("add list", () => + { + userScores = Enumerable.Range(1, user_count).Select(i => + { + var user = new MultiplayerRoomUser(i) + { + User = new APIUser + { + Username = $"Player {i}" + } + }; + + return (user, 0); + }).ToArray(); + + Child = new ScreenStack(new IdleScreen()) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(0.8f) + }; + }); + + AddStep("join users", () => + { + foreach (var (user, _) in userScores) + MultiplayerClient.AddUser(user); + }); + } + + [Test] + public void TestRandomChanges() + { + AddStep("apply random changes", () => + { + int[] deltas = Enumerable.Range(1, userScores.Length).ToArray(); + new Random().Shuffle(deltas); + + for (int i = 0; i < userScores.Length; i++) + userScores[i] = (userScores[i].user, userScores[i].score + deltas[i]); + userScores = userScores.OrderByDescending(u => u.score).ToArray(); + + MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Users = + { + UserDictionary = userScores.Select((tuple, i) => new MatchmakingUser + { + UserId = tuple.user.UserID, + Points = tuple.score, + Placement = i + 1 + }).ToDictionary(s => s.UserId) + } + }).WaitSafely(); + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingCloud.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingCloud.cs new file mode 100644 index 0000000000..c25057c84b --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingCloud.cs @@ -0,0 +1,44 @@ +// Copyright (c) ppy Pty Ltd . 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.Graphics; +using osu.Framework.Utils; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Users; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneMatchmakingCloud : OsuTestScene + { + private MatchmakingCloud cloud = null!; + + protected override void LoadComplete() + { + base.LoadComplete(); + + Child = cloud = new MatchmakingCloud + { + RelativeSizeAxes = Axes.Both, + }; + } + + [Test] + public void TestBasic() + { + AddStep("refresh users", () => + { + var testUsers = Enumerable.Range(0, 50).Select(_ => new APIUser + { + Username = "peppy", + Statistics = new UserStatistics { GlobalRank = 1234 }, + Id = RNG.Next(2, 30000000), + }).ToArray(); + + cloud.Users = testUsers; + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingPoolSelector.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingPoolSelector.cs new file mode 100644 index 0000000000..442a06606b --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingPoolSelector.cs @@ -0,0 +1,35 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Graphics; +using osu.Game.Online.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneMatchmakingPoolSelector : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("add selector", () => Child = new MatchmakingPoolSelector + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AvailablePools = + { + Value = + [ + new MatchmakingPool { Id = 0, RulesetId = 0 }, + new MatchmakingPool { Id = 1, RulesetId = 1 }, + new MatchmakingPool { Id = 2, RulesetId = 2 }, + new MatchmakingPool { Id = 3, RulesetId = 3, Variant = 4 }, + new MatchmakingPool { Id = 4, RulesetId = 3, Variant = 7 }, + ] + } + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingQueueScreen.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingQueueScreen.cs new file mode 100644 index 0000000000..72eba6e1c8 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingQueueScreen.cs @@ -0,0 +1,58 @@ +// Copyright (c) ppy Pty Ltd . 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.Testing; +using osu.Framework.Utils; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens; +using osu.Game.Tests.Visual.Multiplayer; +using osu.Game.Users; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneMatchmakingQueueScreen : MultiplayerTestScene + { + [Cached] + private readonly MatchmakingController controller = new MatchmakingController(); + + private MatchmakingQueueScreen? queueScreen => Stack.CurrentScreen as MatchmakingQueueScreen; + + [SetUpSteps] + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("load screen", () => LoadScreen(new MatchmakingIntroScreen())); + } + + [Test] + public void TestBasic() + { + AddUntilStep("wait for queue screen", () => queueScreen?.IsLoaded == true); + + AddStep("set users", () => + { + queueScreen!.Users = Enumerable.Range(0, 10).Select(_ => new APIUser + { + Username = "peppy", + Statistics = new UserStatistics { GlobalRank = 1234 }, + Id = RNG.Next(2, 30000000), + }).ToArray(); + }); + + AddStep("change state to idle", () => queueScreen!.SetState(MatchmakingQueueScreen.MatchmakingScreenState.Idle)); + + AddStep("change state to queueing", () => queueScreen!.SetState(MatchmakingQueueScreen.MatchmakingScreenState.Queueing)); + + AddStep("change state to found match", () => queueScreen!.SetState(MatchmakingQueueScreen.MatchmakingScreenState.PendingAccept)); + + AddStep("change state to waiting for room", () => queueScreen!.SetState(MatchmakingQueueScreen.MatchmakingScreenState.AcceptedWaitingForRoom)); + + AddStep("change state to in room", () => queueScreen!.SetState(MatchmakingQueueScreen.MatchmakingScreenState.InRoom)); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreen.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreen.cs new file mode 100644 index 0000000000..416811d345 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreen.cs @@ -0,0 +1,244 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics.Primitives; +using osu.Framework.Screens; +using osu.Framework.Testing; +using osu.Framework.Utils; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Online.Rooms; +using osu.Game.Rulesets.Scoring; +using osu.Game.Scoring; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osu.Game.Tests.Visual.Multiplayer; +using osuTK; +using osuTK.Input; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneMatchmakingScreen : MultiplayerTestScene + { + private const int user_count = 8; + private const int beatmap_count = 50; + + private MultiplayerRoomUser[] users = null!; + private MatchmakingScreen screen = null!; + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => + { + var room = CreateDefaultRoom(); + room.Playlist = Enumerable.Range(1, 50).Select(i => new PlaylistItem(new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = i, + StarRating = i / 10.0, + })).ToArray(); + + JoinRoom(room); + }); + + WaitForJoined(); + + setupRequestHandler(); + + AddStep("load match", () => + { + users = Enumerable.Range(1, user_count).Select(i => new MultiplayerRoomUser(i) + { + User = new APIUser + { + Username = $"Player {i}" + } + }).ToArray(); + + var beatmaps = Enumerable.Range(1, beatmap_count).Select(i => new MultiplayerPlaylistItem + { + BeatmapID = i, + StarRating = i / 10.0 + }).ToArray(); + + LoadScreen(screen = new MatchmakingScreen(new MultiplayerRoom(0) + { + Users = users, + Playlist = beatmaps + })); + }); + AddUntilStep("wait for load", () => screen.IsCurrentScreen()); + } + + [Test] + public void TestGameplayFlow() + { + // Initial "ready" status of the room". + AddWaitStep("wait", 5); + + AddStep("round start", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.RoundWarmupTime + }).WaitSafely()); + + // Next round starts with picks. + AddWaitStep("wait", 5); + + AddStep("pick", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.UserBeatmapSelect + }).WaitSafely()); + + // Make some selections + AddWaitStep("wait", 5); + + for (int i = 0; i < 3; i++) + { + int j = i * 2; + AddStep("click a beatmap", () => + { + Quad panelQuad = this.ChildrenOfType().ElementAt(j).ScreenSpaceDrawQuad; + + InputManager.MoveMouseTo(new Vector2(panelQuad.Centre.X, panelQuad.TopLeft.Y + 5)); + InputManager.Click(MouseButton.Left); + }); + + AddWaitStep("wait", 2); + } + + // Lock in the gameplay beatmap + + AddStep("selection", () => + { + MultiplayerPlaylistItem[] beatmaps = Enumerable.Range(1, 50).Select(i => new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = i, + StarRating = i / 10.0, + }).ToArray(); + + MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.ServerBeatmapFinalised, + CandidateItems = beatmaps.Select(b => b.ID).ToArray(), + CandidateItem = beatmaps[0].ID + }).WaitSafely(); + }); + + // Prepare gameplay. + AddWaitStep("wait", 25); + + AddStep("prepare gameplay", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.GameplayWarmupTime + }).WaitSafely()); + + // Start gameplay. + AddWaitStep("wait", 5); + + AddStep("gameplay", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.Gameplay + }).WaitSafely()); + + AddStep("start gameplay", () => MultiplayerClient.StartMatch().WaitSafely()); + // AddUntilStep("wait for player", () => (Stack.CurrentScreen as Player)?.IsLoaded == true); + + // Finish gameplay. + AddWaitStep("wait", 5); + + AddStep("round end", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.ResultsDisplaying + }).WaitSafely()); + + AddWaitStep("wait", 10); + + AddStep("room end", () => + { + MatchmakingRoomState state = new MatchmakingRoomState + { + CurrentRound = 1, + Stage = MatchmakingStage.Ended + }; + + int localUserId = API.LocalUser.Value.OnlineID; + + state.Users[localUserId].Placement = 1; + state.Users[localUserId].Rounds[1].Placement = 1; + state.Users[localUserId].Rounds[1].TotalScore = 1; + state.Users[localUserId].Rounds[1].Statistics[HitResult.LargeBonus] = 1; + + MultiplayerClient.ChangeMatchRoomState(state).WaitSafely(); + }); + } + + private void setupRequestHandler() + { + AddStep("setup request handler", () => + { + Func? defaultRequestHandler = null; + + ((DummyAPIAccess)API).HandleRequest = request => + { + switch (request) + { + case GetBeatmapsRequest getBeatmaps: + getBeatmaps.TriggerSuccess(new GetBeatmapsResponse + { + Beatmaps = getBeatmaps.BeatmapIds.Select(id => new APIBeatmap + { + OnlineID = id, + StarRating = id, + DifficultyName = $"Beatmap {id}", + BeatmapSet = new APIBeatmapSet + { + Title = $"Title {id}", + Artist = $"Artist {id}", + AuthorString = $"Author {id}" + } + }).ToList() + }); + return true; + + case IndexPlaylistScoresRequest index: + var result = new IndexedMultiplayerScores(); + + for (int i = 0; i < 8; ++i) + { + result.Scores.Add(new MultiplayerScore + { + ID = i, + Accuracy = 1 - (float)i / 16, + Position = i + 1, + EndedAt = DateTimeOffset.Now, + Passed = true, + Rank = (ScoreRank)RNG.Next((int)ScoreRank.D, (int)ScoreRank.XH), + MaxCombo = 1000 - i, + TotalScore = (long)(1_000_000 * (1 - (float)i / 16)), + User = new APIUser { Username = $"user {i}" }, + Statistics = new Dictionary() + }); + } + + index.TriggerSuccess(result); + return true; + + default: + return defaultRequestHandler?.Invoke(request) ?? false; + } + }; + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreenStack.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreenStack.cs new file mode 100644 index 0000000000..be3d7463d6 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneMatchmakingScreenStack.cs @@ -0,0 +1,119 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Online.Rooms; +using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneMatchmakingScreenStack : MultiplayerTestScene + { + private const int user_count = 8; + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => + { + var room = CreateDefaultRoom(); + room.Playlist = Enumerable.Range(1, 50).Select(i => new PlaylistItem(new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = i, + StarRating = i / 10.0, + })).ToArray(); + + JoinRoom(room); + }); + + WaitForJoined(); + + AddStep("add carousel", () => + { + Child = new MatchmakingScreenStack + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + }; + }); + + AddStep("join users", () => + { + var users = Enumerable.Range(1, user_count).Select(i => new MultiplayerRoomUser(i) + { + User = new APIUser + { + Username = $"Player {i}" + } + }).ToArray(); + + foreach (var user in users) + MultiplayerClient.AddUser(user); + }); + } + + [Test] + public void TestStatus() + { + AddWaitStep("wait for scroll", 5); + AddStep("pick", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.UserBeatmapSelect + }).WaitSafely()); + + AddWaitStep("wait for scroll", 5); + AddStep("selection", () => + { + MultiplayerPlaylistItem[] beatmaps = Enumerable.Range(1, 50).Select(i => new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = i, + StarRating = i / 10.0, + }).ToArray(); + + beatmaps = Random.Shared.GetItems(beatmaps, 8); + + MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = MatchmakingStage.ServerBeatmapFinalised, + CandidateItems = beatmaps.Select(b => b.ID).ToArray(), + CandidateItem = beatmaps[0].ID + }).WaitSafely(); + }); + + AddWaitStep("wait for scroll", 35); + AddStep("room end", () => + { + var state = new MatchmakingRoomState + { + CurrentRound = 1, + Stage = MatchmakingStage.Ended + }; + + int localUserId = API.LocalUser.Value.OnlineID; + + state.Users[localUserId].Placement = 1; + state.Users[localUserId].Rounds[1].Placement = 1; + state.Users[localUserId].Rounds[1].TotalScore = 1; + state.Users[localUserId].Rounds[1].Statistics[HitResult.LargeBonus] = 1; + + state.Users[1].Placement = 2; + state.Users[1].Rounds[1].Placement = 2; + + MultiplayerClient.ChangeMatchRoomState(state).WaitSafely(); + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestScenePickScreen.cs b/osu.Game.Tests/Visual/Matchmaking/TestScenePickScreen.cs new file mode 100644 index 0000000000..16f687d772 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestScenePickScreen.cs @@ -0,0 +1,110 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Utils; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Rooms; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestScenePickScreen : MultiplayerTestScene + { + private readonly IReadOnlyList users = new[] + { + new APIUser + { + Id = 2, + Username = "peppy", + }, + new APIUser + { + Id = 1040328, + Username = "smoogipoo", + }, + new APIUser + { + Id = 6573093, + Username = "OliBomby", + }, + new APIUser + { + Id = 7782553, + Username = "aesth", + }, + new APIUser + { + Id = 6411631, + Username = "Maarvin", + } + }; + + private readonly PlaylistItem[] items = Enumerable.Range(1, 50).Select(i => new PlaylistItem(new MultiplayerPlaylistItem + { + ID = i, + BeatmapID = i, + StarRating = i / 10.0, + })).ToArray(); + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => + { + var room = CreateDefaultRoom(); + room.Playlist = items; + + JoinRoom(room); + }); + + WaitForJoined(); + + AddStep("add users", () => + { + foreach (var user in users) + MultiplayerClient.AddUser(user); + }); + } + + [Test] + public void TestScreen() + { + var selectedItems = new List(); + + PickScreen screen = null!; + + AddStep("add screen", () => LoadScreen(screen = new PickScreen())); + + AddStep("select maps", () => + { + selectedItems.Clear(); + + foreach (var user in users) + { + var item = items[Random.Shared.Next(items.Length)]; + selectedItems.Add(item.ID); + + Scheduler.AddDelayed(() => + { + MultiplayerClient.MatchmakingToggleUserSelection(user.Id, item.ID).FireAndForget(); + }, RNG.NextDouble(10, 1000)); + } + }); + + AddStep("show final map", () => + { + long[] candidateItems = selectedItems.ToArray(); + long finalItem = candidateItems[Random.Shared.Next(candidateItems.Length)]; + + screen.RollFinalBeatmap(candidateItems, finalItem); + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestScenePlayerPanel.cs b/osu.Game.Tests/Visual/Matchmaking/TestScenePlayerPanel.cs new file mode 100644 index 0000000000..dafb2d9f03 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestScenePlayerPanel.cs @@ -0,0 +1,94 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle; +using osu.Game.Tests.Visual.Multiplayer; +using osu.Game.Users; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestScenePlayerPanel : MultiplayerTestScene + { + private PlayerPanel panel = null!; + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + AddStep("add panel", () => Child = panel = new PlayerPanel(new MultiplayerRoomUser(1) + { + User = new APIUser + { + Username = @"peppy", + Id = 2, + Colour = "99EB47", + CountryCode = CountryCode.AU, + CoverUrl = @"https://assets.ppy.sh/user-profile-covers/8195163/4a8e2ad5a02a2642b631438cfa6c6bd7e2f9db289be881cb27df18331f64144c.jpeg", + Statistics = new UserStatistics { GlobalRank = null, CountryRank = null } + } + }) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + }); + } + + [Test] + public void TestIncreasePlacement() + { + int rank = 0; + + AddStep("increase placement", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Users = + { + UserDictionary = + { + { + 2, new MatchmakingUser + { + UserId = 2, + Placement = ++rank + } + } + } + } + }).WaitSafely()); + + AddToggleStep("toggle horizontal", h => panel.Horizontal = h); + } + + [Test] + public void TestIncreasePoints() + { + int points = 0; + + AddStep("increase points", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Users = + { + UserDictionary = + { + { + 1, new MatchmakingUser + { + UserId = 1, + Placement = 1, + Points = ++points + } + } + } + } + }).WaitSafely()); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneResultsScreen.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneResultsScreen.cs new file mode 100644 index 0000000000..5fd5b1c906 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneResultsScreen.cs @@ -0,0 +1,98 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Framework.Screens; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Results; +using osu.Game.Tests.Visual.Multiplayer; +using osuTK; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneResultsScreen : MultiplayerTestScene + { + private const int invalid_user_id = 1; + + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + AddStep("add results screen", () => + { + Child = new ScreenStack(new ResultsScreen()) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(0.8f) + }; + }); + + AddStep("join another user", () => MultiplayerClient.AddUser(new MultiplayerRoomUser(invalid_user_id) + { + User = new APIUser + { + Id = invalid_user_id, + Username = "Invalid user" + } + })); + } + + [Test] + public void TestResults() + { + AddStep("set results stage", () => + { + var state = new MatchmakingRoomState + { + CurrentRound = 6, + Stage = MatchmakingStage.Ended + }; + + int localUserId = API.LocalUser.Value.OnlineID; + + // Overall state. + state.Users[localUserId].Placement = 1; + state.Users[localUserId].Points = 8; + state.Users[invalid_user_id].Placement = 2; + state.Users[invalid_user_id].Points = 7; + for (int round = 1; round <= state.CurrentRound; round++) + state.Users[localUserId].Rounds[round].Placement = round; + + // Highest score. + state.Users[localUserId].Rounds[1].TotalScore = 1000; + state.Users[invalid_user_id].Rounds[1].TotalScore = 990; + + // Highest accuracy. + state.Users[localUserId].Rounds[2].Accuracy = 0.9995; + state.Users[invalid_user_id].Rounds[2].Accuracy = 0.5; + + // Highest combo. + state.Users[localUserId].Rounds[3].MaxCombo = 100; + state.Users[invalid_user_id].Rounds[3].MaxCombo = 10; + + // Most bonus score. + state.Users[localUserId].Rounds[4].Statistics[HitResult.LargeBonus] = 50; + state.Users[invalid_user_id].Rounds[4].Statistics[HitResult.LargeBonus] = 25; + + // Smallest score difference. + state.Users[localUserId].Rounds[5].TotalScore = 1000; + state.Users[invalid_user_id].Rounds[5].TotalScore = 999; + + // Largest score difference. + state.Users[localUserId].Rounds[6].TotalScore = 1000; + state.Users[invalid_user_id].Rounds[6].TotalScore = 0; + + MultiplayerClient.ChangeMatchRoomState(state).WaitSafely(); + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneRoomStatisticPanel.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneRoomStatisticPanel.cs new file mode 100644 index 0000000000..494f9b6517 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneRoomStatisticPanel.cs @@ -0,0 +1,23 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Graphics; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Results; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneRoomStatisticPanel : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("add statistic", () => Child = new RoomStatisticPanel("Statistic description", 1) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneRoundResultsScreen.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneRoundResultsScreen.cs new file mode 100644 index 0000000000..e19d228c85 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneRoundResultsScreen.cs @@ -0,0 +1,102 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Graphics; +using osu.Framework.Screens; +using osu.Framework.Utils; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Rooms; +using osu.Game.Rulesets.Scoring; +using osu.Game.Scoring; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.RoundResults; +using osu.Game.Tests.Visual.Multiplayer; +using osuTK; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneRoundResultsScreen : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + setupRequestHandler(); + + AddStep("load screen", () => + { + Child = new ScreenStack(new RoundResultsScreen()) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(0.8f) + }; + }); + } + + private void setupRequestHandler() + { + AddStep("setup request handler", () => + { + Func? defaultRequestHandler = null; + + ((DummyAPIAccess)API).HandleRequest = request => + { + switch (request) + { + case GetBeatmapsRequest getBeatmaps: + getBeatmaps.TriggerSuccess(new GetBeatmapsResponse + { + Beatmaps = getBeatmaps.BeatmapIds.Select(id => new APIBeatmap + { + OnlineID = id, + StarRating = id, + DifficultyName = $"Beatmap {id}", + BeatmapSet = new APIBeatmapSet + { + Title = $"Title {id}", + Artist = $"Artist {id}", + AuthorString = $"Author {id}" + } + }).ToList() + }); + return true; + + case IndexPlaylistScoresRequest index: + var result = new IndexedMultiplayerScores(); + + for (int i = 0; i < 8; ++i) + { + result.Scores.Add(new MultiplayerScore + { + ID = i, + Accuracy = 1 - (float)i / 16, + Position = i + 1, + EndedAt = DateTimeOffset.Now, + Passed = true, + Rank = (ScoreRank)RNG.Next((int)ScoreRank.D, (int)ScoreRank.XH), + MaxCombo = 1000 - i, + TotalScore = (long)(1_000_000 * (1 - (float)i / 16)), + User = new APIUser { Username = $"user {i}" }, + Statistics = new Dictionary() + }); + } + + index.TriggerSuccess(result); + return true; + + default: + return defaultRequestHandler?.Invoke(request) ?? false; + } + }; + }); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneStageBubble.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneStageBubble.cs new file mode 100644 index 0000000000..6349f01f28 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneStageBubble.cs @@ -0,0 +1,49 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Game.Online.Matchmaking; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneStageBubble : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + AddStep("add bubble", () => Child = new StageBubble(MatchmakingStage.RoundWarmupTime, "Next Round") + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Width = 100 + }); + } + + [Test] + public void TestStartStopCountdown() + { + MultiplayerCountdown countdown = null!; + + AddStep("start countdown", () => MultiplayerClient.StartCountdown(countdown = new MatchmakingStageCountdown + { + Stage = MatchmakingStage.RoundWarmupTime, + TimeRemaining = TimeSpan.FromSeconds(5) + }).WaitSafely()); + + AddWaitStep("wait a bit", 10); + + AddStep("stop countdown", () => MultiplayerClient.StopCountdown(countdown).WaitSafely()); + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneStageDisplay.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneStageDisplay.cs new file mode 100644 index 0000000000..49680acd64 --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneStageDisplay.cs @@ -0,0 +1,56 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Game.Online.Matchmaking; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneStageDisplay : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + AddStep("add bubble", () => Child = new StageDisplay + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.X, + Width = 0.5f, + }); + } + + [Test] + public void TestStartCountdown() + { + foreach (var status in Enum.GetValues()) + { + AddStep($"{status}", () => + { + MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState + { + Stage = status + }).WaitSafely(); + + MultiplayerClient.StartCountdown(new MatchmakingStageCountdown + { + Stage = status, + TimeRemaining = TimeSpan.FromSeconds(5) + }).WaitSafely(); + }); + + AddWaitStep("wait a bit", 10); + } + } + } +} diff --git a/osu.Game.Tests/Visual/Matchmaking/TestSceneStageText.cs b/osu.Game.Tests/Visual/Matchmaking/TestSceneStageText.cs new file mode 100644 index 0000000000..0094c7645a --- /dev/null +++ b/osu.Game.Tests/Visual/Matchmaking/TestSceneStageText.cs @@ -0,0 +1,43 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking; +using osu.Game.Tests.Visual.Multiplayer; + +namespace osu.Game.Tests.Visual.Matchmaking +{ + public partial class TestSceneStageText : MultiplayerTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + AddStep("join room", () => JoinRoom(CreateDefaultRoom())); + WaitForJoined(); + + AddStep("create display", () => Child = new StageText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + }); + } + + [TestCase(MatchmakingStage.WaitingForClientsJoin)] + [TestCase(MatchmakingStage.RoundWarmupTime)] + [TestCase(MatchmakingStage.UserBeatmapSelect)] + [TestCase(MatchmakingStage.ServerBeatmapFinalised)] + [TestCase(MatchmakingStage.WaitingForClientsBeatmapDownload)] + [TestCase(MatchmakingStage.GameplayWarmupTime)] + [TestCase(MatchmakingStage.Gameplay)] + [TestCase(MatchmakingStage.ResultsDisplaying)] + [TestCase(MatchmakingStage.Ended)] + public void TestStatus(MatchmakingStage status) + { + AddStep("set status", () => MultiplayerClient.ChangeMatchRoomState(new MatchmakingRoomState { Stage = status }).WaitSafely()); + } + } +} diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs index b9c77e20c0..0a042d189d 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorScreen.cs @@ -20,6 +20,7 @@ using osu.Game.Online.Multiplayer.MatchTypes.TeamVersus; using osu.Game.Online.Rooms; using osu.Game.Rulesets.Osu.Mods; using osu.Game.Rulesets.UI; +using osu.Game.Scoring; using osu.Game.Screens.OnlinePlay.Multiplayer.Spectate; using osu.Game.Screens.Play; using osu.Game.Screens.Play.HUD; @@ -497,6 +498,18 @@ namespace osu.Game.Tests.Visual.Multiplayer b.Storyboard.GetLayer("Background").Add(sprite); }); + [Test] + public void TestFRankDisplay() + { + int[] userIds = getPlayerIds(1); + + start(userIds); + loadSpectateScreen(); + + sendFrames(userIds, 1000); + AddUntilStep("player has F rank", () => this.ChildrenOfType().All(msp => msp.GameplayState.ScoreProcessor.Rank.Value == ScoreRank.F)); + } + private void testLeadIn(Action? applyToBeatmap = null) { start(PLAYER_1_ID); diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomListing.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomListing.cs index 58473f5fa2..7f6fb97e0c 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomListing.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomListing.cs @@ -52,25 +52,25 @@ namespace osu.Game.Tests.Visual.Multiplayer [Test] public void TestBasicListChanges() { - AddStep("add rooms", () => rooms.AddRange(GenerateRooms(5, withSpotlightRooms: true))); + AddStep("add rooms", () => rooms.AddRange(GenerateRooms(5, withPinnedRooms: true))); AddAssert("has 5 rooms", () => container.DrawableRooms.Count == 5); - AddAssert("all spotlights at top", () => container.DrawableRooms - .SkipWhile(r => r.Room.Category == RoomCategory.Spotlight) - .All(r => r.Room.Category == RoomCategory.Normal)); + AddAssert("all pinned at top", () => container.DrawableRooms + .SkipWhile(r => r.Room.Pinned) + .All(r => !r.Room.Pinned)); AddStep("remove first room", () => rooms.RemoveAt(0)); AddAssert("has 4 rooms", () => container.DrawableRooms.Count == 4); AddAssert("first room removed", () => container.DrawableRooms.All(r => r.Room.RoomID != 0)); AddStep("select first room", () => container.DrawableRooms.First().TriggerClick()); - AddAssert("first spotlight selected", () => checkRoomSelected(rooms.First(r => r.Category == RoomCategory.Spotlight))); + AddAssert("first pinned room selected", () => checkRoomSelected(rooms.First(r => r.Pinned))); AddStep("remove last room", () => rooms.RemoveAt(rooms.Count - 1)); - AddAssert("first spotlight still selected", () => checkRoomSelected(rooms.First(r => r.Category == RoomCategory.Spotlight))); + AddAssert("first pinned room selected", () => checkRoomSelected(rooms.First(r => r.Pinned))); - AddStep("remove spotlight room", () => rooms.RemoveAll(r => r.Category == RoomCategory.Spotlight)); + AddStep("remove pinned rooms", () => rooms.RemoveAll(r => r.Pinned)); AddAssert("selection vacated", () => checkRoomSelected(null)); } diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomPanel.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomPanel.cs index 037c5faae3..aa9dddae4d 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomPanel.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneRoomPanel.cs @@ -19,6 +19,7 @@ using osu.Game.Rulesets.Osu; using osu.Game.Screens.OnlinePlay.Lounge; using osu.Game.Screens.OnlinePlay.Lounge.Components; using osu.Game.Screens.OnlinePlay.Multiplayer; +using osu.Game.Screens.OnlinePlay.Playlists; using osu.Game.Tests.Beatmaps; using osuTK; @@ -38,10 +39,11 @@ namespace osu.Game.Tests.Visual.Multiplayer AddStep("create rooms", () => { - PlaylistItem item1 = new PlaylistItem(new TestBeatmap(new OsuRuleset().RulesetInfo) + PlaylistItem item1 = new PlaylistItem(new APIBeatmap { - BeatmapInfo = { StarRating = 2.5 } - }.BeatmapInfo); + OnlineBeatmapSetID = 173612, + OnlineID = 502132, + }); PlaylistItem item2 = new PlaylistItem(new TestBeatmap(new OsuRuleset().RulesetInfo) { @@ -72,6 +74,14 @@ namespace osu.Game.Tests.Visual.Multiplayer Spacing = new Vector2(10), Children = new Drawable[] { + createMultiplayerPanel(new Room + { + Name = "Multiplayer room", + EndDate = DateTimeOffset.Now.AddDays(1), + Type = MatchType.HeadToHead, + Playlist = [item1], + CurrentPlaylistItem = item1 + }), createLoungeRoom(new Room { Name = "Multiplayer room", @@ -81,6 +91,15 @@ namespace osu.Game.Tests.Visual.Multiplayer CurrentPlaylistItem = item1 }), createLoungeRoom(new Room + { + Name = "Pinned room", + Pinned = true, + EndDate = DateTimeOffset.Now.AddDays(1), + Type = MatchType.HeadToHead, + Playlist = [item1], + CurrentPlaylistItem = item1 + }), + createLoungeRoom(new Room { Name = "Private room", Password = "*", @@ -89,6 +108,14 @@ namespace osu.Game.Tests.Visual.Multiplayer Playlist = [item3], CurrentPlaylistItem = item3 }), + createPlaylistRoomPanel(new Room + { + Name = "Playlist room with multiple beatmaps", + Status = RoomStatus.Playing, + EndDate = DateTimeOffset.Now.AddDays(1), + Playlist = [item1, item2], + CurrentPlaylistItem = item1 + }), createLoungeRoom(new Room { Name = "Playlist room with multiple beatmaps", @@ -121,9 +148,11 @@ namespace osu.Game.Tests.Visual.Multiplayer }; }); - AddUntilStep("wait for panel load", () => rooms.Count == 7); - AddUntilStep("correct status text", () => rooms.ChildrenOfType().Count(s => s.Text.ToString().StartsWith("Currently playing", StringComparison.Ordinal)) == 2); - AddUntilStep("correct status text", () => rooms.ChildrenOfType().Count(s => s.Text.ToString().StartsWith("Ready to play", StringComparison.Ordinal)) == 5); + AddUntilStep("wait for panel load", () => rooms.Count, () => Is.EqualTo(10)); + AddUntilStep("\"currently playing\" room count correct", + () => rooms.ChildrenOfType().Count(s => s.Text.ToString().StartsWith("Currently playing", StringComparison.Ordinal)), () => Is.EqualTo(4)); + AddUntilStep("\"ready to play\" room count correct", () => rooms.ChildrenOfType().Count(s => s.Text.ToString().StartsWith("Ready to play", StringComparison.Ordinal)), + () => Is.EqualTo(5)); } [Test] @@ -140,13 +169,13 @@ namespace osu.Game.Tests.Visual.Multiplayer AddUntilStep("wait for panel load", () => panel.ChildrenOfType().Any()); - AddAssert("password icon hidden", () => Precision.AlmostEquals(0, panel.ChildrenOfType().Single().Alpha)); + AddAssert("password icon hidden", () => Precision.AlmostEquals(0, panel.ChildrenOfType().First().Alpha)); AddStep("set password", () => room.Password = "password"); - AddAssert("password icon visible", () => Precision.AlmostEquals(1, panel.ChildrenOfType().Single().Alpha)); + AddAssert("password icon visible", () => Precision.AlmostEquals(1, panel.ChildrenOfType().First().Alpha)); AddStep("unset password", () => room.Password = string.Empty); - AddAssert("password icon hidden", () => Precision.AlmostEquals(0, panel.ChildrenOfType().Single().Alpha)); + AddAssert("password icon hidden", () => Precision.AlmostEquals(0, panel.ChildrenOfType().First().Alpha)); } [Test] @@ -198,7 +227,8 @@ namespace osu.Game.Tests.Visual.Multiplayer { new MultiplayerRoomPanel(new Room { - Name = "This room has a very very long title enough to make the external link button reach the participants list on the right side unless the test window is very wide, at which point I don't know, hi.", + Name = + "This room has a very very long title enough to make the external link button reach the participants list on the right side unless the test window is very wide, at which point I don't know, hi.", QueueMode = QueueMode.HostOnly, Type = MatchType.HeadToHead, RoomID = 1337, @@ -222,7 +252,8 @@ namespace osu.Game.Tests.Visual.Multiplayer { new MultiplayerRoomPanel(room = new Room { - Name = "This room has a very very long title enough to make the external link button reach the participants list on the right side unless the test window is very wide, at which point I don't know, hi.", + Name = + "This room has a very very long title enough to make the external link button reach the participants list on the right side unless the test window is very wide, at which point I don't know, hi.", QueueMode = QueueMode.HostOnly, Type = MatchType.HeadToHead, }), @@ -234,6 +265,41 @@ namespace osu.Game.Tests.Visual.Multiplayer AddStep("clear room ID", () => room.RoomID = null); } + private RoomPanel createPlaylistRoomPanel(Room room) + { + room.Host ??= new APIUser { Username = "peppy", Id = 2 }; + + if (room.RecentParticipants.Count == 0) + { + room.RecentParticipants = Enumerable.Range(0, 20).Select(i => new APIUser + { + Id = i, + Username = $"User {i}" + }).ToArray(); + } + + return new PlaylistsRoomPanel(room) + { + SelectedItem = new Bindable(room.CurrentPlaylistItem), + }; + } + + private RoomPanel createMultiplayerPanel(Room room) + { + room.Host ??= new APIUser { Username = "peppy", Id = 2 }; + + if (room.RecentParticipants.Count == 0) + { + room.RecentParticipants = Enumerable.Range(0, 20).Select(i => new APIUser + { + Id = i, + Username = $"User {i}" + }).ToArray(); + } + + return new MultiplayerRoomPanel(room); + } + private RoomPanel createLoungeRoom(Room room) { room.Host ??= new APIUser { Username = "peppy", Id = 2 }; diff --git a/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs b/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs index d5f718c9f6..4c395dd17e 100644 --- a/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs +++ b/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs @@ -472,7 +472,7 @@ namespace osu.Game.Tests.Visual.Navigation { AddUntilStep($"config value is {configValue}", () => getConfigManager().Get(ManiaRulesetSetting.ScrollSpeed), () => Is.EqualTo(configValue)); AddUntilStep($"gameplay value is {gameplayValue}", () => this.ChildrenOfType().Single().TargetTimeRange, - () => Is.EqualTo(DrawableManiaRuleset.ComputeScrollTime(gameplayValue, 8.0, 11485.0))); + () => Is.EqualTo(DrawableManiaRuleset.ComputeScrollTime(gameplayValue, 2000, 1.0 / 60.0))); } ManiaRulesetConfigManager getConfigManager() => ((ManiaRulesetConfigManager)Game.Dependencies.Get().GetConfigFor(new ManiaRuleset())!); diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneTopLocalRank.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneTopLocalRank.cs index 79baae53e8..93b9efed6a 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneTopLocalRank.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneTopLocalRank.cs @@ -10,6 +10,8 @@ using osu.Framework.Graphics; using osu.Framework.Platform; using osu.Framework.Testing; using osu.Game.Beatmaps; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets; using osu.Game.Scoring; using osu.Game.Screens.Select.Carousel; @@ -161,5 +163,53 @@ namespace osu.Game.Tests.Visual.SongSelect AddUntilStep("SS rank displayed", () => topLocalRank.DisplayedRank == ScoreRank.X); } + + [Test] + public void TestGuestScore() + { + AddStep("Add score for guest user", () => + { + var testScoreInfo = TestResources.CreateTestScoreInfo(importedBeatmap); + + testScoreInfo.User = new GuestUser(); + testScoreInfo.Rank = ScoreRank.B; + + scoreManager.Import(testScoreInfo); + }); + + AddUntilStep("B rank displayed", () => topLocalRank.DisplayedRank, () => Is.EqualTo(ScoreRank.B)); + } + + [Test] + public void TestUnknownUserScore() + { + AddStep("Add score for unknown user", () => + { + var testScoreInfo = TestResources.CreateTestScoreInfo(importedBeatmap); + + testScoreInfo.User = new APIUser { Username = "AAA", }; + testScoreInfo.Rank = ScoreRank.S; + + scoreManager.Import(testScoreInfo); + }); + + AddUntilStep("S rank displayed", () => topLocalRank.DisplayedRank, () => Is.EqualTo(ScoreRank.S)); + } + + [Test] + public void TestAnotherUserScore() + { + AddStep("Add score for not-current user", () => + { + var testScoreInfo = TestResources.CreateTestScoreInfo(importedBeatmap); + + testScoreInfo.User = new APIUser { Username = "notme", Id = 43, }; + testScoreInfo.Rank = ScoreRank.S; + + scoreManager.Import(testScoreInfo); + }); + + AddUntilStep("No rank displayed", () => topLocalRank.DisplayedRank, () => Is.Null); + } } } diff --git a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselFilterGroupingTest.cs b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselFilterGroupingTest.cs index 32a7b89424..5f3cd26d55 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselFilterGroupingTest.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselFilterGroupingTest.cs @@ -43,7 +43,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 var results = await runGrouping(GroupMode.None, beatmapSets); Assert.That(results.Select(r => r.Model).OfType().Select(groupedSet => groupedSet.BeatmapSet), Is.EquivalentTo(beatmapSets)); - Assert.That(results.Select(r => r.Model).OfType(), Is.EquivalentTo(allBeatmaps)); + Assert.That(results.Select(r => r.Model).OfType().Select(groupedBeatmap => groupedBeatmap.Beatmap), Is.EquivalentTo(allBeatmaps)); assertTotal(results, beatmapSets.Count + allBeatmaps.Length); } @@ -391,7 +391,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 var groupModel = (GroupDefinition)groupItem.Model; Assert.That(groupModel.Title, Is.EqualTo(expectedTitle)); - Assert.That(itemsInGroup.Select(i => i.Model).OfType(), Is.EquivalentTo(expectedBeatmaps)); + Assert.That(itemsInGroup.Select(i => i.Model).OfType().Select(gb => gb.Beatmap), Is.EquivalentTo(expectedBeatmaps)); totalItems += itemsInGroup.Count() + 1; } diff --git a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs index f18e1e9b52..02c017f570 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs @@ -16,11 +16,13 @@ using osu.Framework.Graphics.Shapes; using osu.Framework.Testing; using osu.Framework.Utils; using osu.Game.Beatmaps; +using osu.Game.Collections; using osu.Game.Database; using osu.Game.Graphics; using osu.Game.Graphics.Carousel; using osu.Game.Graphics.Containers; using osu.Game.Overlays; +using osu.Game.Scoring; using osu.Game.Screens.Select; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; @@ -70,6 +72,12 @@ namespace osu.Game.Tests.Visual.SongSelectV2 Scheduler.AddDelayed(updateStats, 100, true); } + [BackgroundDependencyLoader] + private void load() + { + Dependencies.Cache(Realm); + } + protected void CreateCarousel() { AddStep("create components", () => @@ -115,13 +123,15 @@ namespace osu.Game.Tests.Visual.SongSelectV2 NewItemsPresented = _ => NewItemsPresentedInvocationCount++, RequestSelection = b => { - BeatmapRequestedSelections.Push(b); - Carousel.CurrentSelection = b; + BeatmapRequestedSelections.Push(b.Beatmap); + Carousel.CurrentGroupedBeatmap = b; }, - RequestRecommendedSelection = beatmaps => + RequestRecommendedSelection = groupedBeatmaps => { - BeatmapSetRequestedSelections.Push(beatmaps.First().BeatmapSet!); - Carousel.CurrentSelection = BeatmapRecommendationFunction?.Invoke(beatmaps) ?? beatmaps.First(); + var recommendedBeatmap = BeatmapRecommendationFunction?.Invoke(groupedBeatmaps.Select(gb => gb.Beatmap)) ?? groupedBeatmaps.First().Beatmap; + var recommendedGroupedBeatmap = groupedBeatmaps.First(gb => gb.Beatmap.Equals(recommendedBeatmap)); + BeatmapSetRequestedSelections.Push(recommendedBeatmap.BeatmapSet!); + Carousel.CurrentGroupedBeatmap = recommendedGroupedBeatmap; }, BleedTop = 50, BleedBottom = 50, @@ -215,8 +225,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 protected void Select() => AddStep("select", () => InputManager.Key(Key.Enter)); - protected void CheckNoSelection() => AddAssert("has no selection", () => Carousel.CurrentSelection, () => Is.Null); - protected void CheckHasSelection() => AddAssert("has selection", () => Carousel.CurrentSelection, () => Is.Not.Null); + protected void CheckNoSelection() => AddAssert("has no selection", () => Carousel.CurrentGroupedBeatmap, () => Is.Null); + protected void CheckHasSelection() => AddAssert("has selection", () => Carousel.CurrentGroupedBeatmap, () => Is.Not.Null); protected void CheckRequestPresentCount(int expected) => AddAssert($"check present count is {expected}", () => Carousel.RequestPresentBeatmapCount, () => Is.EqualTo(expected)); @@ -281,8 +291,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 // offset by one because the group itself is included in the items list. CarouselItem item = groupingFilter.GroupItems[groupDefinition].ElementAt(panel + 1); - return (Carousel.CurrentSelection as BeatmapInfo)? - .Equals(item.Model as BeatmapInfo) == true; + return Carousel.CurrentGroupedBeatmap?.Equals(item.Model as GroupedBeatmap) == true; }); } @@ -291,12 +300,12 @@ namespace osu.Game.Tests.Visual.SongSelectV2 if (diff != null) { AddUntilStep($"selected is set{set} diff{diff.Value}", - () => (Carousel.CurrentSelection as BeatmapInfo), + () => Carousel.CurrentBeatmap, () => Is.EqualTo(BeatmapSets[set].Beatmaps[diff.Value])); } else { - AddUntilStep($"selected is set{set}", () => BeatmapSets[set].Beatmaps.Contains(Carousel.CurrentSelection)); + AddUntilStep($"selected is set{set}", () => BeatmapSets[set].Beatmaps.Contains(Carousel.CurrentBeatmap!)); } } @@ -415,7 +424,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 tracked: {Carousel.ItemsTracked} displayable: {Carousel.DisplayableItems} displayed: {Carousel.VisibleItems} - selected: {Carousel.CurrentSelection} + selected: {Carousel.CurrentGroupedBeatmap} """); void createHeader(string text) @@ -437,12 +446,15 @@ namespace osu.Game.Tests.Visual.SongSelectV2 public IEnumerable PostFilterBeatmaps = null!; - public BeatmapInfo? SelectedBeatmapInfo => CurrentSelection as BeatmapInfo; + public BeatmapInfo? SelectedBeatmapInfo => (CurrentSelection as GroupedBeatmap)?.Beatmap; public BeatmapSetInfo? SelectedBeatmapSet => SelectedBeatmapInfo?.BeatmapSet; public new GroupedBeatmapSet? ExpandedBeatmapSet => base.ExpandedBeatmapSet; public new GroupDefinition? ExpandedGroup => base.ExpandedGroup; + public Func> AllCollections { get; set; } = () => []; + public Func> BeatmapInfoGuidToTopRankMapping { get; set; } = _ => new Dictionary(); + public TestBeatmapCarousel() { RequestPresentBeatmap = _ => RequestPresentBeatmapCount++; @@ -461,9 +473,12 @@ namespace osu.Game.Tests.Visual.SongSelectV2 if (FilterDelay != 0) await Task.Delay(FilterDelay).ConfigureAwait(true); - PostFilterBeatmaps = items.Select(i => i.Model).OfType(); + PostFilterBeatmaps = items.Select(i => i.Model).OfType().Select(i => i.Beatmap); return items; } + + protected override List GetAllCollections() => AllCollections.Invoke(); + protected override Dictionary GetBeatmapInfoGuidToTopRankMapping(FilterCriteria criteria) => BeatmapInfoGuidToTopRankMapping.Invoke(criteria); } } } diff --git a/osu.Game.Tests/Visual/SongSelectV2/SongSelectTestScene.cs b/osu.Game.Tests/Visual/SongSelectV2/SongSelectTestScene.cs index b1d1ed8c61..e3b02e5905 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/SongSelectTestScene.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/SongSelectTestScene.cs @@ -22,8 +22,6 @@ using osu.Game.Overlays.Toolbar; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Scoring; -using osu.Game.Screens; -using osu.Game.Screens.Footer; using osu.Game.Screens.Menu; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; @@ -43,9 +41,6 @@ namespace osu.Game.Tests.Visual.SongSelectV2 protected Screens.SelectV2.SongSelect SongSelect { get; private set; } = null!; protected BeatmapCarousel Carousel => SongSelect.ChildrenOfType().Single(); - [Cached] - protected readonly ScreenFooter Footer; - [Cached] private readonly OsuLogo logo; @@ -72,10 +67,6 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { State = { Value = Visibility.Visible }, }, - Footer = new ScreenFooter - { - BackButtonPressed = () => Stack.CurrentScreen.Exit(), - }, logo = new OsuLogo { Alpha = 0f, @@ -111,14 +102,6 @@ namespace osu.Game.Tests.Visual.SongSelectV2 Add(beatmapStore); } - protected override void LoadComplete() - { - base.LoadComplete(); - - Stack.ScreenPushed += updateFooter; - Stack.ScreenExited += updateFooter; - } - public override void SetUpSteps() { base.SetUpSteps(); @@ -207,38 +190,5 @@ namespace osu.Game.Tests.Visual.SongSelectV2 } protected void WaitForSuspension() => AddUntilStep("wait for not current", () => !SongSelect.AsNonNull().IsCurrentScreen()); - - private void updateFooter(IScreen? _, IScreen? newScreen) - { - if (newScreen is OsuScreen osuScreen && osuScreen.ShowFooter) - { - Footer.Show(); - - if (osuScreen.IsLoaded) - updateFooterButtons(); - else - { - // ensure the current buttons are immediately disabled on screen change (so they can't be pressed). - Footer.SetButtons(Array.Empty()); - - osuScreen.OnLoadComplete += _ => updateFooterButtons(); - } - - void updateFooterButtons() - { - var buttons = osuScreen.CreateFooterButtons(); - - osuScreen.LoadComponentsAgainstScreenDependencies(buttons); - - Footer.SetButtons(buttons); - Footer.Show(); - } - } - else - { - Footer.Hide(); - Footer.SetButtons(Array.Empty()); - } - } } } diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs index 521221f0c7..c34077889d 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs @@ -4,7 +4,6 @@ using System.Linq; using NUnit.Framework; using osu.Framework.Testing; -using osu.Game.Beatmaps; using osu.Game.Graphics.Carousel; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; @@ -81,7 +80,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 CheckHasSelection(); AddAssert("drawable selection non-null", () => selection, () => Is.Not.Null); - AddAssert("drawable selection matches carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentSelection)); + AddAssert("drawable selection matches carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); RemoveAllBeatmaps(); AddUntilStep("no drawable selection", GetSelectedPanel, () => Is.Null); @@ -92,9 +91,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 CheckHasSelection(); AddAssert("no drawable selection", GetSelectedPanel, () => Is.Null); - AddStep("add previous selection", () => BeatmapSets.Add(((BeatmapInfo)selection!).BeatmapSet!)); + AddStep("add previous selection", () => BeatmapSets.Add(((GroupedBeatmap)selection!).Beatmap.BeatmapSet!)); - AddAssert("selection matches original carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentSelection)); + AddAssert("selection matches original carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); AddUntilStep("drawable selection restored", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(selection)); AddAssert("carousel item is visible", () => GetSelectedPanel()?.Item?.IsVisible, () => Is.True); @@ -132,7 +131,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 WaitForBeatmapSelection(0, 1); // Expanding a group will move keyboard selection to the selected beatmap if contained. AddAssert("keyboard selected panel is expanded", () => groupPanel?.Expanded.Value, () => Is.True); - AddAssert("keyboard selected panel is beatmap", () => GetKeyboardSelectedPanel()?.Item?.Model, Is.TypeOf); + AddAssert("keyboard selected panel is beatmap", () => GetKeyboardSelectedPanel()?.Item?.Model, Is.TypeOf); } [Test] diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselCollectionGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselCollectionGrouping.cs new file mode 100644 index 0000000000..e410d66ce8 --- /dev/null +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselCollectionGrouping.cs @@ -0,0 +1,66 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using osu.Framework.Testing; +using osu.Game.Collections; +using osu.Game.Screens.Select.Filter; + +namespace osu.Game.Tests.Visual.SongSelectV2 +{ + [TestFixture] + public partial class TestSceneBeatmapCarouselCollectionGrouping : BeatmapCarouselTestScene + { + [SetUpSteps] + public void SetUpSteps() + { + RemoveAllBeatmaps(); + CreateCarousel(); + + AddBeatmaps(10, 3); + + AddStep("set up collections", () => + { + List collections = + [ + new BeatmapCollection("collection one", [ + ..BeatmapSets[0].Beatmaps.Select(b => b.MD5Hash), + ..BeatmapSets[1].Beatmaps.Select(b => b.MD5Hash), + ..BeatmapSets[2].Beatmaps.Select(b => b.MD5Hash), + BeatmapSets[5].Beatmaps[1].MD5Hash, + BeatmapSets[8].Beatmaps[0].MD5Hash, + ]), + new BeatmapCollection("collection two", [ + BeatmapSets[0].Beatmaps[0].MD5Hash, + ..BeatmapSets[1].Beatmaps.Select(b => b.MD5Hash), + ..BeatmapSets[2].Beatmaps.Select(b => b.MD5Hash), + BeatmapSets[6].Beatmaps[2].MD5Hash, + BeatmapSets[8].Beatmaps[2].MD5Hash, + ]), + new BeatmapCollection("collection one copy", [ + ..BeatmapSets[0].Beatmaps.Select(b => b.MD5Hash), + ..BeatmapSets[1].Beatmaps.Select(b => b.MD5Hash), + ..BeatmapSets[2].Beatmaps.Select(b => b.MD5Hash), + BeatmapSets[5].Beatmaps[1].MD5Hash, + BeatmapSets[8].Beatmaps[0].MD5Hash, + ]), + ]; + Carousel.AllCollections = () => collections; + }); + + SortAndGroupBy(SortMode.Title, GroupMode.Collections); + WaitForDrawablePanels(); + } + + [Test] + public void TestMultipleCopiesOfBeatmapsPresent() + { + CheckDisplayedGroupsCount(4); // one for each collection, plus no collections + // all three collections have beatmaps from 5 beatmap sets + // 7 beatmap sets have beatmaps which belong to no collection + CheckDisplayedBeatmapSetsCount(5 + 5 + 5 + 7); + } + } +} diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs index 2ab0eda172..58ecfcbf3b 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs @@ -4,7 +4,6 @@ using System.Linq; using NUnit.Framework; using osu.Framework.Testing; -using osu.Game.Beatmaps; using osu.Game.Graphics.Carousel; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; @@ -71,7 +70,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 CheckHasSelection(); AddAssert("drawable selection non-null", () => selection, () => Is.Not.Null); - AddAssert("drawable selection matches carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentSelection)); + AddAssert("drawable selection matches carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); RemoveAllBeatmaps(); AddUntilStep("no drawable selection", GetSelectedPanel, () => Is.Null); @@ -82,9 +81,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 CheckHasSelection(); AddAssert("no drawable selection", GetSelectedPanel, () => Is.Null); - AddStep("add previous selection", () => BeatmapSets.Add(((BeatmapInfo)selection!).BeatmapSet!)); + AddStep("add previous selection", () => BeatmapSets.Add(((GroupedBeatmap)selection!).Beatmap.BeatmapSet!)); - AddAssert("selection matches original carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentSelection)); + AddAssert("selection matches original carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); AddUntilStep("drawable selection restored", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(selection)); AddAssert("carousel item is visible", () => GetSelectedPanel()?.Item?.IsVisible, () => Is.True); @@ -121,7 +120,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 WaitForBeatmapSelection(0, 0); // Expanding a group will move keyboard selection to the selected beatmap if contained. AddAssert("keyboard selected panel is expanded", () => groupPanel?.Expanded.Value, () => Is.True); - AddAssert("keyboard selected panel is beatmap", () => GetKeyboardSelectedPanel()?.Item?.Model, Is.TypeOf); + AddAssert("keyboard selected panel is beatmap", () => GetKeyboardSelectedPanel()?.Item?.Model, Is.TypeOf); } [Test] @@ -199,7 +198,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 } private void checkBeatmapIsKeyboardSelected() => - AddUntilStep("check keyboard selected group is beatmap", () => GetKeyboardSelectedPanel()?.Item?.Model, () => Is.EqualTo(Carousel.CurrentSelection)); + AddUntilStep("check keyboard selected group is beatmap", () => GetKeyboardSelectedPanel()?.Item?.Model, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); private void checkGroupKeyboardSelected(int index) => AddUntilStep($"check keyboard selected group is {index}", () => GetKeyboardSelectedPanel()?.Item?.Model, () => { diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselFiltering.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselFiltering.cs index 687c4c23be..b1bd9fd3ed 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselFiltering.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselFiltering.cs @@ -130,14 +130,14 @@ namespace osu.Game.Tests.Visual.SongSelectV2 SelectNextPanel(); Select(); - AddStep("record selection", () => selectedID = ((BeatmapInfo)Carousel.CurrentSelection!).ID); + AddStep("record selection", () => selectedID = Carousel.CurrentBeatmap!.ID); for (int i = 0; i < 5; i++) { ApplyToFilterAndWaitForFilter("filter all", c => c.SearchText = Guid.NewGuid().ToString()); - AddAssert("selection not changed", () => ((BeatmapInfo)Carousel.CurrentSelection!).ID == selectedID); + AddAssert("selection not changed", () => Carousel.CurrentBeatmap!.ID == selectedID); ApplyToFilterAndWaitForFilter("remove filter", c => c.SearchText = string.Empty); - AddAssert("selection not changed", () => ((BeatmapInfo)Carousel.CurrentSelection!).ID == selectedID); + AddAssert("selection not changed", () => Carousel.CurrentBeatmap!.ID == selectedID); } } @@ -177,14 +177,14 @@ namespace osu.Game.Tests.Visual.SongSelectV2 SelectNextSet(); - AddStep("record selection", () => selectedID = ((BeatmapInfo)Carousel.CurrentSelection!).ID); + AddStep("record selection", () => selectedID = Carousel.CurrentBeatmap!.ID); for (int i = 0; i < 5; i++) { ApplyToFilterAndWaitForFilter("filter all", c => c.SearchText = Guid.NewGuid().ToString()); - AddAssert("selection not changed", () => ((BeatmapInfo)Carousel.CurrentSelection!).ID == selectedID); + AddAssert("selection not changed", () => Carousel.CurrentBeatmap!.ID == selectedID); ApplyToFilterAndWaitForFilter("remove filter", c => c.SearchText = string.Empty); - AddAssert("selection not changed", () => ((BeatmapInfo)Carousel.CurrentSelection!).ID == selectedID); + AddAssert("selection not changed", () => Carousel.CurrentBeatmap!.ID == selectedID); } } @@ -200,14 +200,14 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { int diff = i; - AddStep($"select diff {diff}", () => Carousel.CurrentSelection = chosenBeatmap = BeatmapSets[20].Beatmaps[diff]); - AddUntilStep("selection changed", () => Carousel.CurrentSelection, () => Is.EqualTo(chosenBeatmap)); + AddStep($"select diff {diff}", () => Carousel.CurrentBeatmap = chosenBeatmap = BeatmapSets[20].Beatmaps[diff]); + AddUntilStep("selection changed", () => Carousel.CurrentBeatmap, () => Is.EqualTo(chosenBeatmap)); SortBy(SortMode.Difficulty); - AddAssert("selection retained", () => Carousel.CurrentSelection, () => Is.EqualTo(chosenBeatmap)); + AddAssert("selection retained", () => Carousel.CurrentBeatmap, () => Is.EqualTo(chosenBeatmap)); SortBy(SortMode.Title); - AddAssert("selection retained", () => Carousel.CurrentSelection, () => Is.EqualTo(chosenBeatmap)); + AddAssert("selection retained", () => Carousel.CurrentBeatmap, () => Is.EqualTo(chosenBeatmap)); } } @@ -239,7 +239,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 var visibleBeatmapPanels = GetVisiblePanels(); return visibleBeatmapPanels.Count() == 1 - && visibleBeatmapPanels.Count(p => ((BeatmapInfo)p.Item!.Model).Ruleset.OnlineID == 0) == 1; + && visibleBeatmapPanels.Count(p => ((GroupedBeatmap)p.Item!.Model).Beatmap.Ruleset.OnlineID == 0) == 1; }); ApplyToFilterAndWaitForFilter("filter to taiko", c => c.Ruleset = rulesets.AvailableRulesets.ElementAt(1)); @@ -249,8 +249,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 var visibleBeatmapPanels = GetVisiblePanels(); return visibleBeatmapPanels.Count() == 2 - && visibleBeatmapPanels.Count(p => ((BeatmapInfo)p.Item!.Model).Ruleset.OnlineID == 0) == 1 - && visibleBeatmapPanels.Count(p => ((BeatmapInfo)p.Item!.Model).Ruleset.OnlineID == 1) == 1; + && visibleBeatmapPanels.Count(p => ((GroupedBeatmap)p.Item!.Model).Beatmap.Ruleset.OnlineID == 0) == 1 + && visibleBeatmapPanels.Count(p => ((GroupedBeatmap)p.Item!.Model).Beatmap.Ruleset.OnlineID == 1) == 1; }); ApplyToFilterAndWaitForFilter("filter to catch", c => c.Ruleset = rulesets.AvailableRulesets.ElementAt(2)); @@ -260,8 +260,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 var visibleBeatmapPanels = GetVisiblePanels(); return visibleBeatmapPanels.Count() == 2 - && visibleBeatmapPanels.Count(p => ((BeatmapInfo)p.Item!.Model).Ruleset.OnlineID == 0) == 1 - && visibleBeatmapPanels.Count(p => ((BeatmapInfo)p.Item!.Model).Ruleset.OnlineID == 2) == 1; + && visibleBeatmapPanels.Count(p => ((GroupedBeatmap)p.Item!.Model).Beatmap.Ruleset.OnlineID == 0) == 1 + && visibleBeatmapPanels.Count(p => ((GroupedBeatmap)p.Item!.Model).Beatmap.Ruleset.OnlineID == 2) == 1; }); } diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs index 648f531a6e..c839a28055 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs @@ -4,7 +4,6 @@ using System.Linq; using NUnit.Framework; using osu.Framework.Testing; -using osu.Game.Beatmaps; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; using osuTK; @@ -90,7 +89,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 CheckHasSelection(); AddAssert("drawable selection non-null", () => selection, () => Is.Not.Null); - AddAssert("drawable selection matches carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentSelection)); + AddAssert("drawable selection matches carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); RemoveAllBeatmaps(); AddUntilStep("no drawable selection", GetSelectedPanel, () => Is.Null); @@ -101,9 +100,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 CheckHasSelection(); AddAssert("no drawable selection", GetSelectedPanel, () => Is.Null); - AddStep("add previous selection", () => BeatmapSets.Add(((BeatmapInfo)selection!).BeatmapSet!)); + AddStep("add previous selection", () => BeatmapSets.Add(((GroupedBeatmap)selection!).Beatmap.BeatmapSet!)); - AddAssert("selection matches original carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentSelection)); + AddAssert("selection matches original carousel selection", () => selection, () => Is.EqualTo(Carousel.CurrentGroupedBeatmap)); AddUntilStep("drawable selection restored", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(selection)); AddAssert("carousel item is visible", () => GetSelectedPanel()?.Item?.IsVisible, () => Is.True); } @@ -390,15 +389,15 @@ namespace osu.Game.Tests.Visual.SongSelectV2 private void checkSelectionIterating(bool isIterating) { - object? selection = null; + GroupedBeatmap? selection = null; for (int i = 0; i < 3; i++) { - AddStep("store selection", () => selection = Carousel.CurrentSelection); + AddStep("store selection", () => selection = Carousel.CurrentGroupedBeatmap); if (isIterating) - AddUntilStep("selection changed", () => Carousel.CurrentSelection != selection); + AddUntilStep("selection changed", () => Carousel.CurrentGroupedBeatmap != selection); else - AddUntilStep("selection not changed", () => Carousel.CurrentSelection == selection); + AddUntilStep("selection not changed", () => Carousel.CurrentGroupedBeatmap == selection); } } } diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselRandom.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselRandom.cs index ed694c9e3d..ce68d587c8 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselRandom.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselRandom.cs @@ -50,12 +50,12 @@ namespace osu.Game.Tests.Visual.SongSelectV2 nextRandom(); ensureRandomDidNotRepeat(); - AddStep("store selection", () => originalSelected = (BeatmapInfo)Carousel.CurrentSelection!); + AddStep("store selection", () => originalSelected = Carousel.CurrentBeatmap!); SortAndGroupBy(SortMode.Artist, GroupMode.Difficulty); WaitForFiltering(); - AddAssert("selection not changed", () => Carousel.CurrentSelection, () => Is.EqualTo(originalSelected)); + AddAssert("selection not changed", () => Carousel.CurrentBeatmap, () => Is.EqualTo(originalSelected)); storeExpandedGroup(); @@ -247,18 +247,42 @@ namespace osu.Game.Tests.Visual.SongSelectV2 } } + [Test] + public void TestRewindOverGroupingModeChange() + { + const int local_set_count = 3; + + SortAndGroupBy(SortMode.Artist, GroupMode.Artist); + AddBeatmaps(local_set_count, 3); + WaitForDrawablePanels(); + + SelectNextSet(); + + for (int i = 0; i < local_set_count; i++) + nextRandom(); + + SortAndGroupBy(SortMode.Title, GroupMode.LastPlayed); + WaitForDrawablePanels(); + + for (int i = 0; i < local_set_count; i++) + { + prevRandomSet(); + checkRewindCorrectSet(); + } + } + [Test] public void TestRandomThenRewindSameFrame() { AddBeatmaps(10, 3, true); WaitForDrawablePanels(); - BeatmapInfo? originalSelected = null; + GroupedBeatmap? originalSelected = null; nextRandom(); CheckHasSelection(); - AddStep("store selection", () => originalSelected = (BeatmapInfo)Carousel.CurrentSelection!); + AddStep("store selection", () => originalSelected = Carousel.CurrentGroupedBeatmap!); AddStep("random then rewind", () => { @@ -266,7 +290,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 Carousel.PreviousRandom(); }); - AddAssert("selection not changed", () => Carousel.CurrentSelection, () => Is.EqualTo(originalSelected)); + AddAssert("selection not changed", () => Carousel.CurrentGroupedBeatmap, () => Is.EqualTo(originalSelected)); } [Test] @@ -275,26 +299,26 @@ namespace osu.Game.Tests.Visual.SongSelectV2 AddBeatmaps(10, 3, true); WaitForDrawablePanels(); - BeatmapInfo? originalSelected = null; - BeatmapInfo? postRandomSelection = null; + GroupedBeatmap? originalSelected = null; + GroupedBeatmap? postRandomSelection = null; nextRandom(); CheckHasSelection(); - AddStep("store selection", () => originalSelected = (BeatmapInfo)Carousel.CurrentSelection!); + AddStep("store selection", () => originalSelected = Carousel.CurrentGroupedBeatmap!); nextRandom(); - AddStep("store selection", () => postRandomSelection = (BeatmapInfo)Carousel.CurrentSelection!); + AddStep("store selection", () => postRandomSelection = Carousel.CurrentGroupedBeatmap!); AddAssert("selection changed", () => originalSelected, () => Is.Not.SameAs(postRandomSelection)); - AddStep("delete previous selection beatmaps", () => BeatmapSets.Remove(originalSelected!.BeatmapSet!)); + AddStep("delete previous selection beatmaps", () => BeatmapSets.Remove(originalSelected!.Beatmap.BeatmapSet!)); WaitForFiltering(); - AddAssert("selection not changed", () => Carousel.CurrentSelection, () => Is.EqualTo(postRandomSelection)); + AddAssert("selection not changed", () => Carousel.CurrentGroupedBeatmap, () => Is.EqualTo(postRandomSelection)); prevRandomSet(); - AddAssert("selection not changed", () => Carousel.CurrentSelection, () => Is.EqualTo(postRandomSelection)); + AddAssert("selection not changed", () => Carousel.CurrentGroupedBeatmap, () => Is.EqualTo(postRandomSelection)); } private void nextRandom() => diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs index 29aa976fe3..c1cee4e398 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs @@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { Quad positionBefore = default; - AddStep("select middle beatmap", () => Carousel.CurrentSelection = BeatmapSets.ElementAt(BeatmapSets.Count - 2).Beatmaps.First()); + AddStep("select middle beatmap", () => Carousel.CurrentGroupedBeatmap = new GroupedBeatmap(null, BeatmapSets.ElementAt(BeatmapSets.Count - 2).Beatmaps.First())); WaitForScrolling(); @@ -45,7 +45,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { Quad positionBefore = default; - AddStep("select middle beatmap", () => Carousel.CurrentSelection = BeatmapSets.ElementAt(BeatmapSets.Count - 2).Beatmaps.First()); + AddStep("select middle beatmap", () => Carousel.CurrentGroupedBeatmap = new GroupedBeatmap(null, BeatmapSets.ElementAt(BeatmapSets.Count - 2).Beatmaps.First())); WaitForScrolling(); AddStep("override scroll with user scroll", () => @@ -71,7 +71,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 AddStep("scroll to end", () => Scroll.ScrollToEnd(false)); - AddStep("select last beatmap", () => Carousel.CurrentSelection = BeatmapSets.Last().Beatmaps.Last()); + AddStep("select last beatmap", () => Carousel.CurrentGroupedBeatmap = new GroupedBeatmap(null, BeatmapSets.Last().Beatmaps.Last())); WaitForScrolling(); @@ -88,7 +88,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { Quad positionBefore = default; - AddStep("select first beatmap", () => Carousel.CurrentSelection = BeatmapSets.First().Beatmaps.First()); + AddStep("select first beatmap", () => Carousel.CurrentGroupedBeatmap = new GroupedBeatmap(null, BeatmapSets.First().Beatmaps.First())); WaitForScrolling(); @@ -108,7 +108,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { Quad positionBefore = default; - AddStep("select first beatmap", () => Carousel.CurrentSelection = BeatmapSets.First().Beatmaps.First()); + AddStep("select first beatmap", () => Carousel.CurrentGroupedBeatmap = new GroupedBeatmap(null, BeatmapSets.First().Beatmaps.First())); WaitForScrolling(); AddStep("override scroll with user scroll", () => diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselUpdateHandling.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselUpdateHandling.cs index 3638c8eeec..17f328b549 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselUpdateHandling.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselUpdateHandling.cs @@ -8,6 +8,7 @@ using NUnit.Framework; using osu.Framework.Testing; using osu.Framework.Utils; using osu.Game.Beatmaps; +using osu.Game.Database; using osu.Game.Extensions; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; @@ -30,7 +31,12 @@ namespace osu.Game.Tests.Visual.SongSelectV2 RemoveAllBeatmaps(); CreateCarousel(); WaitForFiltering(); - AddBeatmaps(1, 3); + AddStep("add beatmap", () => + { + var beatmap = CreateTestBeatmapSetInfo(3, false); + Realm.Write(r => r.Add(beatmap, update: true)); + BeatmapSets.Add(beatmap.Detach()); + }); WaitForFiltering(); AddStep("generate and add test beatmap", () => { @@ -44,7 +50,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 foreach (var b in baseTestBeatmap.Beatmaps) b.Metadata = metadata; - BeatmapSets.Add(baseTestBeatmap); + + Realm.Write(r => r.Add(baseTestBeatmap, update: true)); + BeatmapSets.Add(baseTestBeatmap.Detach()); }); WaitForFiltering(); @@ -68,12 +76,19 @@ namespace osu.Game.Tests.Visual.SongSelectV2 AddAssert("drawables unchanged", () => Carousel.ChildrenOfType(), () => Is.EqualTo(originalDrawables)); } - [Test] - public void TestScrollPositionMaintainedWhenSetUpdated() + [TestCase(true)] + [TestCase(false)] + public void TestScrollPositionMaintainedWhenSetUpdated(bool difficultySort) { - PanelBeatmapSet panel = null!; + if (difficultySort) + { + SortAndGroupBy(SortMode.Difficulty, GroupMode.Difficulty); + assertDidFilter(1); + } - AddStep("find panel", () => panel = Carousel.ChildrenOfType().Single(p => p.ChildrenOfType().Any(t => t.Text.ToString() == "beatmap"))); + Panel panel = null!; + + AddStep("find panel", () => panel = Carousel.ChildrenOfType().First(p => p.Item != null && p.ChildrenOfType().Any(t => t.Text.ToString() == "beatmap"))); AddStep("select panel", () => panel.TriggerClick()); @@ -97,7 +112,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 }; }); - assertDidFilter(); + assertDidFilter(difficultySort ? 2 : 1); WaitForFiltering(); AddAssert("scroll is still at end", () => Carousel.ChildrenOfType().Single().IsScrolledToEnd()); @@ -172,15 +187,23 @@ namespace osu.Game.Tests.Visual.SongSelectV2 assertDidNotFilter(); } - [TestCase(false)] - [TestCase(true)] - public void TestSelectionHeld(bool hashChanged) + [TestCase(false, false)] + [TestCase(false, true)] + [TestCase(true, false)] + [TestCase(true, true)] + public void TestSelectionHeld(bool difficultySort, bool hashChanged) { SelectNextSet(); + if (difficultySort) + { + SortAndGroupBy(SortMode.Difficulty, GroupMode.Difficulty); + assertDidFilter(1); + } + WaitForSetSelection(1, 0); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); updateBeatmap(b => { @@ -188,15 +211,17 @@ namespace osu.Game.Tests.Visual.SongSelectV2 b.Hash = "new hash"; }); + int baseFilterCount = difficultySort ? 1 : 0; + if (hashChanged) - assertDidFilter(); + assertDidFilter(baseFilterCount + 1); else - assertDidNotFilter(); + assertDidFilter(baseFilterCount); WaitForFiltering(); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); } [Test] // Checks that we keep selection based on online ID where possible. @@ -205,15 +230,15 @@ namespace osu.Game.Tests.Visual.SongSelectV2 SelectNextSet(); WaitForSetSelection(1, 0); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); updateBeatmap(b => b.DifficultyName = "new name"); assertDidFilter(); WaitForFiltering(); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); } [Test] // Checks that we fallback to keeping selection based on difficulty name. @@ -222,15 +247,15 @@ namespace osu.Game.Tests.Visual.SongSelectV2 SelectNextSet(); WaitForSetSelection(1, 0); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); updateBeatmap(b => b.OnlineID = b.OnlineID + 1); assertDidFilter(); WaitForFiltering(); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); } [Test] // Checks that we don't crash if there exists a difficulty with the same online ID as the selected difficulty. @@ -239,8 +264,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 SelectNextSet(); WaitForSetSelection(1, 0); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); // Add another difficulty with same online ID. updateBeatmap(null, bs => @@ -252,8 +277,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 WaitForFiltering(); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); } [Test] // Checks that we don't crash if there exists a difficulty with the same name as the selected difficulty. @@ -262,21 +287,24 @@ namespace osu.Game.Tests.Visual.SongSelectV2 SelectNextSet(); WaitForSetSelection(1, 0); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); // Remove original selected difficulty, and add two difficulties with same name as selection. updateBeatmap(null, bs => { string selectedName = bs.Beatmaps[0].DifficultyName; + Realm.Write(r => r.Remove(r.Find(bs.Beatmaps[0].ID)!)); bs.Beatmaps.RemoveAt(0); var newBeatmap = createBeatmap(bs); + newBeatmap.ID = Guid.NewGuid(); newBeatmap.DifficultyName = selectedName; newBeatmap.OnlineID = -1; bs.Beatmaps.Add(newBeatmap); newBeatmap = createBeatmap(bs); + newBeatmap.ID = Guid.NewGuid(); newBeatmap.DifficultyName = selectedName; newBeatmap.OnlineID = -1; bs.Beatmaps.Add(newBeatmap); @@ -284,8 +312,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 WaitForFiltering(); - AddAssert("selection is updateable beatmap", () => Carousel.CurrentSelection, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); - AddAssert("visible panel is updateable beatmap", () => GetSelectedPanel()?.Item?.Model, () => Is.EqualTo(baseTestBeatmap.Beatmaps[0])); + AddAssert("selection is updateable beatmap", () => Carousel.CurrentBeatmap, () => Is.EqualTo(BeatmapSets[1].Beatmaps[2])); + AddAssert("visible panel is updateable beatmap", () => (GetSelectedPanel()?.Item?.Model as GroupedBeatmap)?.Beatmap, () => Is.EqualTo(BeatmapSets[1].Beatmaps[2])); } /// @@ -402,7 +430,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 AddAssert("Order didn't change", () => Carousel.PostFilterBeatmaps.Select(b => b.ID), () => Is.EqualTo(originalOrder)); } - private void assertDidFilter() => AddAssert("did filter", () => Carousel.FilterCount, () => Is.EqualTo(initial_filter_count + 1)); + private void assertDidFilter(int count = 1) => AddAssert("did filter", () => Carousel.FilterCount, () => Is.EqualTo(initial_filter_count + count)); private void assertDidNotFilter() => AddAssert("did not filter", () => Carousel.FilterCount, () => Is.EqualTo(initial_filter_count)); @@ -439,7 +467,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 int originalIndex = BeatmapSets.IndexOf(baseTestBeatmap); - BeatmapSets.ReplaceRange(originalIndex, 1, [updatedSet]); + Realm.Write(r => r.Add(updatedSet, update: true)); + BeatmapSets.ReplaceRange(originalIndex, 1, [updatedSet.Detach()]); }); } diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmap.cs b/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmap.cs index 09f8c68951..618b9e0d48 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmap.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmap.cs @@ -104,21 +104,21 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { new PanelBeatmap { - Item = new CarouselItem(beatmap) + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)) }, new PanelBeatmap { - Item = new CarouselItem(beatmap), + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)), KeyboardSelected = { Value = true } }, new PanelBeatmap { - Item = new CarouselItem(beatmap), + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)), Selected = { Value = true } }, new PanelBeatmap { - Item = new CarouselItem(beatmap), + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)), KeyboardSelected = { Value = true }, Selected = { Value = true } }, diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmapStandalone.cs b/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmapStandalone.cs index e9361b3d7f..67a9f54f1a 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmapStandalone.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestScenePanelBeatmapStandalone.cs @@ -104,21 +104,21 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { new PanelBeatmapStandalone { - Item = new CarouselItem(beatmap) + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)) }, new PanelBeatmapStandalone { - Item = new CarouselItem(beatmap), + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)), KeyboardSelected = { Value = true } }, new PanelBeatmapStandalone { - Item = new CarouselItem(beatmap), + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)), Selected = { Value = true } }, new PanelBeatmapStandalone { - Item = new CarouselItem(beatmap), + Item = new CarouselItem(new GroupedBeatmap(null, beatmap)), KeyboardSelected = { Value = true }, Selected = { Value = true } }, diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelect.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelect.cs index 895f148965..945ec5d207 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelect.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using NUnit.Framework; +using osu.Framework.Extensions; using osu.Framework.Graphics.Containers; using osu.Framework.Screens; using osu.Framework.Testing; @@ -310,7 +311,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 [Test] public void TestFilteringRunsAfterReturningFromGameplay() { - AddStep("import actual beatmap", () => Beatmaps.Import(TestResources.GetQuickTestBeatmapForImport())); + AddStep("import actual beatmap", () => Beatmaps.Import(TestResources.GetQuickTestBeatmapForImport()).WaitSafely()); + LoadSongSelect(); AddUntilStep("wait for filtered", () => SongSelect.ChildrenOfType().Single().FilterCount, () => Is.EqualTo(1)); @@ -320,9 +322,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 AddUntilStep("wait for player", () => Stack.CurrentScreen is Player); AddUntilStep("wait for fail", () => ((Player)Stack.CurrentScreen).GameplayState.HasFailed); - AddStep("exit gameplay", () => InputManager.Key(Key.Escape)); - AddStep("exit gameplay", () => InputManager.Key(Key.Escape)); + AddStep("exit gameplay", () => Stack.CurrentScreen.Exit()); + AddUntilStep("wait for song select", () => Stack.CurrentScreen is Screens.SelectV2.SongSelect); AddUntilStep("wait for filtered", () => SongSelect.ChildrenOfType().Single().FilterCount, () => Is.EqualTo(2)); } @@ -590,7 +592,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 LoadSongSelect(); ImportBeatmapForRuleset(0); - AddAssert("options enabled", () => this.ChildrenOfType().Single().Enabled.Value); + AddUntilStep("options enabled", () => this.ChildrenOfType().Single().Enabled.Value); AddStep("click", () => this.ChildrenOfType().Single().TriggerClick()); AddUntilStep("popover displayed", () => this.ChildrenOfType().Any(p => p.IsPresent)); @@ -647,7 +649,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 ImportBeatmapForRuleset(0); - AddAssert("options enabled", () => this.ChildrenOfType().Single().Enabled.Value); + AddUntilStep("options enabled", () => this.ChildrenOfType().Single().Enabled.Value); AddStep("delete all beatmaps", () => Beatmaps.Delete()); AddAssert("beatmap selected", () => !Beatmap.IsDefault); diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectCurrentSelectionInvalidated.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectCurrentSelectionInvalidated.cs index 0736925584..7c604eb37b 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectCurrentSelectionInvalidated.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectCurrentSelectionInvalidated.cs @@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 /// public partial class TestSceneSongSelectCurrentSelectionInvalidated : SongSelectTestScene { - private BeatmapInfo? selectedBeatmap => (BeatmapInfo?)Carousel.CurrentSelection; + private BeatmapInfo? selectedBeatmap => Carousel.CurrentBeatmap; private BeatmapSetInfo? selectedBeatmapSet => selectedBeatmap?.BeatmapSet; [SetUpSteps] diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectFiltering.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectFiltering.cs index 16ad970239..076d84479a 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectFiltering.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectFiltering.cs @@ -302,7 +302,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 checkMatchedBeatmaps(2); - AddAssert("selection changed", () => Beatmap.Value.BeatmapInfo, () => Is.Not.EqualTo(hiddenBeatmap)); + AddUntilStep("selection changed", () => Beatmap.Value.BeatmapInfo, () => Is.Not.EqualTo(hiddenBeatmap)); AddStep("restore", () => Beatmaps.Restore(hiddenBeatmap!)); diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectGrouping.cs index 0772607a57..aa80321033 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneSongSelectGrouping.cs @@ -317,7 +317,7 @@ namespace osu.Game.Tests.Visual.SongSelectV2 AddAssert($"\"{name}\" present", () => { var group = grouping.GroupItems.Single(g => g.Key.Title == name); - var actualBeatmaps = group.Value.Select(i => i.Model).OfType().OrderBy(b => b.ID); + var actualBeatmaps = group.Value.Select(i => i.Model).OfType().Select(gb => gb.Beatmap).OrderBy(b => b.ID); var expectedBeatmaps = getBeatmaps().SelectMany(s => s.Beatmaps).OrderBy(b => b.ID); return actualBeatmaps.SequenceEqual(expectedBeatmaps); }); diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index d8baca6d23..ba5cc56f34 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -68,14 +68,15 @@ namespace osu.Game.Tests.Visual.UserInterface } [TestCase(Key.P, Key.P)] - [TestCase(Key.M, Key.P)] - [TestCase(Key.L, Key.P)] - [TestCase(Key.B, Key.E)] - [TestCase(Key.S, Key.E)] - [TestCase(Key.D, null)] - [TestCase(Key.Q, null)] - [TestCase(Key.O, null)] - public void TestShortcutKeys(Key key, Key? subMenuEnterKey) + [TestCase(Key.M, Key.M, Key.L)] + [TestCase(Key.M, Key.M, Key.M)] + [TestCase(Key.L, Key.L)] + [TestCase(Key.B, Key.E, Key.B)] + [TestCase(Key.S, Key.E, Key.S)] + [TestCase(Key.D)] + [TestCase(Key.Q)] + [TestCase(Key.O)] + public void TestShortcutKeys(params Key[] keys) { int activationCount = -1; AddStep("set up action", () => @@ -83,7 +84,7 @@ namespace osu.Game.Tests.Visual.UserInterface activationCount = 0; void action() => activationCount++; - switch (key) + switch (keys.First()) { case Key.P: buttons.OnSolo = action; @@ -119,16 +120,19 @@ namespace osu.Game.Tests.Visual.UserInterface } }); - AddStep($"press {key}", () => InputManager.Key(key)); + // trigger out of idle state + AddStep($"press {keys.First()}", () => InputManager.Key(keys.First())); AddAssert("state is top level", () => buttons.State == ButtonSystemState.TopLevel); - if (subMenuEnterKey != null) + for (int i = 0; i < keys.Length; i++) { - AddStep($"press {subMenuEnterKey}", () => InputManager.Key(subMenuEnterKey.Value)); - AddAssert("state is not top menu", () => buttons.State != ButtonSystemState.TopLevel); + var key = keys[i]; + AddStep($"press {key}", () => InputManager.Key(key)); + + if (i > 0) + AddAssert("state is not top menu", () => buttons.State != ButtonSystemState.TopLevel); } - AddStep($"press {key}", () => InputManager.Key(key)); AddAssert("action triggered", () => activationCount == 1); } diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneMainMenuButton.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneMainMenuButton.cs index c091c089cf..86659675a0 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneMainMenuButton.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneMainMenuButton.cs @@ -13,8 +13,8 @@ using osu.Game.Online.Metadata; using osu.Game.Online.Rooms; using osu.Game.Overlays; using osu.Game.Screens.Menu; +using osuTK.Graphics; using osuTK.Input; -using Color4 = osuTK.Graphics.Color4; namespace osu.Game.Tests.Visual.UserInterface { diff --git a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs index d02559d6b7..848d510826 100644 --- a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs +++ b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs @@ -9,6 +9,7 @@ using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Localisation; using osu.Game.Graphics; using osu.Game.Tournament.Components; using osu.Game.Tournament.Models; @@ -264,9 +265,9 @@ namespace osu.Game.Tournament.Screens.Schedule { } - protected override string Format() => Date < DateTimeOffset.Now - ? $"Started {base.Format()}" - : $"Starting {base.Format()}"; + protected override LocalisableString Format() => Date < DateTimeOffset.Now + ? LocalisableString.Interpolate($"Started {base.Format()}") + : LocalisableString.Interpolate($"Starting {base.Format()}"); } public partial class ScheduleContainer : Container diff --git a/osu.Game/Beatmaps/BeatmapImporter.cs b/osu.Game/Beatmaps/BeatmapImporter.cs index 28997509dc..f80c4de4ea 100644 --- a/osu.Game/Beatmaps/BeatmapImporter.cs +++ b/osu.Game/Beatmaps/BeatmapImporter.cs @@ -367,7 +367,11 @@ namespace osu.Game.Beatmaps { var beatmaps = new List(); - foreach (var file in beatmapSet.Files.Where(f => f.Filename.EndsWith(".osu", StringComparison.OrdinalIgnoreCase))) + // stable appears to ignore `.osu` files which are not placed at the top level of the beatmap archive. + // the logic that achieves this is very difficult to make sense of, but appears to be located somewhere around + // https://github.com/peppy/osu-stable-reference/blob/67795dba3c308e7d0493b296149dcb073ca47ecb/osu!/GameplayElements/Beatmaps/BeatmapManager.cs#L207-L208 + // only testing the `/` path separator character is sufficient as `RealmNamedFileUsage`s are normalised to use the front slash unix path separator convention + foreach (var file in beatmapSet.Files.Where(f => !f.Filename.Contains('/') && f.Filename.EndsWith(@".osu", StringComparison.OrdinalIgnoreCase))) { using (var memoryStream = new MemoryStream(Files.Store.Get(file.File.GetStoragePath()))) // we need a memory stream so we can seek { diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs index 135e5129ae..54f8d656fe 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs @@ -7,7 +7,9 @@ using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input; using osu.Framework.Input.Events; +using osu.Game.Configuration; using osu.Game.Graphics.Containers; using osu.Game.Graphics.UserInterface; using osu.Game.Online; @@ -35,6 +37,18 @@ namespace osu.Game.Beatmaps.Drawables.Cards protected readonly BeatmapDownloadTracker DownloadTracker; + private readonly Bindable preferNoVideo = new BindableBool(); + private InputManager? containingInputManager; + + [Resolved] + private BeatmapSetOverlay? beatmapSetOverlay { get; set; } + + [Resolved] + private BeatmapModelDownloader? beatmaps { get; set; } + + [Resolved] + private OsuGame? game { get; set; } + protected BeatmapCard(APIBeatmapSet beatmapSet, bool allowExpansion = true) : base(HoverSampleSet.Button) { @@ -45,10 +59,10 @@ namespace osu.Game.Beatmaps.Drawables.Cards DownloadTracker = new BeatmapDownloadTracker(beatmapSet); } - [BackgroundDependencyLoader(true)] - private void load(BeatmapSetOverlay? beatmapSetOverlay) + [BackgroundDependencyLoader] + private void load(OsuConfigManager configManager) { - Action = () => beatmapSetOverlay?.FetchAndShowBeatmapSet(BeatmapSet.OnlineID); + configManager.BindWith(OsuSetting.PreferNoVideo, preferNoVideo); AddInternal(DownloadTracker); } @@ -60,6 +74,28 @@ namespace osu.Game.Beatmaps.Drawables.Cards DownloadTracker.State.BindValueChanged(_ => UpdateState()); Expanded.BindValueChanged(_ => UpdateState(), true); FinishTransforms(true); + + containingInputManager = GetContainingInputManager(); + + Action = () => + { + if (containingInputManager?.CurrentState.Keyboard.ShiftPressed == true) + { + switch (DownloadTracker.State.Value) + { + case DownloadState.NotDownloaded: + if (!BeatmapSet.Availability.DownloadDisabled) + beatmaps?.Download(BeatmapSet, preferNoVideo.Value); + break; + + case DownloadState.LocallyAvailable: + game?.PresentBeatmap(BeatmapSet); + break; + } + } + else + beatmapSetOverlay?.FetchAndShowBeatmapSet(BeatmapSet.OnlineID); + }; } protected override bool OnHover(HoverEvent e) diff --git a/osu.Game/Beatmaps/WorkingBeatmapCache.cs b/osu.Game/Beatmaps/WorkingBeatmapCache.cs index 30bbbbc1fe..9957935977 100644 --- a/osu.Game/Beatmaps/WorkingBeatmapCache.cs +++ b/osu.Game/Beatmaps/WorkingBeatmapCache.cs @@ -20,6 +20,7 @@ using osu.Framework.Platform; using osu.Framework.Statistics; using osu.Game.Beatmaps.Formats; using osu.Game.Database; +using osu.Game.Extensions; using osu.Game.IO; using osu.Game.Skinning; using osu.Game.Storyboards; @@ -341,27 +342,10 @@ namespace osu.Game.Beatmaps { // Matches stable implementation, because it's probably simpler than trying to do anything else. // This may need to be reconsidered after we begin storing storyboards in the new editor. - return windowsFilenameStrip( - (metadata.Artist.Length > 0 ? metadata.Artist + @" - " + metadata.Title : Path.GetFileNameWithoutExtension(metadata.AudioFile)) - + (metadata.Author.Username.Length > 0 ? @" (" + metadata.Author.Username + @")" : string.Empty) - + @".osb"); - - string windowsFilenameStrip(string entry) - { - // Inlined from Path.GetInvalidFilenameChars() to ensure the windows characters are used (to match stable). - char[] invalidCharacters = - { - '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', - '\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D', '\x0E', '\x0F', '\x10', '\x11', '\x12', - '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D', - '\x1E', '\x1F', '\x22', '\x3C', '\x3E', '\x7C', ':', '*', '?', '\\', '/' - }; - - foreach (char c in invalidCharacters) - entry = entry.Replace(c.ToString(), string.Empty); - - return entry; - } + string baseFilename = (metadata.Artist.Length > 0 ? metadata.Artist + @" - " + metadata.Title : Path.GetFileNameWithoutExtension(metadata.AudioFile)) + + (metadata.Author.Username.Length > 0 ? @" (" + metadata.Author.Username + @")" : string.Empty) + + @".osb"; + return baseFilename.GetValidFilename(); } } } diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index fb563f432a..5c08f2de2f 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -164,7 +164,7 @@ namespace osu.Game.Configuration SetDefault(OsuSetting.ScoreDisplayMode, ScoringMode.Standardised); //新增自定义 - SetDefault(OsuSetting.EzSelectMode, CsItemIds.ALL.First().Id); + SetDefault(OsuSetting.EzSelectCsMode, CsItemIds.ALL.First().Id); SetDefault(OsuSetting.HitMode, MUGHitMode.EZ2AC); SetDefault(OsuSetting.AccuracyCutoffS, 0.95, 0.95, 1, 0.005); SetDefault(OsuSetting.AccuracyCutoffA, 0.9, 0.9, 1, 0.005); @@ -436,7 +436,7 @@ namespace osu.Game.Configuration ScoreDisplayMode, //自定义 - EzSelectMode, + EzSelectCsMode, ScalingGameMode, AccuracyCutoffS, AccuracyCutoffA, diff --git a/osu.Game/Database/RealmArchiveModelImporter.cs b/osu.Game/Database/RealmArchiveModelImporter.cs index a3cdc2dc77..aefb628422 100644 --- a/osu.Game/Database/RealmArchiveModelImporter.cs +++ b/osu.Game/Database/RealmArchiveModelImporter.cs @@ -208,7 +208,18 @@ namespace osu.Game.Database foreach (var realmFile in model.Files) { string sourcePath = Files.Storage.GetFullPath(realmFile.File.GetStoragePath()); - string destinationPath = Path.Join(mountedPath, realmFile.Filename); + // there are edge cases where externalising an imported model to the filesystem could fail due to invalid filenames. + // one scenario where this happens goes something like this: + // - stable user exports an archive, which contains filenames that get mangled by stable's default zip encoding codepage (Shift-JIS) + // - said archive is imported to lazer, but the invalid filename is not actually an issue due to lazer file store structure + // (the file is stored under a filename correspondent to its SHA instead, and its real filename is only stored in realm) + // - however attempts to externally edit the model fail as the external edit attempts and fails to produce the file's "real" filename in the mounted path + // to prevent this bricking external edit, strip invalid characters on external edit. + // the presumption here is that whatever produced the mangled archive is primarily at fault here, and we're just trying to trudge on locally as best as possible. + // if there are further troubles related to similar issues, reevaluate moving this sort of check to the import side instead (sanitising filenames on import from archive). + string destinationPath = mountedPath; + foreach (string piece in realmFile.Filename.Split('/').Select(f => f.GetValidFilename())) + destinationPath = Path.Combine(destinationPath, piece); Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!); diff --git a/osu.Game/Extensions/ModelExtensions.cs b/osu.Game/Extensions/ModelExtensions.cs index 18c991297a..7c9d929999 100644 --- a/osu.Game/Extensions/ModelExtensions.cs +++ b/osu.Game/Extensions/ModelExtensions.cs @@ -175,6 +175,7 @@ namespace osu.Game.Extensions /// DO NOT CHANGE THE SEMANTICS OF THIS METHOD unless you know well what you are doing. /// /// + /// public static string GetValidFilename(this string filename) { foreach (char c in invalid_filename_chars) diff --git a/osu.Game/Graphics/Carousel/Carousel.cs b/osu.Game/Graphics/Carousel/Carousel.cs index b81df0a7eb..0df183bb71 100644 --- a/osu.Game/Graphics/Carousel/Carousel.cs +++ b/osu.Game/Graphics/Carousel/Carousel.cs @@ -107,7 +107,7 @@ namespace osu.Game.Graphics.Carousel /// The selection is never reset due to not existing. It can be set to anything. /// If no matching carousel item exists, there will be no visually selected item while waiting for potential new item which matches. /// - public object? CurrentSelection + protected object? CurrentSelection { get => currentSelection.Model; set diff --git a/osu.Game/Graphics/DrawableDate.cs b/osu.Game/Graphics/DrawableDate.cs index 0e5bcc8019..7af4df2d25 100644 --- a/osu.Game/Graphics/DrawableDate.cs +++ b/osu.Game/Graphics/DrawableDate.cs @@ -5,6 +5,7 @@ using System; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Cursor; +using osu.Framework.Localisation; using osu.Game.Graphics.Sprites; using osu.Game.Utils; @@ -71,12 +72,32 @@ namespace osu.Game.Graphics Scheduler.AddDelayed(updateTimeWithReschedule, timeUntilNextUpdate); } - protected virtual string Format() => HumanizerUtils.Humanize(Date); + protected virtual LocalisableString Format() => new LocalisableString(new HumanisedDate(Date)); private void updateTime() => Text = Format(); public ITooltip GetCustomTooltip() => new DateTooltip(); public DateTimeOffset TooltipContent => Date; + + private class HumanisedDate : IEquatable, ILocalisableStringData + { + public readonly DateTimeOffset Date; + + public HumanisedDate(DateTimeOffset date) + { + Date = date; + } + + public bool Equals(HumanisedDate? other) + => other?.Date != null && Date.Equals(other.Date); + + public bool Equals(ILocalisableStringData? other) + => other is HumanisedDate otherDate && Equals(otherDate); + + public string GetLocalised(LocalisationParameters parameters) => HumanizerUtils.Humanize(Date); + + public override string ToString() => GetLocalised(LocalisationParameters.DEFAULT); + } } } diff --git a/osu.Game/Graphics/UserInterfaceV2/ShearedDropdown.cs b/osu.Game/Graphics/UserInterfaceV2/ShearedDropdown.cs index e365e20ad5..af69aefaaf 100644 --- a/osu.Game/Graphics/UserInterfaceV2/ShearedDropdown.cs +++ b/osu.Game/Graphics/UserInterfaceV2/ShearedDropdown.cs @@ -34,8 +34,6 @@ namespace osu.Game.Graphics.UserInterfaceV2 osuHeader.Dropdown = this; osuHeader.LeftSideLabel = label; } - - AddInternal(new HoverClickSounds()); } public bool OnPressed(KeyBindingPressEvent e) @@ -192,6 +190,8 @@ namespace osu.Game.Graphics.UserInterfaceV2 } }, }; + + AddInternal(new HoverClickSounds()); } [BackgroundDependencyLoader] diff --git a/osu.Game/Localisation/MenuTipStrings.cs b/osu.Game/Localisation/MenuTipStrings.cs index 4d1f2ceaa6..ebab9f4d02 100644 --- a/osu.Game/Localisation/MenuTipStrings.cs +++ b/osu.Game/Localisation/MenuTipStrings.cs @@ -154,6 +154,11 @@ namespace osu.Game.Localisation /// public static LocalisableString RightMouseAbsoluteScroll => new TranslatableString(getKey(@"right_mouse_absolute_scroll"), @"Try holding your right mouse button near the beatmap carousel to quickly scroll to an absolute position!"); + /// + /// "Shift-click on a beatmap panel in the beatmap listing overlay to quickly download or view the beatmap in song select!" + /// + public static LocalisableString ShiftClickInBeatmapOverlay => new TranslatableString(getKey(@"shift_click_in_beatmap_overlay"), @"Shift-click on a beatmap panel in the beatmap listing overlay to quickly download or view the beatmap in song select!"); + /// /// "a tip for you:" /// diff --git a/osu.Game/Online/Leaderboards/LeaderboardScore.cs b/osu.Game/Online/Leaderboards/LeaderboardScore.cs index 8a30c4315b..0f29163e39 100644 --- a/osu.Game/Online/Leaderboards/LeaderboardScore.cs +++ b/osu.Game/Online/Leaderboards/LeaderboardScore.cs @@ -429,7 +429,7 @@ namespace osu.Game.Online.Leaderboards Font = OsuFont.GetFont(size: 16, weight: FontWeight.Bold); } - protected override string Format() => Date.ToShortRelativeTime(TimeSpan.FromSeconds(30)); + protected override LocalisableString Format() => Date.ToShortRelativeTime(TimeSpan.FromSeconds(30)); } public class LeaderboardScoreStatistic diff --git a/osu.Game/Online/Matchmaking/IMatchmakingClient.cs b/osu.Game/Online/Matchmaking/IMatchmakingClient.cs new file mode 100644 index 0000000000..70e1ce0b5d --- /dev/null +++ b/osu.Game/Online/Matchmaking/IMatchmakingClient.cs @@ -0,0 +1,53 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Threading.Tasks; + +namespace osu.Game.Online.Matchmaking +{ + public interface IMatchmakingClient : IStatefulUserHubClient + { + /// + /// Signals that the local user was placed in the matchmaking queue. + /// + Task MatchmakingQueueJoined(); + + /// + /// Signals that the local user was removed from the matchmaking queue. + /// + Task MatchmakingQueueLeft(); + + /// + /// Signals that a match has been found and the local user is invited to it. + /// The invitation may be accepted, + /// declined, + /// or ignored - in which case it will automatically be declined after a short timeout period. + /// + Task MatchmakingRoomInvited(); + + /// + /// Signals that the matchmaking room is ready to be opened. + /// + Task MatchmakingRoomReady(long roomId, string password); + + /// + /// The matchmaking lobby status has changed. + /// + Task MatchmakingLobbyStatusChanged(MatchmakingLobbyStatus status); + + /// + /// The matchmaking status of the current user has changed. + /// + Task MatchmakingQueueStatusChanged(MatchmakingQueueStatus status); + + /// + /// The user has raised a candidate playlist item to be played. + /// + Task MatchmakingItemSelected(int userId, long playlistItemId); + + /// + /// The user has removed a candidate playlist item. + /// + Task MatchmakingItemDeselected(int userId, long playlistItemId); + } +} diff --git a/osu.Game/Online/Matchmaking/IMatchmakingServer.cs b/osu.Game/Online/Matchmaking/IMatchmakingServer.cs new file mode 100644 index 0000000000..66fd8c36da --- /dev/null +++ b/osu.Game/Online/Matchmaking/IMatchmakingServer.cs @@ -0,0 +1,56 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Threading.Tasks; + +namespace osu.Game.Online.Matchmaking +{ + public interface IMatchmakingServer + { + /// + /// Retrieves all active matchmaking pools. + /// + Task GetMatchmakingPools(); + + /// + /// Joins the matchmaking lobby, allowing the local user to receive status updates. + /// + Task MatchmakingJoinLobby(); + + /// + /// Leaves the matchmaking lobby. + /// + Task MatchmakingLeaveLobby(); + + /// + /// Joins the matchmaking queue, allowing the local user to get matched up with others. + /// + Task MatchmakingJoinQueue(int poolId); + + /// + /// Leaves the matchmaking queue. + /// + Task MatchmakingLeaveQueue(); + + /// + /// Accepts a matchmaking room invitation. + /// + Task MatchmakingAcceptInvitation(); + + /// + /// Declines a matchmaking room invitation. + /// + Task MatchmakingDeclineInvitation(); + + /// + /// Raise a candidate playlist item to be played in the current round. + /// + /// The playlist item. + Task MatchmakingToggleSelection(long playlistItemId); + + /// + /// Debug only - skips to the next stage of the matchmaking room. + /// + Task MatchmakingSkipToNextStage(); + } +} diff --git a/osu.Game/Online/Matchmaking/MatchmakingLobbyStatus.cs b/osu.Game/Online/Matchmaking/MatchmakingLobbyStatus.cs new file mode 100644 index 0000000000..9a1e083b84 --- /dev/null +++ b/osu.Game/Online/Matchmaking/MatchmakingLobbyStatus.cs @@ -0,0 +1,16 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using MessagePack; + +namespace osu.Game.Online.Matchmaking +{ + [Serializable] + [MessagePackObject] + public class MatchmakingLobbyStatus + { + [Key(0)] + public int[] UsersInQueue { get; set; } = []; + } +} diff --git a/osu.Game/Online/Matchmaking/MatchmakingPool.cs b/osu.Game/Online/Matchmaking/MatchmakingPool.cs new file mode 100644 index 0000000000..3f256d5251 --- /dev/null +++ b/osu.Game/Online/Matchmaking/MatchmakingPool.cs @@ -0,0 +1,39 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Diagnostics.CodeAnalysis; +using MessagePack; + +namespace osu.Game.Online.Matchmaking +{ + [MessagePackObject] + [Serializable] + public class MatchmakingPool : IEquatable + { + [Key(0)] + public int Id { get; set; } + + [Key(1)] + public int RulesetId { get; set; } + + [Key(2)] + public int Variant { get; set; } + + [Key(3)] + public string Name { get; set; } = string.Empty; + + public bool Equals(MatchmakingPool? other) + => other != null + && Id == other.Id + && RulesetId == other.RulesetId + && Variant == other.Variant + && Name == other.Name; + + public override bool Equals(object? obj) + => obj is MatchmakingPool other && Equals(other); + + [SuppressMessage("ReSharper", "NonReadonlyMemberInGetHashCode")] + public override int GetHashCode() => HashCode.Combine(Id, RulesetId, Variant, Name); + } +} diff --git a/osu.Game/Online/Matchmaking/MatchmakingQueueStatus.cs b/osu.Game/Online/Matchmaking/MatchmakingQueueStatus.cs new file mode 100644 index 0000000000..a57e04bd10 --- /dev/null +++ b/osu.Game/Online/Matchmaking/MatchmakingQueueStatus.cs @@ -0,0 +1,34 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using MessagePack; + +namespace osu.Game.Online.Matchmaking +{ + [Serializable] + [MessagePackObject] + [Union(0, typeof(Searching))] // IMPORTANT: Add rules to SignalRUnionWorkaroundResolver for new derived types. + [Union(1, typeof(MatchFound))] + [Union(2, typeof(JoiningMatch))] + public abstract class MatchmakingQueueStatus + { + [Serializable] + [MessagePackObject] + public class Searching : MatchmakingQueueStatus + { + } + + [Serializable] + [MessagePackObject] + public class MatchFound : MatchmakingQueueStatus + { + } + + [Serializable] + [MessagePackObject] + public class JoiningMatch : MatchmakingQueueStatus + { + } + } +} diff --git a/osu.Game/Online/Matchmaking/MatchmakingStageCountdown.cs b/osu.Game/Online/Matchmaking/MatchmakingStageCountdown.cs new file mode 100644 index 0000000000..8df1bb000a --- /dev/null +++ b/osu.Game/Online/Matchmaking/MatchmakingStageCountdown.cs @@ -0,0 +1,16 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using MessagePack; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; + +namespace osu.Game.Online.Matchmaking +{ + [MessagePackObject] + public class MatchmakingStageCountdown : MultiplayerCountdown + { + [Key(2)] + public MatchmakingStage Stage { get; set; } + } +} diff --git a/osu.Game/Online/Multiplayer/MatchRoomState.cs b/osu.Game/Online/Multiplayer/MatchRoomState.cs index cae3aaf7d0..25de8c7fab 100644 --- a/osu.Game/Online/Multiplayer/MatchRoomState.cs +++ b/osu.Game/Online/Multiplayer/MatchRoomState.cs @@ -3,6 +3,7 @@ using System; using MessagePack; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; using osu.Game.Online.Multiplayer.MatchTypes.TeamVersus; namespace osu.Game.Online.Multiplayer @@ -14,6 +15,7 @@ namespace osu.Game.Online.Multiplayer [Serializable] [MessagePackObject] [Union(0, typeof(TeamVersusRoomState))] // IMPORTANT: Add rules to SignalRUnionWorkaroundResolver for new derived types. + [Union(1, typeof(MatchmakingRoomState))] public abstract class MatchRoomState { } diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoomState.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoomState.cs new file mode 100644 index 0000000000..9e1953fc59 --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoomState.cs @@ -0,0 +1,101 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using MessagePack; +using osu.Game.Online.API.Requests.Responses; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Describes the state of a matchmaking room. + /// + [Serializable] + [MessagePackObject] + public class MatchmakingRoomState : MatchRoomState + { + /// + /// The current room status. + /// + [Key(0)] + public MatchmakingStage Stage { get; set; } + + /// + /// The current round number (1-based). + /// + [Key(1)] + public int CurrentRound { get; set; } + + /// + /// The playlist items that were picked as gameplay candidates. + /// + [Key(2)] + public long[] CandidateItems { get; set; } = []; + + /// + /// The final gameplay candidate. + /// + [Key(3)] + public long CandidateItem { get; set; } + + /// + /// The users in the room. + /// + [Key(4)] + public MatchmakingUserList Users { get; set; } = new MatchmakingUserList(); + + /// + /// Advances to the next round. + /// + public void AdvanceRound() + { + CurrentRound++; + } + + /// + /// Sets scores for the current round, applying points and adjusting user placements. + /// + /// + /// When applying points: + /// + /// Matching scores are considered to be placed in the lower-equal (e.g. two equal top scores are considered "equal-second"). + /// Failed scores are considered to have passed the map. + /// Missing scores are not considered. + /// + /// + /// The scores to apply. + /// The number of points to award for each placement position (0-indexed). Must be at least of equal length to . + public void RecordScores(SoloScoreInfo[] scores, int[] placementPoints) + { + if (placementPoints.Length < scores.Length) + throw new ArgumentException($"{nameof(placementPoints)} must be at least of equal length to {nameof(scores)}."); + + SoloScoreInfo[] orderedScores = scores.OrderByDescending(s => s.TotalScore).ToArray(); + + int placement = 0; + + foreach (var scoreGroup in orderedScores.GroupBy(s => s.TotalScore)) + { + placement += scoreGroup.Count(); + + foreach (var score in scoreGroup) + { + MatchmakingUser mmUser = Users[score.UserID]; + mmUser.Points += placementPoints[placement - 1]; + + MatchmakingRound mmRound = mmUser.Rounds[CurrentRound]; + mmRound.Placement = placement; + mmRound.TotalScore = score.TotalScore; + mmRound.Accuracy = score.Accuracy; + mmRound.MaxCombo = score.MaxCombo; + mmRound.Statistics = score.Statistics; + } + } + + int i = 1; + foreach (var user in Users.Order(new MatchmakingUserComparer(CurrentRound))) + user.Placement = i++; + } + } +} diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRound.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRound.cs new file mode 100644 index 0000000000..6a9d595ab5 --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRound.cs @@ -0,0 +1,54 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using MessagePack; +using osu.Game.Rulesets.Scoring; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Describes a user's score for a round of a matchmaking room. + /// + [Serializable] + [MessagePackObject] + public class MatchmakingRound + { + /// + /// The round. + /// + [Key(0)] + public required int Round { get; set; } + + /// + /// The user's placement in this round (1-based). + /// + [Key(1)] + public int Placement { get; set; } + + /// + /// The achieved total score. + /// + [Key(2)] + public long TotalScore { get; set; } + + /// + /// The achieved accuracy. + /// + [Key(3)] + public double Accuracy { get; set; } + + /// + /// The achieved maximum combo. + /// + [Key(4)] + public int MaxCombo { get; set; } + + /// + /// The achieved score statistics. + /// + [Key(5)] + public IDictionary Statistics { get; set; } = new Dictionary(); + } +} diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoundList.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoundList.cs new file mode 100644 index 0000000000..c34d1771f8 --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingRoundList.cs @@ -0,0 +1,49 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections; +using System.Collections.Generic; +using MessagePack; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Describes the per-round scores of a matchmaking room. + /// + [Serializable] + [MessagePackObject] + public class MatchmakingRoundList : IEnumerable + { + /// + /// A key-value-pair mapping of rounds to scores. + /// + [Key(0)] + public IDictionary RoundsDictionary { get; set; } = new Dictionary(); + + /// + /// Creates or retrieves the score for the given round. + /// + /// The round. + public MatchmakingRound this[int round] + { + get + { + if (RoundsDictionary.TryGetValue(round, out MatchmakingRound? score)) + return score; + + return RoundsDictionary[round] = new MatchmakingRound { Round = round }; + } + } + + /// + /// The total number of rounds. + /// + [IgnoreMember] + public int Count => RoundsDictionary.Count; + + public IEnumerator GetEnumerator() => RoundsDictionary.Values.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + } +} diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingStage.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingStage.cs new file mode 100644 index 0000000000..edffa4ec23 --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingStage.cs @@ -0,0 +1,59 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Describes the current status of a matchmaking room. + /// + [Serializable] + public enum MatchmakingStage + { + /// + /// The initial state of a room. Users are still joining. + /// + WaitingForClientsJoin, + + /// + /// A short delay before the round begins. + /// + RoundWarmupTime, + + /// + /// Users are given a chance to lock in their beatmap picks. + /// + UserBeatmapSelect, + + /// + /// Clients have sent their picks, and the server has responded with the finalised beatmap. + /// + ServerBeatmapFinalised, + + /// + /// Clients are given an opportunity to download the beatmap. + /// + WaitingForClientsBeatmapDownload, + + /// + /// A short delay before gameplay starts. + /// + GameplayWarmupTime, + + /// + /// Gameplay is ongoing. + /// + Gameplay, + + /// + /// Gameplay has finished, results are being displayed. + /// + ResultsDisplaying, + + /// + /// All rounds have completed. Users may still be chatting. + /// + Ended + } +} diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs new file mode 100644 index 0000000000..f596f2473e --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs @@ -0,0 +1,40 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using MessagePack; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Describes a user of a matchmaking room. + /// + [Serializable] + [MessagePackObject] + public class MatchmakingUser + { + /// + /// The user's ID. + /// + [Key(0)] + public required int UserId { get; set; } + + /// + /// The aggregate room placement (1-based). + /// + [Key(1)] + public int Placement { get; set; } + + /// + /// The aggregate points. + /// + [Key(2)] + public int Points { get; set; } + + /// + /// The scores set. + /// + [Key(3)] + public MatchmakingRoundList Rounds { get; set; } = new MatchmakingRoundList(); + } +} diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserComparer.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserComparer.cs new file mode 100644 index 0000000000..74da6a9b2a --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserComparer.cs @@ -0,0 +1,65 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Orders in order of placement. + /// + public class MatchmakingUserComparer : Comparer + { + private readonly int rounds; + + public MatchmakingUserComparer(int rounds) + { + this.rounds = rounds; + } + + public override int Compare(MatchmakingUser? x, MatchmakingUser? y) + { + ArgumentNullException.ThrowIfNull(x); + ArgumentNullException.ThrowIfNull(y); + + // X appears earlier in the list if it has more points. + if (x.Points > y.Points) + return -1; + + // Y appears earlier in the list if it has more points. + if (y.Points > x.Points) + return 1; + + // Tiebreaker 1 (likely): From each user's point-of-view, their earliest and best placement. + for (int r = 1; r <= rounds; r++) + { + MatchmakingRound? xRound; + x.Rounds.RoundsDictionary.TryGetValue(r, out xRound); + + MatchmakingRound? yRound; + y.Rounds.RoundsDictionary.TryGetValue(r, out yRound); + + // Nothing to do if both players haven't played this round. + if (xRound == null && yRound == null) + continue; + + // X appears later in the list if it hasn't played this round. + if (xRound == null) + return 1; + + // Y appears later in the list if it hasn't played this round. + if (yRound == null) + return -1; + + // X appears earlier in the list if it has a better placement in the round. + int compare = xRound.Placement.CompareTo(yRound.Placement); + if (compare != 0) + return compare; + } + + // Tiebreaker 2 (unlikely): User ID. + return x.UserId.CompareTo(y.UserId); + } + } +} diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserList.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserList.cs new file mode 100644 index 0000000000..600134de4e --- /dev/null +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUserList.cs @@ -0,0 +1,49 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections; +using System.Collections.Generic; +using MessagePack; + +namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking +{ + /// + /// Describes the users of a matchmaking room. + /// + [Serializable] + [MessagePackObject] + public class MatchmakingUserList : IEnumerable + { + /// + /// A key-value-pair mapping of ids to users. + /// + [Key(0)] + public IDictionary UserDictionary { get; set; } = new Dictionary(); + + /// + /// Creates or retrieves the user for the given id. + /// + /// The user id. + public MatchmakingUser this[int userId] + { + get + { + if (UserDictionary.TryGetValue(userId, out MatchmakingUser? user)) + return user; + + return UserDictionary[userId] = new MatchmakingUser { UserId = userId }; + } + } + + /// + /// The total number of users. + /// + [IgnoreMember] + public int Count => UserDictionary.Count; + + public IEnumerator GetEnumerator() => UserDictionary.Values.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + } +} diff --git a/osu.Game/Online/Multiplayer/MultiplayerClient.cs b/osu.Game/Online/Multiplayer/MultiplayerClient.cs index 986bc26716..09dd3a00ae 100644 --- a/osu.Game/Online/Multiplayer/MultiplayerClient.cs +++ b/osu.Game/Online/Multiplayer/MultiplayerClient.cs @@ -17,6 +17,7 @@ using osu.Game.Localisation; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Matchmaking; using osu.Game.Online.Multiplayer.Countdown; using osu.Game.Online.Rooms; using osu.Game.Overlays.Notifications; @@ -26,7 +27,7 @@ using osu.Game.Utils; namespace osu.Game.Online.Multiplayer { - public abstract partial class MultiplayerClient : Component, IMultiplayerClient, IMultiplayerRoomServer + public abstract partial class MultiplayerClient : Component, IMultiplayerClient, IMultiplayerRoomServer, IMatchmakingServer, IMatchmakingClient { public Action? PostNotification { protected get; set; } @@ -112,6 +113,22 @@ namespace osu.Game.Online.Multiplayer /// public event Action? Disconnecting; + public event Action? CountdownStarted; + + public event Action? CountdownStopped; + + public event Action? UserStateChanged; + + public event Action? MatchmakingQueueJoined; + public event Action? MatchmakingQueueLeft; + public event Action? MatchmakingRoomInvited; + public event Action? MatchmakingRoomReady; + public event Action? MatchmakingLobbyStatusChanged; + public event Action? MatchmakingQueueStatusChanged; + public event Action? MatchmakingItemSelected; + public event Action? MatchmakingItemDeselected; + public event Action? MatchRoomStateChanged; + /// /// Whether the is currently connected. /// This is NOT thread safe and usage should be scheduled. @@ -172,14 +189,20 @@ namespace osu.Game.Online.Multiplayer protected Room? APIRoom { get; private set; } + private readonly Queue pendingRequests = new Queue(); + [BackgroundDependencyLoader] private void load() { IsConnected.BindValueChanged(connected => Scheduler.Add(() => { - // clean up local room state on server disconnect. - if (!connected.NewValue && Room != null) - LeaveRoom(); + if (!connected.NewValue) + { + if (Room != null) + LeaveRoom(); + + MatchmakingQueueLeft?.Invoke(); + } })); } @@ -200,6 +223,7 @@ namespace osu.Game.Online.Multiplayer await joinOrLeaveTaskChain.Add(async () => { + await runOnUpdateThreadAsync(() => pendingRequests.Clear(), cancellationSource.Token).ConfigureAwait(false); var multiplayerRoom = await CreateRoomInternal(new MultiplayerRoom(room)).ConfigureAwait(false); await setupJoinedRoom(room, multiplayerRoom, cancellationSource.Token).ConfigureAwait(false); }, cancellationSource.Token).ConfigureAwait(false); @@ -223,6 +247,7 @@ namespace osu.Game.Online.Multiplayer await joinOrLeaveTaskChain.Add(async () => { + await runOnUpdateThreadAsync(() => pendingRequests.Clear(), cancellationSource.Token).ConfigureAwait(false); var multiplayerRoom = await JoinRoomInternal(room.RoomID.Value, password ?? room.Password).ConfigureAwait(false); await setupJoinedRoom(room, multiplayerRoom, cancellationSource.Token).ConfigureAwait(false); }, cancellationSource.Token).ConfigureAwait(false); @@ -250,6 +275,9 @@ namespace osu.Game.Online.Multiplayer Room = joinedRoom; APIRoom = apiRoom; + while (pendingRequests.TryDequeue(out Action? action)) + action(); + APIRoom.RoomID = joinedRoom.RoomID; APIRoom.ChannelId = joinedRoom.ChannelID; APIRoom.Host = joinedRoom.Host?.User; @@ -266,6 +294,9 @@ namespace osu.Game.Online.Multiplayer updateLocalRoomSettings(joinedRoom.Settings); + while (pendingRequests.TryDequeue(out Action? action)) + action(); + postServerShuttingDownNotification(); OnRoomJoined(); @@ -300,10 +331,23 @@ namespace osu.Game.Online.Multiplayer RoomUpdated?.Invoke(); }); - return joinOrLeaveTaskChain.Add(async () => + return Task.Run(async () => { - await scheduledReset.ConfigureAwait(false); - await LeaveRoomInternal().ConfigureAwait(false); + try + { + await joinOrLeaveTaskChain.Add(async () => + { + await scheduledReset.ConfigureAwait(false); + await LeaveRoomInternal().ConfigureAwait(false); + }).ConfigureAwait(false); + } + finally + { + await runOnUpdateThreadAsync(() => + { + pendingRequests.Clear(); + }).ConfigureAwait(false); + } }); } @@ -449,11 +493,9 @@ namespace osu.Game.Online.Multiplayer Task IMultiplayerClient.RoomStateChanged(MultiplayerRoomState state) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); Debug.Assert(APIRoom != null); Room.State = state; @@ -476,7 +518,7 @@ namespace osu.Game.Online.Multiplayer } RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } @@ -485,10 +527,9 @@ namespace osu.Game.Online.Multiplayer { await PopulateUsers([user]).ConfigureAwait(false); - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; + Debug.Assert(Room != null); // for sanity, ensure that there can be no duplicate users in the room user list. if (Room.Users.Any(existing => existing.UserID == user.UserID)) @@ -500,18 +541,18 @@ namespace osu.Game.Online.Multiplayer UserJoined?.Invoke(user); RoomUpdated?.Invoke(); - }, false); + }); } Task IMultiplayerClient.UserLeft(MultiplayerRoomUser user) { - Scheduler.Add(() => handleUserLeft(user, UserLeft), false); + handleRoomRequest(() => handleUserLeft(user, UserLeft)); return Task.CompletedTask; } Task IMultiplayerClient.UserKicked(MultiplayerRoomUser user) { - Scheduler.Add(() => + handleRoomRequest(() => { if (LocalUser == null) return; @@ -520,7 +561,7 @@ namespace osu.Game.Online.Multiplayer LeaveRoom(); handleUserLeft(user, UserKicked); - }, false); + }); return Task.CompletedTask; } @@ -528,9 +569,7 @@ namespace osu.Game.Online.Multiplayer private void handleUserLeft(MultiplayerRoomUser user, Action? callback) { Debug.Assert(ThreadSafety.IsUpdateThread); - - if (Room == null) - return; + Debug.Assert(Room != null); Room.Users.Remove(user); PlayingUserIds.Remove(user.UserID); @@ -587,11 +626,9 @@ namespace osu.Game.Online.Multiplayer Task IMultiplayerClient.HostChanged(int userId) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); Debug.Assert(APIRoom != null); var user = Room.Users.FirstOrDefault(u => u.UserID == userId); @@ -601,22 +638,24 @@ namespace osu.Game.Online.Multiplayer HostChanged?.Invoke(user); RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.SettingsChanged(MultiplayerRoomSettings newSettings) { - Scheduler.Add(() => updateLocalRoomSettings(newSettings)); + handleRoomRequest(() => updateLocalRoomSettings(newSettings)); return Task.CompletedTask; } Task IMultiplayerClient.UserStateChanged(int userId, MultiplayerUserState state) { - Scheduler.Add(() => + handleRoomRequest(() => { - var user = Room?.Users.SingleOrDefault(u => u.UserID == userId); + Debug.Assert(Room != null); + + var user = Room.Users.SingleOrDefault(u => u.UserID == userId); // TODO: user should NEVER be null here, see https://github.com/ppy/osu/issues/17713. if (user == null) @@ -625,17 +664,20 @@ namespace osu.Game.Online.Multiplayer user.State = state; updateUserPlayingState(userId, state); + UserStateChanged?.Invoke(user, state); RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.MatchUserStateChanged(int userId, MatchUserState state) { - Scheduler.Add(() => + handleRoomRequest(() => { - var user = Room?.Users.SingleOrDefault(u => u.UserID == userId); + Debug.Assert(Room != null); + + var user = Room.Users.SingleOrDefault(u => u.UserID == userId); // TODO: user should NEVER be null here, see https://github.com/ppy/osu/issues/17713. if (user == null) @@ -643,36 +685,36 @@ namespace osu.Game.Online.Multiplayer user.MatchState = state; RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.MatchRoomStateChanged(MatchRoomState state) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; + Debug.Assert(Room != null); Room.MatchState = state; + MatchRoomStateChanged?.Invoke(state); RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } public Task MatchEvent(MatchServerEvent e) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; + Debug.Assert(Room != null); switch (e) { case CountdownStartedEvent countdownStartedEvent: Room.ActiveCountdowns.Add(countdownStartedEvent.Countdown); + CountdownStarted?.Invoke(countdownStartedEvent.Countdown); switch (countdownStartedEvent.Countdown) { @@ -685,13 +727,18 @@ namespace osu.Game.Online.Multiplayer case CountdownStoppedEvent countdownStoppedEvent: MultiplayerCountdown? countdown = Room.ActiveCountdowns.FirstOrDefault(countdown => countdown.ID == countdownStoppedEvent.ID); + if (countdown != null) + { Room.ActiveCountdowns.Remove(countdown); + CountdownStopped?.Invoke(countdown); + } + break; } RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } @@ -708,9 +755,11 @@ namespace osu.Game.Online.Multiplayer Task IMultiplayerClient.UserBeatmapAvailabilityChanged(int userId, BeatmapAvailability beatmapAvailability) { - Scheduler.Add(() => + handleRoomRequest(() => { - var user = Room?.Users.SingleOrDefault(u => u.UserID == userId); + Debug.Assert(Room != null); + + var user = Room.Users.SingleOrDefault(u => u.UserID == userId); // errors here are not critical - beatmap availability state is mostly for display. if (user == null) @@ -719,16 +768,18 @@ namespace osu.Game.Online.Multiplayer user.BeatmapAvailability = beatmapAvailability; RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.UserStyleChanged(int userId, int? beatmapId, int? rulesetId) { - Scheduler.Add(() => + handleRoomRequest(() => { - var user = Room?.Users.SingleOrDefault(u => u.UserID == userId); + Debug.Assert(Room != null); + + var user = Room.Users.SingleOrDefault(u => u.UserID == userId); // errors here are not critical - user style is mostly for display. if (user == null) @@ -739,16 +790,18 @@ namespace osu.Game.Online.Multiplayer UserStyleChanged?.Invoke(user); RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.UserModsChanged(int userId, IEnumerable mods) { - Scheduler.Add(() => + handleRoomRequest(() => { - var user = Room?.Users.SingleOrDefault(u => u.UserID == userId); + Debug.Assert(Room != null); + + var user = Room.Users.SingleOrDefault(u => u.UserID == userId); // errors here are not critical - user mods are mostly for display. if (user == null) @@ -758,70 +811,60 @@ namespace osu.Game.Online.Multiplayer UserModsChanged?.Invoke(user); RoomUpdated?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.LoadRequested() { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); LoadRequested?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.GameplayAborted(GameplayAbortReason reason) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); GameplayAborted?.Invoke(reason); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.GameplayStarted() { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); GameplayStarted?.Invoke(); - }, false); + }); return Task.CompletedTask; } Task IMultiplayerClient.ResultsReady() { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); ResultsReady?.Invoke(); - }, false); + }); return Task.CompletedTask; } public Task PlaylistItemAdded(MultiplayerPlaylistItem item) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); Debug.Assert(APIRoom != null); Room.Playlist.Add(item); @@ -836,11 +879,9 @@ namespace osu.Game.Online.Multiplayer public Task PlaylistItemRemoved(long playlistItemId) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); Debug.Assert(APIRoom != null); Room.Playlist.Remove(Room.Playlist.Single(existing => existing.ID == playlistItemId)); @@ -857,11 +898,9 @@ namespace osu.Game.Online.Multiplayer public Task PlaylistItemChanged(MultiplayerPlaylistItem item) { - Scheduler.Add(() => + handleRoomRequest(() => { - if (Room == null) - return; - + Debug.Assert(Room != null); Debug.Assert(APIRoom != null); Room.Playlist[Room.Playlist.IndexOf(Room.Playlist.Single(existing => existing.ID == item.ID))] = item; @@ -908,9 +947,7 @@ namespace osu.Game.Online.Multiplayer /// The new to update from. private void updateLocalRoomSettings(MultiplayerRoomSettings settings) { - if (Room == null) - return; - + Debug.Assert(Room != null); Debug.Assert(APIRoom != null); // Update a few properties of the room instantaneously. @@ -972,6 +1009,20 @@ namespace osu.Game.Online.Multiplayer return tcs.Task; } + private void handleRoomRequest(Action request) + { + Scheduler.Add(() => + { + if (Room == null) + { + pendingRequests.Enqueue(request); + return; + } + + request(); + }); + } + Task IStatefulUserHubClient.DisconnectRequested() { Schedule(() => @@ -982,6 +1033,82 @@ namespace osu.Game.Online.Multiplayer return Task.CompletedTask; } + Task IMatchmakingClient.MatchmakingQueueJoined() + { + Scheduler.Add(() => MatchmakingQueueJoined?.Invoke()); + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingQueueLeft() + { + Scheduler.Add(() => MatchmakingQueueLeft?.Invoke()); + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingRoomInvited() + { + Scheduler.Add(() => MatchmakingRoomInvited?.Invoke()); + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingRoomReady(long roomId, string password) + { + Scheduler.Add(() => MatchmakingRoomReady?.Invoke(roomId, password)); + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingLobbyStatusChanged(MatchmakingLobbyStatus status) + { + Scheduler.Add(() => MatchmakingLobbyStatusChanged?.Invoke(status)); + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingQueueStatusChanged(MatchmakingQueueStatus status) + { + Scheduler.Add(() => MatchmakingQueueStatusChanged?.Invoke(status)); + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingItemSelected(int userId, long playlistItemId) + { + Scheduler.Add(() => + { + MatchmakingItemSelected?.Invoke(userId, playlistItemId); + RoomUpdated?.Invoke(); + }); + + return Task.CompletedTask; + } + + Task IMatchmakingClient.MatchmakingItemDeselected(int userId, long playlistItemId) + { + Scheduler.Add(() => + { + MatchmakingItemDeselected?.Invoke(userId, playlistItemId); + RoomUpdated?.Invoke(); + }); + + return Task.CompletedTask; + } + + public abstract Task GetMatchmakingPools(); + + public abstract Task MatchmakingJoinLobby(); + + public abstract Task MatchmakingLeaveLobby(); + + public abstract Task MatchmakingJoinQueue(int poolId); + + public abstract Task MatchmakingLeaveQueue(); + + public abstract Task MatchmakingAcceptInvitation(); + + public abstract Task MatchmakingDeclineInvitation(); + + public abstract Task MatchmakingToggleSelection(long playlistItemId); + + public abstract Task MatchmakingSkipToNextStage(); + private partial class MultiplayerInvitationNotification : UserAvatarNotification { protected override IconUsage CloseButtonIcon => FontAwesome.Solid.Times; diff --git a/osu.Game/Online/Multiplayer/MultiplayerCountdown.cs b/osu.Game/Online/Multiplayer/MultiplayerCountdown.cs index c59f5937b0..bc2536848b 100644 --- a/osu.Game/Online/Multiplayer/MultiplayerCountdown.cs +++ b/osu.Game/Online/Multiplayer/MultiplayerCountdown.cs @@ -3,6 +3,7 @@ using System; using MessagePack; +using osu.Game.Online.Matchmaking; using osu.Game.Online.Multiplayer.Countdown; namespace osu.Game.Online.Multiplayer @@ -14,6 +15,7 @@ namespace osu.Game.Online.Multiplayer [Union(0, typeof(MatchStartCountdown))] // IMPORTANT: Add rules to SignalRUnionWorkaroundResolver for new derived types. [Union(1, typeof(ForceGameplayStartCountdown))] [Union(2, typeof(ServerShuttingDownCountdown))] + [Union(3, typeof(MatchmakingStageCountdown))] public abstract class MultiplayerCountdown { /// diff --git a/osu.Game/Online/Multiplayer/OnlineMultiplayerClient.cs b/osu.Game/Online/Multiplayer/OnlineMultiplayerClient.cs index 02e9cd4ee8..0decff7ab3 100644 --- a/osu.Game/Online/Multiplayer/OnlineMultiplayerClient.cs +++ b/osu.Game/Online/Multiplayer/OnlineMultiplayerClient.cs @@ -14,6 +14,7 @@ using osu.Game.Online.API; using osu.Game.Online.Rooms; using osu.Game.Overlays.Notifications; using osu.Game.Localisation; +using osu.Game.Online.Matchmaking; namespace osu.Game.Online.Multiplayer { @@ -70,6 +71,15 @@ namespace osu.Game.Online.Multiplayer connection.On(nameof(IMultiplayerClient.PlaylistItemRemoved), ((IMultiplayerClient)this).PlaylistItemRemoved); connection.On(nameof(IMultiplayerClient.PlaylistItemChanged), ((IMultiplayerClient)this).PlaylistItemChanged); connection.On(nameof(IStatefulUserHubClient.DisconnectRequested), ((IMultiplayerClient)this).DisconnectRequested); + + connection.On(nameof(IMatchmakingClient.MatchmakingQueueJoined), ((IMatchmakingClient)this).MatchmakingQueueJoined); + connection.On(nameof(IMatchmakingClient.MatchmakingQueueLeft), ((IMatchmakingClient)this).MatchmakingQueueLeft); + connection.On(nameof(IMatchmakingClient.MatchmakingRoomInvited), ((IMatchmakingClient)this).MatchmakingRoomInvited); + connection.On(nameof(IMatchmakingClient.MatchmakingRoomReady), ((IMatchmakingClient)this).MatchmakingRoomReady); + connection.On(nameof(IMatchmakingClient.MatchmakingLobbyStatusChanged), ((IMatchmakingClient)this).MatchmakingLobbyStatusChanged); + connection.On(nameof(IMatchmakingClient.MatchmakingQueueStatusChanged), ((IMatchmakingClient)this).MatchmakingQueueStatusChanged); + connection.On(nameof(IMatchmakingClient.MatchmakingItemSelected), ((IMatchmakingClient)this).MatchmakingItemSelected); + connection.On(nameof(IMatchmakingClient.MatchmakingItemDeselected), ((IMatchmakingClient)this).MatchmakingItemDeselected); }; IsConnected.BindTo(connector.IsConnected); @@ -310,6 +320,87 @@ namespace osu.Game.Online.Multiplayer return connector.Disconnect(); } + public override Task GetMatchmakingPools() + { + if (!IsConnected.Value) + return Task.FromResult(Array.Empty()); + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.GetMatchmakingPools)); + } + + public override Task MatchmakingJoinLobby() + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingJoinLobby)); + } + + public override Task MatchmakingLeaveLobby() + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingLeaveLobby)); + } + + public override Task MatchmakingJoinQueue(int poolId) + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingJoinQueue), poolId); + } + + public override Task MatchmakingLeaveQueue() + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingLeaveQueue)); + } + + public override Task MatchmakingAcceptInvitation() + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingAcceptInvitation)); + } + + public override Task MatchmakingDeclineInvitation() + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingDeclineInvitation)); + } + + public override Task MatchmakingToggleSelection(long playlistItemId) + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingToggleSelection), playlistItemId); + } + + public override Task MatchmakingSkipToNextStage() + { + if (!IsConnected.Value) + return Task.CompletedTask; + + Debug.Assert(connection != null); + return connection.InvokeAsync(nameof(IMatchmakingServer.MatchmakingSkipToNextStage)); + } + protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); diff --git a/osu.Game/Online/Rooms/MatchType.cs b/osu.Game/Online/Rooms/MatchType.cs index ade28458e8..bbfe25c8fd 100644 --- a/osu.Game/Online/Rooms/MatchType.cs +++ b/osu.Game/Online/Rooms/MatchType.cs @@ -17,5 +17,7 @@ namespace osu.Game.Online.Rooms [LocalisableDescription(typeof(MatchesStrings), nameof(MatchesStrings.MatchTeamTypesTeamVersus))] TeamVersus, + + Matchmaking } } diff --git a/osu.Game/Online/Rooms/MultiplayerPlaylistItem.cs b/osu.Game/Online/Rooms/MultiplayerPlaylistItem.cs index d8ed20a3a8..3386b8654d 100644 --- a/osu.Game/Online/Rooms/MultiplayerPlaylistItem.cs +++ b/osu.Game/Online/Rooms/MultiplayerPlaylistItem.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using MessagePack; using osu.Game.Online.API; @@ -13,7 +14,7 @@ namespace osu.Game.Online.Rooms { [Serializable] [MessagePackObject] - public class MultiplayerPlaylistItem + public class MultiplayerPlaylistItem : IEquatable { [Key(0)] public long ID { get; set; } @@ -118,5 +119,42 @@ namespace osu.Game.Online.Rooms clone.AllowedMods = AllowedMods.ToArray(); return clone; } + + public bool Equals(MultiplayerPlaylistItem? other) + => other != null + && ID == other.ID + && OwnerID == other.OwnerID + && BeatmapID == other.BeatmapID + && BeatmapChecksum == other.BeatmapChecksum + && RulesetID == other.RulesetID + && RequiredMods.SequenceEqual(other.RequiredMods) + && AllowedMods.SequenceEqual(other.AllowedMods) + && Expired == other.Expired + && PlaylistOrder == other.PlaylistOrder + && PlayedAt == other.PlayedAt + && StarRating == other.StarRating + && Freestyle == other.Freestyle; + + public override bool Equals(object? obj) + => obj is MultiplayerPlaylistItem other && Equals(other); + + [SuppressMessage("ReSharper", "NonReadonlyMemberInGetHashCode")] + public override int GetHashCode() + { + var hashCode = new HashCode(); + hashCode.Add(ID); + hashCode.Add(OwnerID); + hashCode.Add(BeatmapID); + hashCode.Add(BeatmapChecksum); + hashCode.Add(RulesetID); + hashCode.Add(RequiredMods); + hashCode.Add(AllowedMods); + hashCode.Add(Expired); + hashCode.Add(PlaylistOrder); + hashCode.Add(PlayedAt); + hashCode.Add(StarRating); + hashCode.Add(Freestyle); + return hashCode.ToHashCode(); + } } } diff --git a/osu.Game/Online/Rooms/Room.cs b/osu.Game/Online/Rooms/Room.cs index e965f9c187..4200fed0dd 100644 --- a/osu.Game/Online/Rooms/Room.cs +++ b/osu.Game/Online/Rooms/Room.cs @@ -263,6 +263,12 @@ namespace osu.Game.Online.Rooms set => SetField(ref availability, value); } + public bool Pinned + { + get => pinned; + set => SetField(ref pinned, value); + } + [JsonProperty("id")] private long? roomId; @@ -339,6 +345,9 @@ namespace osu.Game.Online.Rooms [JsonConverter(typeof(SnakeCaseStringEnumConverter))] private RoomStatus status; + [JsonProperty("pinned")] + private bool pinned; + // Not yet serialised (not implemented). private RoomAvailability availability; diff --git a/osu.Game/Online/SignalRWorkaroundTypes.cs b/osu.Game/Online/SignalRWorkaroundTypes.cs index 6ae178e04c..04d4b8d7af 100644 --- a/osu.Game/Online/SignalRWorkaroundTypes.cs +++ b/osu.Game/Online/SignalRWorkaroundTypes.cs @@ -3,8 +3,10 @@ using System; using System.Collections.Generic; +using osu.Game.Online.Matchmaking; using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer.Countdown; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; using osu.Game.Online.Multiplayer.MatchTypes.TeamVersus; using osu.Game.Users; @@ -45,6 +47,13 @@ namespace osu.Game.Online (typeof(UserActivity.TestingBeatmap), typeof(UserActivity)), (typeof(UserActivity.InDailyChallengeLobby), typeof(UserActivity)), (typeof(UserActivity.PlayingDailyChallenge), typeof(UserActivity)), + + // matchmaking + (typeof(MatchmakingQueueStatus.Searching), typeof(MatchmakingQueueStatus)), + (typeof(MatchmakingQueueStatus.MatchFound), typeof(MatchmakingQueueStatus)), + (typeof(MatchmakingQueueStatus.JoiningMatch), typeof(MatchmakingQueueStatus)), + (typeof(MatchmakingRoomState), typeof(MatchRoomState)), + (typeof(MatchmakingStageCountdown), typeof(MultiplayerCountdown)) }; } } diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index bf08023242..d610bd64d5 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -65,6 +65,7 @@ using osu.Game.Screens.Edit; using osu.Game.Screens.Footer; using osu.Game.Screens.Menu; using osu.Game.Screens.OnlinePlay.DailyChallenge; +using osu.Game.Screens.OnlinePlay.Matchmaking; using osu.Game.Screens.OnlinePlay.Multiplayer; using osu.Game.Screens.OnlinePlay.Playlists; using osu.Game.Screens.Play; @@ -1270,6 +1271,7 @@ namespace osu.Game loadComponentSingleFile(new BackgroundDataStoreProcessor(), Add); loadComponentSingleFile(detachedBeatmapStore = new RealmDetachedBeatmapStore(), Add, true); + loadComponentSingleFile(new MatchmakingController(), Add, true); Add(externalLinkOpener = new ExternalLinkOpener()); Add(new MusicKeyBindingHandler()); diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoreboardTime.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoreboardTime.cs index 59ba9cd449..9f7c5c848d 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoreboardTime.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoreboardTime.cs @@ -2,6 +2,7 @@ // See the LICENCE file in the repository root for full licence text. using System; +using osu.Framework.Localisation; using osu.Game.Extensions; using osu.Game.Graphics; @@ -14,7 +15,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { } - protected override string Format() + protected override LocalisableString Format() => Date.ToShortRelativeTime(TimeSpan.FromHours(1)); } } diff --git a/osu.Game/Overlays/Settings/Sections/SkinSection.cs b/osu.Game/Overlays/Settings/Sections/SkinSection.cs index 0744808c46..9a3b5773ea 100644 --- a/osu.Game/Overlays/Settings/Sections/SkinSection.cs +++ b/osu.Game/Overlays/Settings/Sections/SkinSection.cs @@ -133,6 +133,7 @@ namespace osu.Game.Overlays.Settings.Sections dropdownItems.Add(sender.Single(s => s.ID == SkinInfo.ARGON_PRO_SKIN).ToLive(realm)); dropdownItems.Add(sender.Single(s => s.ID == SkinInfo.TRIANGLES_SKIN).ToLive(realm)); dropdownItems.Add(sender.Single(s => s.ID == SkinInfo.CLASSIC_SKIN).ToLive(realm)); + dropdownItems.Add(sender.Single(s => s.ID == SkinInfo.RETRO_SKIN).ToLive(realm)); dropdownItems.Add(random_skin_info); diff --git a/osu.Game/Overlays/SkinEditor/SkinEditor.cs b/osu.Game/Overlays/SkinEditor/SkinEditor.cs index 487f77ca70..66c73be8b2 100644 --- a/osu.Game/Overlays/SkinEditor/SkinEditor.cs +++ b/osu.Game/Overlays/SkinEditor/SkinEditor.cs @@ -392,10 +392,10 @@ namespace osu.Game.Overlays.SkinEditor return; } - if (skinComponentsContainer.IsLoaded) + if (skinComponentsContainer.ComponentsLoaded) bindChangeHandler(skinComponentsContainer); else - skinComponentsContainer.OnLoadComplete += d => Schedule(() => bindChangeHandler((SkinnableContainer)d)); + skinComponentsContainer.OnComponentsLoaded += onComponentsLoaded; content.Child = new SkinBlueprintContainer(skinComponentsContainer); @@ -429,6 +429,13 @@ namespace osu.Game.Overlays.SkinEditor RequestPlacement = requestPlacement }); + void onComponentsLoaded(Drawable d) + { + SkinnableContainer container = (SkinnableContainer)d; + container.OnComponentsLoaded -= onComponentsLoaded; + Schedule(() => bindChangeHandler(container)); + } + void requestPlacement(Type type) { if (!(Activator.CreateInstance(type) is ISerialisableDrawable component)) diff --git a/osu.Game/Rulesets/UI/FrameStabilityContainer.cs b/osu.Game/Rulesets/UI/FrameStabilityContainer.cs index 329a41ef28..990c1c839b 100644 --- a/osu.Game/Rulesets/UI/FrameStabilityContainer.cs +++ b/osu.Game/Rulesets/UI/FrameStabilityContainer.cs @@ -63,6 +63,9 @@ namespace osu.Game.Rulesets.UI /// private readonly FramedClock framedClock; + [Resolved] + private OsuGame? game { get; set; } + private readonly Stopwatch stopwatch = new Stopwatch(); /// @@ -161,7 +164,9 @@ namespace osu.Game.Rulesets.UI // // In testing this triggers *very* rarely even when set to super low values (10 ms). The cases we're worried about involve multi-second jumps. // A difference of more than 500 ms seems like a sane number we should never exceed. - if (!allowReferenceClockSeeks && Math.Abs(proposedTime - referenceClock.CurrentTime) > 1500) + // + // Double-checking against the parent clock ensures we don't accidentally freeze time when the game stutters due to a long running frame. + if (!allowReferenceClockSeeks && Math.Abs(proposedTime - referenceClock.CurrentTime) > 500 && game?.Clock.ElapsedFrameTime <= 500) { if (invalidBassTimeLogCount < 10) { diff --git a/osu.Game/Scoring/ScoreInfoExtensions.cs b/osu.Game/Scoring/ScoreInfoExtensions.cs index dd08326742..2eec0399d6 100644 --- a/osu.Game/Scoring/ScoreInfoExtensions.cs +++ b/osu.Game/Scoring/ScoreInfoExtensions.cs @@ -5,8 +5,11 @@ using System; using System.Collections.Generic; using System.Linq; using osu.Game.Beatmaps; +using osu.Game.Models; +using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Scoring; using osu.Game.Screens.Select.Leaderboards; +using Realms; namespace osu.Game.Scoring { @@ -64,5 +67,23 @@ namespace osu.Game.Scoring /// The to compute the maximum achievable combo for. /// The maximum achievable combo. public static int GetMaximumAchievableCombo(this ScoreInfo score) => score.MaximumStatistics.Where(kvp => kvp.Key.AffectsCombo()).Sum(kvp => kvp.Value); + + /// + /// Performs a realm filter that returns all scores that belong to the user with the given . + /// (for guests) is supported. + /// + /// + /// All guest scores (with user ID of ), + /// as well as scores of unknown provenance (with default user ID of 1, see ), + /// will be treated as if they belong to the local user. + /// This may not be necessarily considered fully correct in some circumstances, but in most cases it is the desired effect. + /// + public static IQueryable GetAllLocalScoresForUser(this Realm realm, int? userId) + { + return realm.All() + .Filter($@"({nameof(ScoreInfo.User)}.{nameof(RealmUser.OnlineID)} == $0 || {nameof(ScoreInfo.User)}.{nameof(RealmUser.OnlineID)} <= 1)" + + $@" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.Hash)} == {nameof(ScoreInfo.BeatmapHash)}" + + $@" && {nameof(ScoreInfo.DeletePending)} == false", userId); + } } } diff --git a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs index 54c6b87b84..db6f7c96d9 100644 --- a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs +++ b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs @@ -206,6 +206,7 @@ namespace osu.Game.Screens.Backgrounds case TrianglesSkin: case ArgonSkin: case DefaultLegacySkin: + case RetroSkin: // default skins should use the default background rotation, which won't be the case if a SkinBackground is created for them. break; diff --git a/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs b/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs index 5e8637c1ac..cdd2f52dab 100644 --- a/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs +++ b/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs @@ -16,7 +16,6 @@ using osu.Framework.Graphics.UserInterface; using osu.Framework.Input.Events; using osu.Framework.Utils; using osu.Game.Audio; -using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2; @@ -57,9 +56,8 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline protected virtual double GetTime() => HitObject is IHasRepeats r ? HitObject.StartTime + r.Duration / r.SpanCount() / 2 : HitObject.StartTime; [BackgroundDependencyLoader] - private void load(OsuConfigManager config) + private void load() { - HitObject.DefaultsApplied += _ => updateText(); Label.AllowMultiline = false; LabelContainer.AutoSizeAxes = Axes.None; updateText(); @@ -74,6 +72,8 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline { base.LoadComplete(); + HitObject.DefaultsApplied += onDefaultsApplied; + if (timelineBlueprintContainer != null) contracted.BindTo(timelineBlueprintContainer.SamplePointContracted); @@ -96,12 +96,19 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline FinishTransforms(); } + private void onDefaultsApplied(HitObject hitObject) + { + updateText(); + } + protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); if (editor != null) editor.ShowSampleEditPopoverRequested -= onShowSampleEditPopoverRequested; + + HitObject.DefaultsApplied -= onDefaultsApplied; } private void onShowSampleEditPopoverRequested(double time) diff --git a/osu.Game/Screens/Edit/Compose/ComposeScreen.cs b/osu.Game/Screens/Edit/Compose/ComposeScreen.cs index 195625dcde..83d0ec646e 100644 --- a/osu.Game/Screens/Edit/Compose/ComposeScreen.cs +++ b/osu.Game/Screens/Edit/Compose/ComposeScreen.cs @@ -64,7 +64,22 @@ namespace osu.Game.Screens.Edit.Compose if (ruleset == null || composer == null) return new ScreenWhiteBox.UnderConstructionMessage(ruleset == null ? "This beatmap" : $"{ruleset.Description}'s composer"); - return wrapSkinnableContent(composer); + // Create a container to hold both the composer content and the vertical timeline + var mainContent = new Container + { + RelativeSizeAxes = Axes.Both, + Children = new[] + { + wrapSkinnableContent(composer), + new EzVerticalTimeline + { + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + } + } + }; + + return mainContent; } protected override Drawable CreateTimelineContent() diff --git a/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs b/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs index 02eb38ffa6..eedde8b7a4 100644 --- a/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs +++ b/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs @@ -55,12 +55,25 @@ namespace osu.Game.Screens.Edit.GameplayTest return masterGameplayClockContainer; } + protected override void LoadAsyncComplete() + { + base.LoadAsyncComplete(); + + if (!LoadedBeatmapSuccessfully) + return; + + // This hack needs to be called to install its hooks before drawable hit objects get the chance to run update logic, + // because it will not work otherwise due to being too late (various effects of the objects getting missed will have already taken place). + preventMissOnPreviousHitObjects(); + } + protected override void LoadComplete() { base.LoadComplete(); + // this will notify components such as the skin's combo counter, which needs to happen on the update thread + // and therefore can't happen alongside `preventMissOnPreviousHitObjects()` in `LoadAsyncComplete()` markPreviousObjectsHit(); - markVisibleDrawableObjectsHit(); ScoreProcessor.HasCompleted.BindValueChanged(completed => { @@ -111,38 +124,45 @@ namespace osu.Game.Screens.Edit.GameplayTest } } - private void markVisibleDrawableObjectsHit() + private void preventMissOnPreviousHitObjects() { - if (!DrawableRuleset.Playfield.IsLoaded) + void preventMiss(HitObject hitObject) { - Schedule(markVisibleDrawableObjectsHit); - return; + var drawableObject = DrawableRuleset.Playfield.HitObjectContainer + .AliveObjects + .SingleOrDefault(it => it.HitObject == hitObject); + + if (drawableObject != null) + preventMissOnDrawable(drawableObject); } - foreach (var drawableObject in enumerateDrawableObjects(DrawableRuleset.Playfield.AllHitObjects, editorState.Time)) + void preventMissOnDrawable(DrawableHitObject drawableObject) { - if (drawableObject.Entry == null) - continue; + foreach (var nested in drawableObject.NestedHitObjects) + preventMissOnDrawable(nested); - var result = drawableObject.CreateResult(drawableObject.HitObject.Judgement); - result.Type = result.Judgement.MaxResult; - drawableObject.Entry.Result = result; - } - - static IEnumerable enumerateDrawableObjects(IEnumerable drawableObjects, double cutoffTime) - { - foreach (var drawableObject in drawableObjects) + if (drawableObject.Entry != null && drawableObject.HitObject.GetEndTime() < editorState.Time) { - foreach (var nested in enumerateDrawableObjects(drawableObject.NestedHitObjects, cutoffTime)) - { - if (nested.HitObject.GetEndTime() < cutoffTime) - yield return nested; - } - - if (drawableObject.HitObject.GetEndTime() < cutoffTime) - yield return drawableObject; + var result = drawableObject.CreateResult(drawableObject.HitObject.Judgement); + result.Type = result.Judgement.MaxResult; + drawableObject.Entry.Result = result; } } + + void removeListener() + { + if (!DrawableRuleset.Playfield.IsLoaded) + { + Schedule(removeListener); + return; + } + + DrawableRuleset.Playfield.HitObjectUsageBegan -= preventMiss; + } + + DrawableRuleset.Playfield.HitObjectUsageBegan += preventMiss; + + Schedule(removeListener); } protected override void PrepareReplay() diff --git a/osu.Game/Screens/EzLocalizationManager.cs b/osu.Game/Screens/EzLocalizationManager.cs new file mode 100644 index 0000000000..8a0ce6e296 --- /dev/null +++ b/osu.Game/Screens/EzLocalizationManager.cs @@ -0,0 +1,97 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Globalization; + +namespace osu.Game.Screens +{ + public class EzLocalizationManager + { + private static readonly Dictionary> resources + = new Dictionary>(); + + static EzLocalizationManager() + { + initializeResources(); + } + + private static void initializeResources() + { + addResource("SettingsTitle", "设置", "Settings"); + addResource("SaveButton", "保存", "Save"); + addResource("CancelButton", "取消", "Cancel"); + + addResource("GlobalTextureName", "全局纹理名称", "Global Texture Name"); + addResource("GlobalTextureNameTooltip", "(全局纹理名称)统一修改当前皮肤中所有组件的纹理名称", "Set a global texture name for all components in the current skin"); + + addResource("StageSet", "Stage套图", "Stage Set"); + addResource("StageSetTooltip", "统一指定主面板, 如果有动效,则关联实时BPM", "Set a stage set for Stage Bottom, related to real-time BPM"); + + addResource("NoteSet", "Note套图", "Note Set Sprite"); + addResource("NoteSetTooltip", "统一指定整组note套图, 含note和打击光效", "Set a note set for all notes and hit effects"); + + addResource("ColumnWidthStyle", "列宽计算风格", "Column Width Calculation Style"); + addResource("ColumnWidthStyleTooltip", "全局总列宽=设置值×10,其他是字面意思(功能不完善!)", "Global Total Column Width = Configured Value × 10"); + + addResource("ColumnWidth", "单轨宽度", "Column Width"); + addResource("ColumnWidthTooltip", "设置每列轨道的宽度", "Set the width of each column"); + + addResource("SpecialFactor", "特殊轨宽度倍率", "Special Column Width Factor"); + addResource("SpecialFactorTooltip", "S列类型为特殊列, 可自定义", "The S column type are Special columns, customizable"); + + addResource("GlobalHitPosition", "全局判定线位置", "Global HitPosition"); + addResource("GlobalHitPositionTooltip", "全局判定线位置开关", "全局判定线位置开关"); + + addResource("HitPosition", "判定线位置", "Hit Position"); + addResource("HitPositionTooltip", "设置可视的判定线位置", "Set the visible hit position"); + + addResource("HitTargetAlpha", "note命中靶透明度", "Hit Target Alpha"); + addResource("HitTargetFloatFixed", "命中靶的浮动修正", "Hit Target Float Fixed"); + addResource("HitTargetFloatFixedTooltip", "在note的视觉命中靶,修改其正弦函数动效的浮动范围", "In the Hit Target, modify the floating range of its sine function dynamic effect"); + + addResource("NoteHeightScale", "note 高度比例", "Note Height Scale"); + addResource("NoteHeightScaleTooltip", "统一修改note的高度的比例", "Fixed Height for square notes"); + + addResource("NoteTrackLine", "Note辅助线", "Note Track Line"); + addResource("NoteTrackLineTooltip", "note两侧辅助轨道线的高度", "note side auxiliary track line height"); + + addResource("RefreshSaveSkin", "强制刷新、保存皮肤", "Refresh & Save Skin"); + addResource("SwitchToAbsolute", "强制刷新, 并切换至 绝对位置(不稳定)", "Refresh, Switch to Absolute(Unstable)"); + addResource("SwitchToRelative", "强制刷新, 并切换至 相对位置(不稳定)", "Refresh, Switch to Relative(Unstable)"); + } + + private static void addResource(string key, string chinese, string english) + { + resources[key] = new Dictionary + { + ["zh"] = chinese, + ["en"] = english + }; + } + + public static string GetString(string key) + { + if (!resources.TryGetValue(key, out var value)) + return key; + + string lang = CultureInfo.CurrentUICulture.Name.StartsWith("zh", StringComparison.Ordinal) ? "zh" : "en"; + return value[lang]; + } + + public static string GetString(string key, params object[] args) + { + string format = GetString(key); + return string.Format(format, args); + } + } + + public static class EzLocalizationExtensions + { + public static string Localize(this string key) + { + return EzLocalizationManager.GetString(key); + } + } +} diff --git a/osu.Game/Screens/EzSkinSettingsManager.cs b/osu.Game/Screens/EzSkinSettingsManager.cs index 9f1117699e..ff3a6c67e9 100644 --- a/osu.Game/Screens/EzSkinSettingsManager.cs +++ b/osu.Game/Screens/EzSkinSettingsManager.cs @@ -61,6 +61,8 @@ namespace osu.Game.Screens SetDefault(EzSkinSetting.SpecialFactor, 1.2, 0.5, 2.0, 0.1); SetDefault(EzSkinSetting.HitPosition, LegacyManiaSkinConfiguration.DEFAULT_HIT_POSITION, 0, 500, 1.0); SetDefault(EzSkinSetting.VisualHitPosition, 0.0, -100, 100, 1.0); + SetDefault(EzSkinSetting.HitTargetFloatFixed, 6, 0, 10, 0.1); + SetDefault(EzSkinSetting.HitTargetAlpha, 0.3, 0, 1, 0.1); SetDefault(EzSkinSetting.NoteSetName, "evolve"); SetDefault(EzSkinSetting.StageName, "JIYU"); @@ -265,6 +267,8 @@ namespace osu.Game.Screens // Ez专属皮肤设置 HitPosition, + HitTargetFloatFixed, + HitTargetAlpha, VisualHitPosition, NoteHeightScaleToWidth, NoteTrackLineHeight, diff --git a/osu.Game/Screens/EzSkinSettingsTab.cs b/osu.Game/Screens/EzSkinSettingsTab.cs index 32b4e154b4..4e1b882342 100644 --- a/osu.Game/Screens/EzSkinSettingsTab.cs +++ b/osu.Game/Screens/EzSkinSettingsTab.cs @@ -46,8 +46,8 @@ namespace osu.Game.Screens private static readonly Dictionary position_mode_config = new Dictionary { - [true] = (new Color4(0.2f, 0.4f, 0.8f, 0.3f), "强制刷新, 并切换至 绝对位置", "Refresh, Switch to Absolute"), - [false] = (new Color4(0.8f, 0.2f, 0.4f, 0.3f), "强制刷新, 并切换至 相对位置", "Refresh, Switch to Relative") + [true] = (new Color4(0.2f, 0.4f, 0.8f, 0.3f), "SwitchToAbsolute".Localize(), "SwitchToAbsolute".Localize()), + [false] = (new Color4(0.8f, 0.2f, 0.4f, 0.3f), "SwitchToRelative".Localize(), "SwitchToRelative".Localize()) }; private readonly Bindable selectedNoteSet = new Bindable(); @@ -60,11 +60,6 @@ namespace osu.Game.Screens private SettingsButton refreshSkinButton = null!; private bool isAbsolutePosition = true; - // public Bindable HitPosition => ezSkinConfig.GetBindable(EzSkinSetting.HitPosition); - // public Bindable ColumnWidth => ezSkinConfig.GetBindable(EzSkinSetting.ColumnWidth); - // public Bindable SpecialFactor => ezSkinConfig.GetBindable(EzSkinSetting.SpecialFactor); - // public Bindable NoteHeightScaleToWidth => ezSkinConfig.GetBindable(EzSkinSetting.NoteHeightScaleToWidth); - [BackgroundDependencyLoader] private void load() { @@ -73,7 +68,6 @@ namespace osu.Game.Screens loadFolderSets("note"); loadFolderSets("Stage"); - // 设置默认值 setDefaultSelection(selectedNoteSet, availableNoteSets, ezSkinConfig.Get(EzSkinSetting.NoteSetName)); setDefaultSelection(selectedStageSet, availableStageSets, ezSkinConfig.Get(EzSkinSetting.StageName)); createUI(); @@ -88,22 +82,6 @@ namespace osu.Game.Screens selectedStageSet.BindValueChanged(e => ezSkinConfig.SetValue(EzSkinSetting.StageName, e.NewValue)); } - // public Bindable GetNoteSize(int keyMode, int columnIndex, int x = 0) - // { - // bool isSpecialColumn = ezSkinConfig.GetColumnType(keyMode, columnIndex) == "S"; - // double baseWidth = ColumnWidth.Value; - // double specialFactor = SpecialFactor.Value; - // double columnWidth = (baseWidth * (isSpecialColumn ? specialFactor : 1.0)); - // NoteSize.Value = (float)columnWidth; - // - // if (x != 0) - // return NoteSize; - // - // double heightScale = NoteHeightScaleToWidth.Value; - // NoteSize.Value = (float)(columnWidth * heightScale); - // return new Bindable((float)(columnWidth * heightScale)); - // } - private void setDefaultSelection(Bindable bindable, List availableItems, string configuredValue) { if (!string.IsNullOrEmpty(configuredValue) && availableItems.Contains(configuredValue)) @@ -130,83 +108,90 @@ namespace osu.Game.Screens { new SettingsEnumDropdown { - LabelText = "Global Texture Name", - TooltipText = "(全局纹理名称)统一修改当前皮肤中所有组件的纹理名称\n" - + "Set a global texture name for all components in the current skin", + LabelText = "GlobalTextureName".Localize(), + TooltipText = "GlobalTextureNameTooltip".Localize(), Current = globalTextureName, }, new SettingsDropdown { - LabelText = "(面板套图)Stage Set", - TooltipText = "统一指定Stage Bottom, 关联实时BPM\n" - + "Set a stage set for Stage Bottom, related to real-time BPM", + LabelText = "StageSet".Localize(), + TooltipText = "StageSetTooltip".Localize(), Current = selectedStageSet, Items = availableStageSets, }, new SettingsDropdown { - LabelText = "(Note套图)Note Set", - TooltipText = "统一指定note套图, 含note和打击光效\n" - + "Set a note set for all notes and hit effects", + LabelText = "NoteSet".Localize(), + TooltipText = "NoteSetTooltip".Localize(), Current = selectedNoteSet, Items = availableNoteSets, }, new SettingsEnumDropdown { - LabelText = "Column Width Style(列宽风格)", - TooltipText = "不完善!全局总列宽=设置值×10\n" - + "Global Total Column Width = Configured Value × 10", + LabelText = "ColumnWidthStyle".Localize(), + TooltipText = "ColumnWidthStyleTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.ColumnWidthStyle), }, new SettingsSlider { - LabelText = "Column Width (轨道宽度)", - TooltipText = "设置每列的宽度", + LabelText = "ColumnWidth".Localize(), + TooltipText = "ColumnWidthTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.ColumnWidth), KeyboardStep = 1.0f, }, new SettingsSlider { - LabelText = "Special Factor (特殊轨道倍率)", - TooltipText = "特殊列关联S1类型, 可自定义" - + "\nSpecial columns are associated with S1 type, customizable", + LabelText = "SpecialFactor".Localize(), + TooltipText = "SpecialFactorTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.SpecialFactor), KeyboardStep = 0.1f, }, new SettingsCheckbox { - LabelText = "Global HitPosition", - TooltipText = "全局判定线位置开关", + LabelText = "GlobalHitPosition".Localize(), + TooltipText = "GlobalHitPositionTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.GlobalHitPosition), }, new SettingsSlider { - LabelText = "Hit Position (可视判定线位置)", - TooltipText = "设置判定线位置", + LabelText = "HitPosition".Localize(), + TooltipText = "HitPositionTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.HitPosition), KeyboardStep = 1f, }, new SettingsSlider { - LabelText = "Note Height Scale (note 高度比例)", - TooltipText = "统一修改note的高度的比例\n" - + "Fixed Height for square notes", + LabelText = "HitTargetFloatFixed".Localize(), + TooltipText = "HitTargetFloatFixedTooltip".Localize(), + Current = ezSkinConfig.GetBindable(EzSkinSetting.HitTargetFloatFixed), + KeyboardStep = 0.1f, + }, + new SettingsSlider + { + LabelText = "HitTargetAlpha".Localize(), + TooltipText = "HitTargetAlphaTooltip".Localize(), + Current = ezSkinConfig.GetBindable(EzSkinSetting.HitTargetAlpha), + KeyboardStep = 0.1f, + }, + new SettingsSlider + { + LabelText = "NoteHeightScale".Localize(), + TooltipText = "NoteHeightScaleTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.NoteHeightScaleToWidth), KeyboardStep = 0.1f, }, new SettingsSlider { - LabelText = "Note Track Line", - TooltipText = "note两侧辅助轨道线的高度\n" - + "note side auxiliary track line height", + LabelText = "NoteTrackLine".Localize(), + TooltipText = "NoteTrackLineTooltip".Localize(), Current = ezSkinConfig.GetBindable(EzSkinSetting.NoteTrackLineHeight), }, refreshSkinButton = new SettingsButton { Action = RefreshSkin, - TooltipText = "强制刷新、保存皮肤,\n" - + "Refresh & Save Skin" - }.WithTwoLineText("强制刷新, 保存皮肤", "Refresh & Save Skin", 16) + Text = "RefreshSaveSkin".Localize(), + TooltipText = "RefreshSaveSkin".Localize() + } } } }; @@ -219,7 +204,7 @@ namespace osu.Game.Screens isAbsolutePosition = !isAbsolutePosition; skinManager.CurrentSkinInfo.TriggerChange(); // skinManager.Save(skinManager.CurrentSkin.Value); - // updateButtonAppearance(); + updateButtonAppearance(); } private void updateButtonAppearance() diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 073a0d4021..46a98dd5da 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -13,6 +13,7 @@ using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Extensions.LocalisationExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; using osu.Framework.Logging; @@ -46,6 +47,7 @@ namespace osu.Game.Screens.Menu public Action? OnSolo; public Action? OnSettings; public Action? OnMultiplayer; + public Action? OnMatchmaking; public Action? OnPlaylists; public Action? OnDailyChallenge; @@ -84,6 +86,7 @@ namespace osu.Game.Screens.Menu private readonly List buttonsTopLevel = new List(); private readonly List buttonsPlay = new List(); + private readonly List buttonsMulti = new List(); private readonly List buttonsEdit = new List(); private Sample? sampleBackToLogo; @@ -109,7 +112,19 @@ namespace osu.Game.Screens.Menu { Padding = new MarginPadding { Right = WEDGE_WIDTH }, }, - backButton = new MainMenuButton(ButtonSystemStrings.Back, @"back-to-top", OsuIcon.PrevCircle, new Color4(51, 58, 94, 255), (_, _) => State = ButtonSystemState.TopLevel) + backButton = new MainMenuButton(ButtonSystemStrings.Back, @"back-to-top", OsuIcon.PrevCircle, new Color4(51, 58, 94, 255), (_, _) => + { + switch (State) + { + case ButtonSystemState.Multi: + State = ButtonSystemState.Play; + break; + + default: + State = ButtonSystemState.TopLevel; + break; + } + }) { Padding = new MarginPadding { Right = WEDGE_WIDTH }, VisibleStateMin = ButtonSystemState.Play, @@ -137,28 +152,39 @@ namespace osu.Game.Screens.Menu { Padding = new MarginPadding { Left = WEDGE_WIDTH }, }); - buttonsPlay.Add(new MainMenuButton(ButtonSystemStrings.Multi, @"button-default-select", OsuIcon.Online, new Color4(94, 63, 186, 255), onMultiplayer, Key.M)); + buttonsPlay.Add(new MainMenuButton(ButtonSystemStrings.Multi, @"button-default-select", OsuIcon.Online, new Color4(94, 63, 186, 255), (_, _) => State = ButtonSystemState.Multi, Key.M)); buttonsPlay.Add(new MainMenuButton(ButtonSystemStrings.Playlists, @"button-default-select", OsuIcon.Tournament, new Color4(94, 63, 186, 255), onPlaylists, Key.L)); buttonsPlay.Add(new DailyChallengeButton(@"button-daily-select", new Color4(94, 63, 186, 255), onDailyChallenge, Key.D)); buttonsPlay.ForEach(b => b.VisibleState = ButtonSystemState.Play); - buttonsEdit.Add(new MainMenuButton(EditorStrings.BeatmapEditor.ToLower(), @"button-default-select", OsuIcon.Beatmap, new Color4(238, 170, 0, 255), (_, _) => OnEditBeatmap?.Invoke(), Key.B, Key.E) + buttonsMulti.Add(new MainMenuButton("lounge", @"button-default-select", FontAwesome.Solid.Couch, new Color4(94, 63, 186, 255), onMultiplayer, Key.L, Key.M) + { + Padding = new MarginPadding { Left = WEDGE_WIDTH } + }); + buttonsMulti.Add(new MainMenuButton("quick play", @"button-default-select", FontAwesome.Solid.Bolt, new Color4(94, 63, 186, 255), onMatchmaking, Key.Q)); + buttonsMulti.ForEach(b => b.VisibleState = ButtonSystemState.Multi); + + buttonsEdit.Add(new MainMenuButton(EditorStrings.BeatmapEditor.ToLower(), @"button-default-select", OsuIcon.Beatmap, new Color4(238, 170, 0, 255), (_, _) => OnEditBeatmap?.Invoke(), Key.B, + Key.E) { Padding = new MarginPadding { Left = WEDGE_WIDTH }, }); buttonsEdit.Add(new MainMenuButton(SkinEditorStrings.SkinEditor.ToLower(), @"button-default-select", OsuIcon.SkinB, new Color4(220, 160, 0, 255), (_, _) => OnEditSkin?.Invoke(), Key.S)); buttonsEdit.ForEach(b => b.VisibleState = ButtonSystemState.Edit); - buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Play, @"button-play-select", OsuIcon.Logo, new Color4(102, 68, 204, 255), (_, _) => State = ButtonSystemState.Play, Key.P, Key.M, Key.L) + buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Play, @"button-play-select", OsuIcon.Logo, new Color4(102, 68, 204, 255), (_, _) => State = ButtonSystemState.Play, Key.P, Key.M, + Key.L) { Padding = new MarginPadding { Left = WEDGE_WIDTH }, }); buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Edit, @"button-play-select", OsuIcon.EditCircle, new Color4(238, 170, 0, 255), (_, _) => State = ButtonSystemState.Edit, Key.E)); - buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Browse, @"button-default-select", OsuIcon.Beatmap, new Color4(165, 204, 0, 255), (_, _) => OnBeatmapListing?.Invoke(), Key.B, Key.D)); + buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Browse, @"button-default-select", OsuIcon.Beatmap, new Color4(165, 204, 0, 255), (_, _) => OnBeatmapListing?.Invoke(), Key.B, + Key.D)); if (host.CanExit) buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Exit, string.Empty, OsuIcon.CrossCircle, new Color4(238, 51, 153, 255), (_, e) => OnExit?.Invoke(e), Key.Q)); + buttonArea.AddRange(buttonsMulti); buttonArea.AddRange(buttonsPlay); buttonArea.AddRange(buttonsEdit); buttonArea.AddRange(buttonsTopLevel); @@ -191,6 +217,17 @@ namespace osu.Game.Screens.Menu OnMultiplayer?.Invoke(); } + private void onMatchmaking(MainMenuButton mainMenuButton, UIEvent uiEvent) + { + if (api.State.Value != APIState.Online) + { + loginOverlay?.Show(); + return; + } + + OnMatchmaking?.Invoke(); + } + private void onPlaylists(MainMenuButton mainMenuButton, UIEvent uiEvent) { if (api.State.Value != APIState.Online) @@ -315,6 +352,7 @@ namespace osu.Game.Screens.Menu case ButtonSystemState.Edit: case ButtonSystemState.Play: + case ButtonSystemState.Multi: StopSamplePlayback(); backButton.TriggerClick(); return true; @@ -327,6 +365,7 @@ namespace osu.Game.Screens.Menu public void StopSamplePlayback() { buttonsPlay.ForEach(button => button.StopSamplePlayback()); + buttonsMulti.ForEach(button => button.StopSamplePlayback()); buttonsTopLevel.ForEach(button => button.StopSamplePlayback()); logo?.StopSamplePlayback(); } @@ -350,6 +389,10 @@ namespace osu.Game.Screens.Menu buttonsPlay.First().TriggerClick(); return false; + case ButtonSystemState.Multi: + buttonsPlay.First().TriggerClick(); + return false; + case ButtonSystemState.Edit: buttonsEdit.First().TriggerClick(); return false; @@ -471,6 +514,7 @@ namespace osu.Game.Screens.Menu Initial, TopLevel, Play, + Multi, Edit, EnteringMode, } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index bc3bcbd800..c74b60c5d7 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -37,6 +37,7 @@ using osu.Game.Rulesets; using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Edit; using osu.Game.Screens.OnlinePlay.DailyChallenge; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens; using osu.Game.Screens.OnlinePlay.Multiplayer; using osu.Game.Screens.OnlinePlay.Playlists; using osu.Game.Screens.SelectV2; @@ -159,6 +160,7 @@ namespace osu.Game.Screens.Menu }, OnSolo = loadSongSelect, OnMultiplayer = () => this.Push(new Multiplayer()), + OnMatchmaking = joinOrLeaveMatchmakingQueue, OnPlaylists = () => this.Push(new Playlists()), OnDailyChallenge = room => { @@ -481,6 +483,8 @@ namespace osu.Game.Screens.Menu private void loadSongSelect() => this.Push(new SoloSongSelect()); + private void joinOrLeaveMatchmakingQueue() => this.Push(new MatchmakingIntroScreen()); + private partial class MobileDisclaimerDialog : PopupDialog { public MobileDisclaimerDialog(Action confirmed) diff --git a/osu.Game/Screens/Menu/MenuTipDisplay.cs b/osu.Game/Screens/Menu/MenuTipDisplay.cs index 7e538995b2..d9c90b069d 100644 --- a/osu.Game/Screens/Menu/MenuTipDisplay.cs +++ b/osu.Game/Screens/Menu/MenuTipDisplay.cs @@ -118,7 +118,7 @@ namespace osu.Game.Screens.Menu .FadeOutFromOne(2000, Easing.OutQuint); } - private const int available_tips = 29; + private const int available_tips = 30; private LocalisableString getRandomTip() { @@ -216,6 +216,9 @@ namespace osu.Game.Screens.Menu case 28: return MenuTipStrings.RightMouseAbsoluteScroll; + + case 29: + return MenuTipStrings.ShiftClickInBeatmapOverlay; } return string.Empty; diff --git a/osu.Game/Screens/OnlinePlay/Header.cs b/osu.Game/Screens/OnlinePlay/Header.cs index 860042fd37..825f809397 100644 --- a/osu.Game/Screens/OnlinePlay/Header.cs +++ b/osu.Game/Screens/OnlinePlay/Header.cs @@ -16,7 +16,7 @@ namespace osu.Game.Screens.OnlinePlay { public partial class Header : Container { - public const float HEIGHT = 80; + public const float HEIGHT = 50; private readonly ScreenStack? stack; private readonly MultiHeaderTitle title; diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/DrawableRoomParticipantsList.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/DrawableRoomParticipantsList.cs index 5bcc974c26..135b2b4db2 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/DrawableRoomParticipantsList.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/DrawableRoomParticipantsList.cs @@ -23,10 +23,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { public partial class DrawableRoomParticipantsList : CompositeDrawable { - public const float SHEAR_WIDTH = 12f; - private const float avatar_size = 36; - private const float height = 60f; - private static readonly Vector2 shear = new Vector2(SHEAR_WIDTH / height, 0); + private const float avatar_size = 30; + private const float height = 40f; private readonly Room room; @@ -54,7 +52,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components RelativeSizeAxes = Axes.Both, Masking = true, CornerRadius = 10, - Shear = shear, + Shear = OsuGame.SHEAR, Child = new Box { RelativeSizeAxes = Axes.Both, @@ -71,10 +69,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { RelativeSizeAxes = Axes.Y, AutoSizeAxes = Axes.X, - Spacing = new Vector2(8), + Spacing = new Vector2(4), Padding = new MarginPadding { - Left = 8, + Left = 4, Right = 16 }, Children = new Drawable[] @@ -84,7 +82,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, }, - hostText = new LinkFlowContainer + hostText = new LinkFlowContainer(s => s.Font = OsuFont.Style.Caption2) { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, @@ -103,7 +101,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components RelativeSizeAxes = Axes.Both, Masking = true, CornerRadius = 10, - Shear = shear, + Shear = OsuGame.SHEAR, Child = new Box { RelativeSizeAxes = Axes.Both, @@ -128,12 +126,12 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, - Size = new Vector2(16), + Size = new Vector2(12), Icon = FontAwesome.Solid.User, }, totalCount = new OsuSpriteText { - Font = OsuFont.Default.With(weight: FontWeight.Bold), + Font = OsuFont.Style.Caption2.With(weight: FontWeight.Bold), Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, }, diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/EndDateInfo.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/EndDateInfo.cs index 3b03ce61f1..4a98efb225 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/EndDateInfo.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/EndDateInfo.cs @@ -6,6 +6,7 @@ using System.ComponentModel; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Localisation; using osu.Game.Graphics; using osu.Game.Online.Rooms; @@ -62,7 +63,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components Date = room.EndDate ?? DateTimeOffset.Now.AddYears(1); } - protected override string Format() + protected override LocalisableString Format() { if (room.EndDate == null) return string.Empty; @@ -70,7 +71,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components var diffToNow = Date.Subtract(DateTimeOffset.Now); if (diffToNow.TotalSeconds < -5) - return $"Closed {base.Format()}"; + return LocalisableString.Interpolate($"Closed {base.Format()}"); if (diffToNow.TotalSeconds < 0) return "Closed"; @@ -78,7 +79,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components if (diffToNow.TotalSeconds < 5) return "Closing soon"; - return $"Closing {base.Format()}"; + return LocalisableString.Interpolate($"Closing {base.Format()}"); } protected override void Dispose(bool isDisposing) diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomListing.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomListing.cs index 14edd13ec5..f04de97f9b 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomListing.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomListing.cs @@ -45,8 +45,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components private readonly ScrollContainer scroll; private readonly FillFlowContainer roomFlow; - private const float display_scale = 0.8f; - // handle deselection public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => true; @@ -58,7 +56,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components RelativeSizeAxes = Axes.Both, Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, - Width = display_scale, + Width = 0.8f, ScrollbarOverlapsContent = false, Padding = new MarginPadding { Right = 5 }, Child = new OsuContextMenuContainer @@ -188,14 +186,11 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components SelectedRoom = selectedRoom, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Scale = new Vector2(display_scale), - Width = 1 / display_scale, }; roomFlow.Add(drawableRoom); - // Always show spotlight playlists at the top of the listing. - roomFlow.SetLayoutPosition(drawableRoom, room.Category > RoomCategory.Normal ? float.MinValue : -(room.RoomID ?? 0)); + roomFlow.SetLayoutPosition(drawableRoom, room.Pinned ? float.MinValue : -(room.RoomID ?? 0)); } applyFilterCriteria(Filter.Value); diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPanel.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPanel.cs index 3610995b2c..fe03fca4b8 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPanel.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomPanel.cs @@ -31,7 +31,6 @@ using osu.Game.Online.Rooms; using osu.Game.Overlays; using osu.Game.Screens.OnlinePlay.Components; using osuTK; -using osuTK.Graphics; using Container = osu.Framework.Graphics.Containers.Container; namespace osu.Game.Screens.OnlinePlay.Lounge.Components @@ -39,7 +38,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components public abstract partial class RoomPanel : CompositeDrawable, IHasContextMenu { protected const float CORNER_RADIUS = 10; - private const float height = 100; + private const float height = 80; [Resolved] private IAPIProvider api { get; set; } = null!; @@ -59,7 +58,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components private DrawableRoomParticipantsList? drawableRoomParticipantsList; private RoomSpecialCategoryPill? specialCategoryPill; - private PasswordProtectedIcon? passwordIcon; + private CornerIcon? passwordIcon; + private CornerIcon? pinnedIcon; private EndDateInfo? endDateInfo; private RoomNameLine? roomName; private DelayedLoadWrapper wrapper = null!; @@ -79,16 +79,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components Masking = true; CornerRadius = CORNER_RADIUS; - EdgeEffect = new EdgeEffectParameters - { - Type = EdgeEffectType.Shadow, - Colour = Color4.Black.Opacity(40), - Radius = 5, - }; } [BackgroundDependencyLoader] - private void load(OverlayColourProvider colours) + private void load(OverlayColourProvider colourProvider, OsuColour colours) { ButtonsContainer = new Container { @@ -98,13 +92,20 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components AutoSizeAxes = Axes.X }; + EdgeEffect = new EdgeEffectParameters + { + Type = EdgeEffectType.Shadow, + Colour = colourProvider.Background6.Opacity(0.4f), + Radius = 4, + }; + InternalChildren = new Drawable[] { // This resolves internal 1px gaps due to applying the (parenting) corner radius and masking across multiple filling background sprites. new Box { RelativeSizeAxes = Axes.Both, - Colour = colours.Background5, + Colour = colourProvider.Background5, }, CreateBackground().With(d => { @@ -117,7 +118,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components Name = @"Room content", RelativeSizeAxes = Axes.Both, // This negative padding resolves 1px gaps between this background and the background above. - Padding = new MarginPadding { Left = 20, Vertical = -0.5f }, + Padding = new MarginPadding { Left = 10, Vertical = -0.5f }, Child = new Container { RelativeSizeAxes = Axes.Both, @@ -128,7 +129,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components new Box { RelativeSizeAxes = Axes.Both, - Colour = colours.Background5, + Colour = colourProvider.Background5, Width = 0.2f, }, new Box @@ -136,7 +137,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components Anchor = Anchor.TopRight, Origin = Anchor.TopRight, RelativeSizeAxes = Axes.Both, - Colour = ColourInfo.GradientHorizontal(colours.Background5, colours.Background5.Opacity(0.3f)), + Colour = ColourInfo.GradientHorizontal(colourProvider.Background5, colourProvider.Background5.Opacity(0.3f)), Width = 0.8f, }, new GridContainer @@ -157,8 +158,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { - Left = 20, - Right = DrawableRoomParticipantsList.SHEAR_WIDTH, + Left = 10, + Right = 10, Vertical = 5 }, Children = new Drawable[] @@ -254,7 +255,28 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components } } }, - passwordIcon = new PasswordProtectedIcon { Alpha = 0 } + passwordIcon = new CornerIcon + { + Alpha = 0, + Background = { Colour = colours.Gray8, }, + Icon = + { + Icon = FontAwesome.Solid.Lock, + Colour = colours.Gray3, + Rotation = 45, + }, + }, + pinnedIcon = new CornerIcon + { + Alpha = 0, + Background = { Colour = colours.Orange2 }, + Icon = + { + Icon = FontAwesome.Solid.Thumbtack, + Colour = colours.Gray3, + Rotation = 45, + }, + } }, }, }, 0) @@ -283,6 +305,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components updateRoomCategory(); updateRoomType(); updateRoomHasPassword(); + updateRoomPinned(); }; SelectedItem.BindValueChanged(onSelectedItemChanged, true); @@ -311,6 +334,10 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components case nameof(Room.HasPassword): updateRoomHasPassword(); break; + + case nameof(Room.Pinned): + updateRoomPinned(); + break; } } @@ -371,6 +398,12 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components passwordIcon.Alpha = Room.HasPassword ? 1 : 0; } + private void updateRoomPinned() + { + if (pinnedIcon != null) + pinnedIcon.Alpha = Room.Pinned ? 1 : 0; + } + private int numberOfAvatars = 7; public int NumberOfAvatars @@ -483,12 +516,12 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { statusText = new OsuSpriteText { - Font = OsuFont.Default.With(size: 16), + Font = OsuFont.Style.Caption2, Colour = colours.Lime1 }, beatmapText = new LinkFlowContainer(s => { - s.Font = OsuFont.Default.With(size: 16); + s.Font = OsuFont.Style.Caption2; s.Colour = colours.Lime1; }) { @@ -534,10 +567,12 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components } } - public partial class PasswordProtectedIcon : CompositeDrawable + public partial class CornerIcon : CompositeDrawable { - [BackgroundDependencyLoader] - private void load(OsuColour colours) + public SpriteIcon Icon { get; } + public Box Background { get; } + + public CornerIcon() { Anchor = Anchor.TopRight; Origin = Anchor.TopRight; @@ -546,20 +581,19 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components InternalChildren = new Drawable[] { - new Box + Background = new Box { Anchor = Anchor.TopRight, Origin = Anchor.TopCentre, - Colour = colours.Gray5, Rotation = 45, RelativeSizeAxes = Axes.Both, Width = 2, }, - new SpriteIcon + Icon = new SpriteIcon { - Icon = FontAwesome.Solid.Lock, Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, + Origin = Anchor.Centre, + Position = new Vector2(-13, 13), Margin = new MarginPadding(6), Size = new Vector2(14), } @@ -602,7 +636,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components { Anchor = Anchor.BottomLeft, Origin = Anchor.BottomLeft, - Font = OsuFont.GetFont(size: 28), + Font = OsuFont.Style.Heading2, }, linkButton = new ExternalLinkButton { diff --git a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs index a4e808ff76..b4b039501f 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/LoungeSubScreen.cs @@ -173,7 +173,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge { d.Anchor = Anchor.BottomLeft; d.Origin = Anchor.BottomLeft; - d.Size = new Vector2(150, 37.5f); + d.Size = new Vector2(150, 30f); d.Action = () => Open(); })), new FillFlowContainer diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingAvatar.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingAvatar.cs new file mode 100644 index 0000000000..e3d314844f --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingAvatar.cs @@ -0,0 +1,68 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Users.Drawables; +using osuTK; +using osuTK.Graphics; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class MatchmakingAvatar : CompositeDrawable + { + public static readonly Vector2 SIZE = new Vector2(30); + + private readonly APIUser user; + private readonly bool isOwnUser; + + public MatchmakingAvatar(APIUser user, bool isOwnUser = false) + { + this.user = user; + this.isOwnUser = isOwnUser; + + Size = SIZE; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colour) + { + if (isOwnUser) + { + AddInternal(new Container + { + RelativeSizeAxes = Axes.Both, + Depth = float.MaxValue, + Padding = new MarginPadding(-2), + Child = new FastCircle + { + RelativeSizeAxes = Axes.Both, + Colour = colour.Yellow, + } + }); + } + + AddInternal(new CircularContainer + { + RelativeSizeAxes = Axes.Both, + Masking = true, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4.LightSlateGray, + }, + new ClickableAvatar(user, true) + { + RelativeSizeAxes = Axes.Both, + } + } + }); + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingCloud.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingCloud.cs new file mode 100644 index 0000000000..3fab5ab207 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingCloud.cs @@ -0,0 +1,152 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Utils; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Screens.Ranking; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class MatchmakingCloud : CompositeDrawable + { + private APIUser[] users = []; + private Container usersContainer = null!; + + private readonly Bindable lastSamplePlayback = new Bindable(); + + public APIUser[] Users + { + get => users; + set + { + users = value; + + foreach (var u in usersContainer) + u.Delay(RNG.Next(0, 1000)).FadeOut(500).Expire(); + + LoadComponentsAsync(users.Select(u => new MovingAvatar(u, lastSamplePlayback)), avatars => + { + if (usersContainer.Count == 0) + { + usersContainer.ScaleTo(0) + .ScaleTo(1, 5000, Easing.OutPow10); + } + + usersContainer.AddRange(avatars); + }); + } + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + InternalChildren = new Drawable[] + { + usersContainer = new AspectContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.X, + }, + }; + } + + public partial class MovingAvatar : MatchmakingAvatar + { + private float angle; + private float angularSpeed; + + private float targetSpeed; + private float targetScale; + private float targetAlpha; + + private readonly Bindable lastSamplePlayback = new Bindable(); + + private const int num_appear_samples = 6; + private Sample? playerAppearSample; + + public MovingAvatar(APIUser apiUser, Bindable lastSamplePlayback) + : base(apiUser) + { + RelativePositionAxes = Axes.Both; + Scale = new Vector2(2); + + Origin = Anchor.Centre; + this.lastSamplePlayback.BindTo(lastSamplePlayback); + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + playerAppearSample = audio.Samples.Get($@"Multiplayer/Matchmaking/Cloud/appear-{RNG.Next(0, num_appear_samples)}"); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + updateParams(); + + angle = RNG.NextSingle(0f, MathF.Tau); + + angularSpeed = targetSpeed; + Scale = new Vector2(targetScale); + + Hide(); + int appearDelay = RNG.Next(0, 1000); + this.Delay(appearDelay).FadeTo(targetAlpha, 2000, Easing.OutQuint); + Scheduler.AddDelayed(playAppearSample, appearDelay); + } + + private void updateParams() + { + targetSpeed = RNG.NextSingle(0.05f, 0.5f); + targetScale = RNG.NextSingle(0.2f, 3f); + targetAlpha = RNG.NextSingle(0.5f, 1f); + + Scheduler.AddDelayed(updateParams, RNG.Next(500, 5000)); + } + + private void playAppearSample() + { + bool enoughTimeElapsed = !lastSamplePlayback.Value.HasValue || Time.Current - lastSamplePlayback.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME; + if (!enoughTimeElapsed) return; + + var chan = playerAppearSample?.GetChannel(); + if (chan == null) return; + + chan.Frequency.Value = 0.5f + RNG.NextDouble(1.5f); + chan.Balance.Value = MathF.Cos(angle) * OsuGameBase.SFX_STEREO_STRENGTH; + chan.Play(); + + lastSamplePlayback.Value = Time.Current; + } + + protected override void Update() + { + base.Update(); + + float elapsed = (float)Math.Min(20, Time.Elapsed) / 1000; + + Scale = new Vector2((float)Interpolation.Lerp(Scale.X, targetScale, elapsed / 100)); + Alpha = (float)Interpolation.Lerp(Alpha, targetAlpha, elapsed / 100); + angularSpeed = (float)Interpolation.Lerp(angularSpeed, targetSpeed, elapsed / 100); + + angle += angularSpeed * elapsed * 0.5f; + + Position = new Vector2(0.5f) + + new Vector2(MathF.Cos(angle), MathF.Sin(angle)) * angularSpeed; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingController.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingController.cs new file mode 100644 index 0000000000..1a426501d7 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingController.cs @@ -0,0 +1,164 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Screens; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Rooms; +using osu.Game.Overlays; +using osu.Game.Overlays.Notifications; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class MatchmakingController : Component + { + public readonly Bindable CurrentState = new Bindable(); + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + [Resolved] + private INotificationOverlay? notifications { get; set; } + + [Resolved] + private IPerformFromScreenRunner? performer { get; set; } + + private ProgressNotification? backgroundNotification; + private Notification? readyNotification; + private bool isBackgrounded; + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.RoomUpdated += onRoomUpdated; + client.MatchmakingQueueJoined += onMatchmakingQueueJoined; + client.MatchmakingQueueLeft += onMatchmakingQueueLeft; + client.MatchmakingRoomInvited += onMatchmakingRoomInvited; + client.MatchmakingRoomReady += onMatchmakingRoomReady; + } + + public void SearchInBackground() + { + if (isBackgrounded) + return; + + isBackgrounded = true; + postNotification(); + } + + public void SearchInForeground() + { + if (!isBackgrounded) + return; + + isBackgrounded = false; + closeNotifications(); + } + + private void onRoomUpdated() => Scheduler.Add(() => + { + if (client.Room == null) + CurrentState.Value = MatchmakingQueueScreen.MatchmakingScreenState.Idle; + }); + + private void onMatchmakingQueueJoined() => Scheduler.Add(() => + { + CurrentState.Value = MatchmakingQueueScreen.MatchmakingScreenState.Queueing; + + if (isBackgrounded) + { + closeNotifications(); + postNotification(); + } + }); + + private void onMatchmakingQueueLeft() => Scheduler.Add(() => + { + if (CurrentState.Value != MatchmakingQueueScreen.MatchmakingScreenState.InRoom) + CurrentState.Value = MatchmakingQueueScreen.MatchmakingScreenState.Idle; + + closeNotifications(); + }); + + private void onMatchmakingRoomInvited() => Scheduler.Add(() => + { + CurrentState.Value = MatchmakingQueueScreen.MatchmakingScreenState.PendingAccept; + + if (backgroundNotification != null) + { + backgroundNotification.State = ProgressNotificationState.Completed; + backgroundNotification = null; + } + }); + + private void onMatchmakingRoomReady(long roomId, string password) => Scheduler.Add(() => + { + client.JoinRoom(new Room { RoomID = roomId }, password) + .FireAndForget(() => Scheduler.Add(() => + { + CurrentState.Value = MatchmakingQueueScreen.MatchmakingScreenState.InRoom; + })); + }); + + private void postNotification() + { + if (backgroundNotification != null) + return; + + notifications?.Post(backgroundNotification = new ProgressNotification + { + Text = "Searching for opponents...", + CompletionTarget = n => notifications.Post(readyNotification = n), + CompletionText = "Your match is ready! Click to join.", + CompletionClickAction = () => + { + client.MatchmakingAcceptInvitation().FireAndForget(); + performer?.PerformFromScreen(s => s.Push(new MatchmakingIntroScreen())); + + closeNotifications(); + return true; + }, + CancelRequested = () => + { + client.MatchmakingLeaveQueue().FireAndForget(); + + closeNotifications(); + return true; + } + }); + } + + private void closeNotifications() + { + if (backgroundNotification != null) + { + backgroundNotification.State = ProgressNotificationState.Cancelled; + backgroundNotification.Close(false); + } + + readyNotification?.Close(false); + + backgroundNotification = null; + readyNotification = null; + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + { + client.RoomUpdated -= onRoomUpdated; + client.MatchmakingQueueJoined -= onMatchmakingQueueJoined; + client.MatchmakingQueueLeft -= onMatchmakingQueueLeft; + client.MatchmakingRoomInvited -= onMatchmakingRoomInvited; + client.MatchmakingRoomReady -= onMatchmakingRoomReady; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPlayer.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPlayer.cs new file mode 100644 index 0000000000..af19aa1252 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPlayer.cs @@ -0,0 +1,31 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Threading.Tasks; +using osu.Framework.Screens; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Rooms; +using osu.Game.Scoring; +using osu.Game.Screens.OnlinePlay.Multiplayer; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class MatchmakingPlayer : MultiplayerPlayer + { + public MatchmakingPlayer(Room room, PlaylistItem playlistItem, MultiplayerRoomUser[] users) + : base(room, playlistItem, users) + { + } + + protected override async Task PrepareScoreForResultsAsync(Score score) + { + await base.PrepareScoreForResultsAsync(score).ConfigureAwait(false); + + Scheduler.Add(() => + { + if (this.IsCurrentScreen()) + this.Exit(); + }); + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPoolSelector.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPoolSelector.cs new file mode 100644 index 0000000000..43e6acfaf7 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingPoolSelector.cs @@ -0,0 +1,147 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osu.Game.Online.Matchmaking; +using osu.Game.Rulesets; +using osuTK; +using osuTK.Graphics; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class MatchmakingPoolSelector : CompositeDrawable + { + private const float icon_size = 36; + + public readonly Bindable AvailablePools = new Bindable(); + public readonly Bindable SelectedPool = new Bindable(); + + private FillFlowContainer poolFlow = null!; + + public MatchmakingPoolSelector() + { + AutoSizeAxes = Axes.Both; + } + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = poolFlow = new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Horizontal, + Spacing = new Vector2(3) + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + AvailablePools.BindValueChanged(pools => + { + poolFlow.Clear(); + foreach (var p in pools.NewValue) + poolFlow.Add(new SelectorButton(p) { SelectedPool = { BindTarget = SelectedPool } }); + }, true); + } + + private partial class SelectorButton : CompositeDrawable + { + public readonly Bindable SelectedPool = new Bindable(); + + [Resolved] + private RulesetStore rulesetStore { get; set; } = null!; + + private readonly MatchmakingPool pool; + private Drawable iconSprite = null!; + + public SelectorButton(MatchmakingPool pool) + { + this.pool = pool; + + Size = new Vector2(icon_size); + } + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new OsuAnimatedButton + { + RelativeSizeAxes = Axes.Both, + Child = iconSprite = createIcon(), + Action = () => SelectedPool.Value = pool + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + SelectedPool.BindValueChanged(onSelectionChanged, true); + FinishTransforms(true); + } + + private void onSelectionChanged(ValueChangedEvent selection) + { + if (selection.NewValue?.Equals(pool) == true) + iconSprite.FadeColour(Color4.Gold, 100, Easing.OutQuint); + else + iconSprite.FadeColour(OsuColour.Gray(0.5f), 100); + } + + private Drawable createIcon() + { + Ruleset? rulesetInstance = rulesetStore.GetRuleset(pool.RulesetId)?.CreateInstance(); + if (rulesetInstance == null) + return Empty(); + + Drawable icon = rulesetInstance.CreateIcon().With(d => d.RelativeSizeAxes = Axes.Both); + + if (pool.Variant == 0) + return icon; + + return new BufferedContainer + { + RelativeSizeAxes = Axes.Both, + Children = new[] + { + icon, + new Container + { + Anchor = Anchor.BottomRight, + Origin = Anchor.BottomRight, + Size = new Vector2(14, 10), + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + }, + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = $"{pool.Variant}K", + Font = OsuFont.Default.With(size: 8, fixedWidth: true, weight: FontWeight.Bold), + UseFullGlyphHeight = false, + Blending = new BlendingParameters + { + AlphaEquation = BlendingEquation.ReverseSubtract + } + } + } + } + } + }; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingScreen.cs new file mode 100644 index 0000000000..ba2e5593bf --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/MatchmakingScreen.cs @@ -0,0 +1,337 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Linq; +using System.Threading; +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Extensions; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Logging; +using osu.Framework.Screens; +using osu.Game.Beatmaps; +using osu.Game.Database; +using osu.Game.Graphics.Cursor; +using osu.Game.Graphics.UserInterfaceV2; +using osu.Game.Online; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Rooms; +using osu.Game.Overlays; +using osu.Game.Overlays.Dialog; +using osu.Game.Rulesets; +using osu.Game.Screens.Footer; +using osu.Game.Screens.OnlinePlay.Match.Components; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens; +using osu.Game.Screens.OnlinePlay.Multiplayer; +using osu.Game.Users; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class MatchmakingScreen : OsuScreen + { + /// + /// Padding between rows of the content. + /// + private const float row_padding = 10; + + public override bool? ApplyModTrackAdjustments => true; + + public override bool DisallowExternalBeatmapRulesetChanges => true; + + public override bool ShowFooter => true; + + [Cached(typeof(OnlinePlayBeatmapAvailabilityTracker))] + private readonly OnlinePlayBeatmapAvailabilityTracker beatmapAvailabilityTracker = new MultiplayerBeatmapAvailabilityTracker(); + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + [Resolved] + private BeatmapManager beatmapManager { get; set; } = null!; + + [Resolved] + private RulesetStore rulesets { get; set; } = null!; + + [Resolved] + private BeatmapLookupCache beatmapLookupCache { get; set; } = null!; + + [Resolved] + private BeatmapModelDownloader beatmapDownloader { get; set; } = null!; + + [Resolved] + private IDialogOverlay dialogOverlay { get; set; } = null!; + + private readonly MultiplayerRoom room; + + private CancellationTokenSource? downloadCheckCancellation; + private int? lastDownloadCheckedBeatmapId; + + public MatchmakingScreen(MultiplayerRoom room) + { + this.room = room; + + Activity.Value = new UserActivity.InLobby(room); + Padding = new MarginPadding { Horizontal = -HORIZONTAL_OVERFLOW_PADDING }; + } + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new OsuContextMenuContainer + { + RelativeSizeAxes = Axes.Both, + Child = new PopoverContainer + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + beatmapAvailabilityTracker, + new MultiplayerRoomSounds(), + new GridContainer + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding + { + Horizontal = WaveOverlayContainer.WIDTH_PADDING, + Bottom = ScreenFooter.HEIGHT + 20 + }, + RowDimensions = new[] + { + new Dimension(), + new Dimension(GridSizeMode.Absolute, row_padding), + new Dimension(GridSizeMode.AutoSize), + }, + Content = new Drawable[]?[] + { + [ + new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = 10, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4Extensions.FromHex(@"3e3a44") // Temporary. + }, + new MatchmakingScreenStack(), + } + } + ], + null, + [ + new Container + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Children = new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.X, + Height = 100, + Padding = new MarginPadding + { + Horizontal = 200, + }, + Child = new MatchChatDisplay(new Room(room)) + { + RelativeSizeAxes = Axes.Both, + } + }, + new RoundedButton + { + Anchor = Anchor.BottomRight, + Origin = Anchor.BottomRight, + Text = "Don't click me", + Size = new Vector2(100, 30), + Action = () => client.MatchmakingSkipToNextStage() + } + } + } + ] + } + } + } + } + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.RoomUpdated += onRoomUpdated; + client.UserStateChanged += onUserStateChanged; + client.SettingsChanged += onSettingsChanged; + client.LoadRequested += onLoadRequested; + + beatmapAvailabilityTracker.Availability.BindValueChanged(onBeatmapAvailabilityChanged, true); + } + + private void onRoomUpdated() + { + if (this.IsCurrentScreen() && client.Room == null) + { + Logger.Log($"{this} exiting due to loss of room or connection"); + this.Exit(); + } + } + + private void onUserStateChanged(MultiplayerRoomUser user, MultiplayerUserState state) + { + if (user.Equals(client.LocalUser) && state == MultiplayerUserState.Idle) + this.MakeCurrent(); + } + + private void onSettingsChanged(MultiplayerRoomSettings _) => Scheduler.Add(() => + { + checkForAutomaticDownload(); + updateGameplayState(); + }); + + private void onBeatmapAvailabilityChanged(ValueChangedEvent e) => Scheduler.Add(() => + { + if (client.Room == null || client.LocalUser == null) + return; + + client.ChangeBeatmapAvailability(e.NewValue).FireAndForget(); + + switch (e.NewValue.State) + { + case DownloadState.NotDownloaded: + case DownloadState.LocallyAvailable: + updateGameplayState(); + break; + } + }); + + private void updateGameplayState() + { + MultiplayerPlaylistItem item = client.Room!.CurrentPlaylistItem; + RulesetInfo ruleset = rulesets.GetRuleset(item.RulesetID)!; + Ruleset rulesetInstance = ruleset.CreateInstance(); + + // Update global gameplay state to correspond to the new selection. + // Retrieve the corresponding local beatmap, since we can't directly use the playlist's beatmap info + var localBeatmap = beatmapManager.QueryBeatmap($@"{nameof(BeatmapInfo.OnlineID)} == $0 AND {nameof(BeatmapInfo.MD5Hash)} == {nameof(BeatmapInfo.OnlineMD5Hash)}", item.BeatmapID); + Beatmap.Value = beatmapManager.GetWorkingBeatmap(localBeatmap); + Ruleset.Value = ruleset; + Mods.Value = item.RequiredMods.Select(m => m.ToMod(rulesetInstance)).ToArray(); + + if (Beatmap.Value is DummyWorkingBeatmap) + client.ChangeState(MultiplayerUserState.Idle).FireAndForget(); + else + client.ChangeState(MultiplayerUserState.Ready).FireAndForget(); + + client.ChangeBeatmapAvailability(beatmapAvailabilityTracker.Availability.Value).FireAndForget(); + } + + private void onLoadRequested() => Scheduler.Add(() => + { + updateGameplayState(); + this.Push(new MultiplayerPlayerLoader(() => new MatchmakingPlayer(new Room(room), new PlaylistItem(client.Room!.CurrentPlaylistItem), room.Users.ToArray()))); + }); + + private void checkForAutomaticDownload() + { + if (client.Room == null) + return; + + MultiplayerPlaylistItem item = client.Room.CurrentPlaylistItem; + + // This method is called every time anything changes in the room. + // This could result in download requests firing far too often, when we only expect them to fire once per beatmap. + // + // Without this check, we would see especially egregious behaviour when a user has hit the download rate limit. + if (lastDownloadCheckedBeatmapId == item.BeatmapID) + return; + + lastDownloadCheckedBeatmapId = item.BeatmapID; + + downloadCheckCancellation?.Cancel(); + + // In a perfect world we'd use BeatmapAvailability, but there's no event-driven flow for when a selection changes. + // ie. if selection changes from "not downloaded" to another "not downloaded" we wouldn't get a value changed raised. + beatmapLookupCache + .GetBeatmapAsync(item.BeatmapID, (downloadCheckCancellation = new CancellationTokenSource()).Token) + .ContinueWith(resolved => Schedule(() => + { + var beatmapSet = resolved.GetResultSafely()?.BeatmapSet; + + if (beatmapSet == null) + return; + + if (beatmapManager.IsAvailableLocally(new BeatmapSetInfo { OnlineID = beatmapSet.OnlineID })) + return; + + beatmapDownloader.Download(beatmapSet); + })); + } + + private bool exitConfirmed; + + public override bool OnExiting(ScreenExitEvent e) + { + if (base.OnExiting(e)) + return true; + + if (exitConfirmed) + { + client.LeaveRoom().FireAndForget(); + return false; + } + + if (dialogOverlay.CurrentDialog is ConfirmDialog confirmDialog) + confirmDialog.PerformOkAction(); + else + { + dialogOverlay.Push(new ConfirmDialog("Are you sure you want to leave this multiplayer match?", () => + { + exitConfirmed = true; + if (this.IsCurrentScreen()) + this.Exit(); + })); + } + + return true; + } + + public override void OnResuming(ScreenTransitionEvent e) + { + base.OnResuming(e); + + if (e.Last is not MultiplayerPlayerLoader playerLoader) + return; + + if (!playerLoader.GameplayPassed) + { + client.AbortGameplay().FireAndForget(); + return; + } + + client.ChangeState(MultiplayerUserState.Idle); + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + { + client.RoomUpdated -= onRoomUpdated; + client.UserStateChanged -= onUserStateChanged; + client.SettingsChanged -= onSettingsChanged; + client.LoadRequested -= onLoadRequested; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/IdleScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/IdleScreen.cs new file mode 100644 index 0000000000..e67e2a520a --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/IdleScreen.cs @@ -0,0 +1,27 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Screens; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle +{ + public partial class IdleScreen : MatchmakingSubScreen + { + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new PlayerPanelList + { + RelativeSizeAxes = Axes.Both + }; + } + + public override void OnEntering(ScreenTransitionEvent e) + { + base.OnEntering(e); + this.MoveToX(0); + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanel.cs new file mode 100644 index 0000000000..eaddb0f2e4 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanel.cs @@ -0,0 +1,197 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Input.Events; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.API; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Users; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle +{ + public partial class PlayerPanel : UserPanel + { + public readonly MultiplayerRoomUser RoomUser; + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + [Resolved] + private IAPIProvider api { get; set; } = null!; + + private OsuSpriteText rankText = null!; + private OsuSpriteText scoreText = null!; + + private MatchmakingAvatar avatar = null!; + private OsuSpriteText username = null!; + + private Container mainContent = null!; + + public bool Horizontal + { + get => horizontal; + set + { + horizontal = value; + if (IsLoaded) + updateLayout(false); + } + } + + private bool horizontal; + + public PlayerPanel(MultiplayerRoomUser user) + : base(user.User!) + { + RoomUser = user; + } + + [BackgroundDependencyLoader] + private void load() + { + Masking = true; + CornerRadius = 10; + + Add(mainContent = new Container + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + avatar = new MatchmakingAvatar(User, isOwnUser: User.Id == api.LocalUser.Value.Id) + { + Anchor = Anchor.TopLeft, + Origin = Anchor.Centre, + Size = new Vector2(80), + }, + rankText = new OsuSpriteText + { + Anchor = Anchor.BottomRight, + Origin = Anchor.BottomCentre, + Blending = BlendingParameters.Additive, + Margin = new MarginPadding(4), + Font = OsuFont.Style.Title.With(size: 70), + }, + username = new OsuSpriteText + { + Anchor = Anchor.BottomCentre, + Origin = Anchor.BottomCentre, + Text = User.Username, + Font = OsuFont.Style.Heading1, + }, + scoreText = new OsuSpriteText + { + Margin = new MarginPadding(10), + Anchor = Anchor.BottomCentre, + Origin = Anchor.BottomCentre, + Font = OsuFont.Style.Heading2, + Text = "0 pts" + } + } + }); + } + + protected override Drawable CreateLayout() => Empty(); + + protected override void LoadComplete() + { + base.LoadComplete(); + + updateLayout(true); + + client.MatchRoomStateChanged += onRoomStateChanged; + onRoomStateChanged(client.Room!.MatchState); + + avatar.ScaleTo(0) + .ScaleTo(1, 500, Easing.OutElasticHalf) + .FadeIn(200); + + rankText.Hide(); + scoreText.Hide(); + username.Hide(); + + using (BeginDelayedSequence(100)) + { + username.FadeInFromZero(600); + + using (BeginDelayedSequence(100)) + { + scoreText.FadeInFromZero(600); + + using (BeginDelayedSequence(100)) + { + rankText.FadeTo(0.6f, 600); + } + } + } + } + + private Vector2 avatarPosition => horizontal ? new Vector2(50) : new Vector2(75, 50); + + private void updateLayout(bool instant) + { + double duration = instant ? 0 : 1000; + + avatar.MoveTo(avatarPosition, duration, Easing.OutPow10); + this.ResizeTo(horizontal ? new Vector2(250, 100) : new Vector2(150, 200), duration, Easing.OutPow10); + + rankText.MoveTo(horizontal ? new Vector2(-40, -10) : new Vector2(-70, 0), duration, Easing.OutPow10); + username.MoveTo(horizontal ? new Vector2(0, -46) : new Vector2(0, -86), duration, Easing.OutPow10); + scoreText.MoveTo(horizontal ? new Vector2(0, -16) : new Vector2(0, -56), duration, Easing.OutPow10); + } + + protected override bool OnHover(HoverEvent e) + { + this.ScaleTo(1.02f, 1000, Easing.OutQuint); + mainContent.ScaleTo(1.03f, 1000, Easing.OutQuint); + return base.OnHover(e); + } + + protected override void OnHoverLost(HoverLostEvent e) + { + this.ScaleTo(1f, 500, Easing.OutQuint); + mainContent.ScaleTo(1, 500, Easing.OutQuint); + + mainContent.MoveTo(Vector2.Zero, 500, Easing.OutElasticHalf); + avatar.MoveTo(avatarPosition, 1500, Easing.OutElastic); + base.OnHoverLost(e); + } + + protected override bool OnMouseMove(MouseMoveEvent e) + { + var offset = (avatar.ToLocalSpace(e.ScreenSpaceMousePosition) - avatar.DrawSize / 2) * 0.02f; + + mainContent.MoveTo(offset * 0.5f, 1000, Easing.OutQuint); + avatar.MoveTo(avatarPosition + offset, 400, Easing.OutQuint); + return base.OnMouseMove(e); + } + + private void onRoomStateChanged(MatchRoomState? state) => Scheduler.Add(() => + { + if (state is not MatchmakingRoomState matchmakingState) + return; + + if (!matchmakingState.Users.UserDictionary.TryGetValue(User.Id, out MatchmakingUser? userScore)) + return; + + rankText.Text = $"#{userScore.Placement}"; + scoreText.Text = $"{userScore.Points} pts"; + }); + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + client.MatchRoomStateChanged -= onRoomStateChanged; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanelList.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanelList.cs new file mode 100644 index 0000000000..aa294f5bd3 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Idle/PlayerPanelList.cs @@ -0,0 +1,93 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle +{ + public partial class PlayerPanelList : CompositeDrawable + { + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + public bool Horizontal { get; init; } + + private FillFlowContainer panels = null!; + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = panels = new FillFlowContainer + { + RelativeSizeAxes = Axes.Both, + Spacing = new Vector2(20, 5), + LayoutEasing = Easing.InOutQuint, + LayoutDuration = 500 + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.MatchRoomStateChanged += onRoomStateChanged; + client.UserJoined += onUserJoined; + client.UserLeft += onUserLeft; + + if (client.Room != null) + { + onRoomStateChanged(client.Room.MatchState); + foreach (var user in client.Room.Users) + onUserJoined(user); + } + } + + private void onUserJoined(MultiplayerRoomUser user) => Scheduler.Add(() => + { + panels.Add(new PlayerPanel(user) + { + Horizontal = Horizontal, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }); + }); + + private void onUserLeft(MultiplayerRoomUser user) => Scheduler.Add(() => + { + panels.Single(p => p.RoomUser.Equals(user)).Expire(); + }); + + private void onRoomStateChanged(MatchRoomState? state) => Scheduler.Add(() => + { + if (state is not MatchmakingRoomState matchmakingState) + return; + + foreach (var panel in panels) + { + if (matchmakingState.Users.UserDictionary.TryGetValue(panel.User.Id, out MatchmakingUser? user)) + panels.SetLayoutPosition(panel, user.Placement); + else + panels.SetLayoutPosition(panel, float.MaxValue); + } + }); + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + { + client.MatchRoomStateChanged -= onRoomStateChanged; + client.UserJoined -= onUserJoined; + client.UserLeft -= onUserLeft; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingIntroScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingIntroScreen.cs new file mode 100644 index 0000000000..34c113c39f --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingIntroScreen.cs @@ -0,0 +1,262 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Screens; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Overlays; +using osu.Game.Screens.OnlinePlay.Match; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens +{ + public partial class MatchmakingIntroScreen : OsuScreen + { + public override bool DisallowExternalBeatmapRulesetChanges => false; + + public override bool? ApplyModTrackAdjustments => true; + + public override bool ShowFooter => true; + + private Container introContent = null!; + + private Container titleContainer = null!; + + private bool animationBegan; + + [Cached] + private readonly OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Plum); + + [Resolved] + private MusicController musicController { get; set; } = null!; + + private Sample? dateWindupSample; + private Sample? dateImpactSample; + private Sample? beatmapWindupSample; + private Sample? beatmapImpactSample; + + private SampleChannel? dateWindupChannel; + private SampleChannel? dateImpactChannel; + private SampleChannel? beatmapWindupChannel; + private SampleChannel? beatmapImpactChannel; + + private IDisposable? duckOperation; + + protected override BackgroundScreen CreateBackground() => new MatchmakingIntroBackgroundScreen(colourProvider); + + public MatchmakingIntroScreen() + { + ValidForResume = false; + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + InternalChildren = new Drawable[] + { + introContent = new Container + { + Alpha = 0f, + RelativeSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Shear = OsuGame.SHEAR, + Children = new Drawable[] + { + titleContainer = new Container + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new Container + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + CornerRadius = 10f, + Masking = true, + X = 10, + Children = new Drawable[] + { + new Box + { + Colour = colourProvider.Background3, + RelativeSizeAxes = Axes.Both, + }, + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = "Quick Play", + Margin = new MarginPadding { Horizontal = 10f, Vertical = 5f }, + Shear = -OsuGame.SHEAR, + Font = OsuFont.GetFont(size: 32, weight: FontWeight.Light, typeface: Typeface.TorusAlternate), + }, + } + }, + } + }, + } + } + }; + + dateWindupSample = audio.Samples.Get(@"DailyChallenge/date-windup"); + dateImpactSample = audio.Samples.Get(@"DailyChallenge/date-impact"); + beatmapWindupSample = audio.Samples.Get(@"DailyChallenge/beatmap-windup"); + beatmapImpactSample = audio.Samples.Get(@"DailyChallenge/beatmap-impact"); + } + + public override void OnEntering(ScreenTransitionEvent e) + { + base.OnEntering(e); + + this.FadeInFromZero(400, Easing.OutQuint); + + updateAnimationState(); + playDateWindupSample(); + } + + public override void OnSuspending(ScreenTransitionEvent e) + { + duckOperation?.Dispose(); + + this.FadeOut(800, Easing.OutQuint); + base.OnSuspending(e); + } + + public override bool OnExiting(ScreenExitEvent e) + { + if (base.OnExiting(e)) + return true; + + duckOperation?.Dispose(); + return false; + } + + private void updateAnimationState() + { + if (animationBegan) + return; + + beginAnimation(); + animationBegan = true; + } + + private void beginAnimation() + { + using (BeginDelayedSequence(200)) + { + introContent.Show(); + + titleContainer + .ScaleTo(2) + .Then() + .ScaleTo(1, 400, Easing.In); + + using (BeginDelayedSequence(150)) + { + Schedule(() => + { + playDateImpactSample(); + playBeatmapWindupSample(); + + duckOperation?.Dispose(); + duckOperation = musicController.Duck(new DuckParameters + { + RestoreDuration = 1500f, + }); + }); + } + + using (BeginDelayedSequence(1000)) + { + using (BeginDelayedSequence(100)) + { + titleContainer + .ScaleTo(0.4f, 400, Easing.In) + .FadeOut(500, Easing.OutQuint); + } + + using (BeginDelayedSequence(240)) + { + Schedule(() => + { + if (this.IsCurrentScreen()) + this.Push(new MatchmakingQueueScreen()); + }); + } + } + } + } + + private void playDateWindupSample() + { + dateWindupChannel = dateWindupSample?.GetChannel(); + dateWindupChannel?.Play(); + } + + private void playDateImpactSample() + { + dateImpactChannel = dateImpactSample?.GetChannel(); + dateImpactChannel?.Play(); + } + + private void playBeatmapWindupSample() + { + beatmapWindupChannel = beatmapWindupSample?.GetChannel(); + beatmapWindupChannel?.Play(); + } + + private void playBeatmapImpactSample() + { + beatmapImpactChannel = beatmapImpactSample?.GetChannel(); + beatmapImpactChannel?.Play(); + } + + protected override void Dispose(bool isDisposing) + { + resetAudio(); + base.Dispose(isDisposing); + } + + private void resetAudio() + { + dateWindupChannel?.Stop(); + dateImpactChannel?.Stop(); + beatmapWindupChannel?.Stop(); + beatmapImpactChannel?.Stop(); + duckOperation?.Dispose(); + } + + private partial class MatchmakingIntroBackgroundScreen : RoomBackgroundScreen + { + private readonly OverlayColourProvider colourProvider; + + public MatchmakingIntroBackgroundScreen(OverlayColourProvider colourProvider) + : base(null) + { + this.colourProvider = colourProvider; + } + + [BackgroundDependencyLoader] + private void load() + { + AddInternal(new Box + { + Depth = float.MinValue, + RelativeSizeAxes = Axes.Both, + Colour = colourProvider.Background5.Opacity(0.6f), + }); + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingQueueScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingQueueScreen.cs new file mode 100644 index 0000000000..8ec1505c1b --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingQueueScreen.cs @@ -0,0 +1,456 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Diagnostics; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Bindables; +using osu.Framework.Extensions; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Screens; +using osu.Game.Database; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Matchmaking; +using osu.Game.Online.Multiplayer; +using osu.Game.Overlays; +using osu.Game.Overlays.Dialog; +using osu.Game.Rulesets; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens +{ + public partial class MatchmakingQueueScreen : OsuScreen + { + public override bool ShowFooter => true; + + private Container mainContent = null!; + + private MatchmakingScreenState state; + private MatchmakingCloud cloud = null!; + + [Resolved] + private IAPIProvider api { get; set; } = null!; + + [Resolved] + private OverlayColourProvider colourProvider { get; set; } = null!; + + [Resolved] + private OsuColour colours { get; set; } = null!; + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + [Resolved] + private IDialogOverlay dialogOverlay { get; set; } = null!; + + [Resolved] + private MatchmakingController controller { get; set; } = null!; + + [Resolved] + private UserLookupCache userLookupCache { get; set; } = null!; + + [Resolved] + private IBindable ruleset { get; set; } = null!; + + private readonly IBindable currentState = new Bindable(); + + private readonly Bindable availablePools = new Bindable(); + private readonly Bindable selectedPool = new Bindable(); + + private CancellationTokenSource userLookupCancellation = new CancellationTokenSource(); + + private Sample? matchFoundSample; + + protected override void LoadComplete() + { + base.LoadComplete(); + + InternalChildren = new Drawable[] + { + cloud = new MatchmakingCloud + { + Y = -100, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + Size = new Vector2(0.6f) + }, + new MatchmakingAvatar(api.LocalUser.Value, true) + { + Y = -100, + Scale = new Vector2(3), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + new Container + { + RelativePositionAxes = Axes.Y, + Y = 0.25f, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + CornerRadius = 10f, + Masking = true, + Children = new Drawable[] + { + new Box + { + Colour = colourProvider.Background3, + RelativeSizeAxes = Axes.Both, + }, + mainContent = new Container + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Alpha = 0, + AutoSizeAxes = Axes.Both, + AutoSizeDuration = 300, + AutoSizeEasing = Easing.OutQuint, + Padding = new MarginPadding(20), + }, + } + }, + }; + + currentState.BindTo(controller.CurrentState); + currentState.BindValueChanged(s => SetState(s.NewValue)); + + client.MatchmakingLobbyStatusChanged += onMatchmakingLobbyStatusChanged; + + populateAvailablePools().FireAndForget(); + } + + private async Task populateAvailablePools() + { + MatchmakingPool[] pools = await client.GetMatchmakingPools().ConfigureAwait(false); + + Schedule(() => + { + availablePools.Value = pools; + + // Default to the user's ruleset for the initial pool selection. + selectedPool.Value = pools.FirstOrDefault(p => p.RulesetId == ruleset.Value.OnlineID) ?? pools.FirstOrDefault(); + }); + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + matchFoundSample = audio.Samples.Get(@"Multiplayer/matchmaking/match-found"); + } + + private void onMatchmakingLobbyStatusChanged(MatchmakingLobbyStatus status) => Scheduler.Add(() => + { + userLookupCancellation.Cancel(); + var cancellation = userLookupCancellation = new CancellationTokenSource(); + + userLookupCache.GetUsersAsync(status.UsersInQueue, cancellation.Token) + .ContinueWith(result => Schedule(() => + { + APIUser?[] users = result.GetResultSafely(); + if (!cancellation.IsCancellationRequested) + Users = users.OfType().ToArray(); + }), cancellation.Token); + }); + + public override void OnEntering(ScreenTransitionEvent e) + { + base.OnEntering(e); + + controller.SearchInForeground(); + + client.MatchmakingJoinLobby().FireAndForget(); + + using (BeginDelayedSequence(800)) + Schedule(() => SetState(currentState.Value)); + } + + public override void OnResuming(ScreenTransitionEvent e) + { + base.OnResuming(e); + + client.MatchmakingJoinLobby().FireAndForget(); + } + + public override void OnSuspending(ScreenTransitionEvent e) + { + base.OnSuspending(e); + + client.MatchmakingLeaveLobby().FireAndForget(); + } + + private bool exitConfirmed; + private bool isBackgrounded; + + public override bool OnExiting(ScreenExitEvent e) + { + if (base.OnExiting(e)) + return true; + + client.MatchmakingLeaveLobby().FireAndForget(); + + if (isBackgrounded) + return false; + + if (exitConfirmed) + { + client.MatchmakingLeaveQueue().FireAndForget(); + return false; + } + + if (currentState.Value == MatchmakingScreenState.Idle) + return false; + + if (dialogOverlay.CurrentDialog is ConfirmDialog confirmDialog) + confirmDialog.PerformOkAction(); + else + { + dialogOverlay.Push(new ConfirmDialog("Are you sure you want to leave the matchmaking queue?", () => + { + exitConfirmed = true; + if (this.IsCurrentScreen()) + this.Exit(); + })); + } + + return true; + } + + public APIUser[] Users + { + set => cloud.Users = value; + } + + public void SetState(MatchmakingScreenState newState) + { + state = newState; + + mainContent.FadeInFromZero(500, Easing.OutQuint); + mainContent.Clear(); + + switch (newState) + { + case MatchmakingScreenState.Idle: + mainContent.Child = new FillFlowContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(10), + Children = new Drawable[] + { + new MatchmakingPoolSelector + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + AvailablePools = { BindTarget = availablePools }, + SelectedPool = { BindTarget = selectedPool } + }, + new BeginQueueingButton(200) + { + DarkerColour = colours.Blue2, + LighterColour = colours.Blue1, + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + SelectedPool = { BindTarget = selectedPool }, + Action = () => + { + Debug.Assert(selectedPool.Value != null); + client.MatchmakingJoinQueue(selectedPool.Value.Id).FireAndForget(); + }, + Text = "Begin queueing", + } + } + }; + break; + + case MatchmakingScreenState.Queueing: + ShearedButton sendToBackgroundButton; + + mainContent.Child = new FillFlowContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(20), + Children = new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = "Waiting for a game...", + Font = OsuFont.GetFont(size: 32, weight: FontWeight.Light, typeface: Typeface.TorusAlternate), + }, + new LoadingSpinner + { + State = { Value = Visibility.Visible }, + }, + sendToBackgroundButton = new ShearedButton(200) + { + DarkerColour = colours.Orange3, + LighterColour = colours.Orange4, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = "Queue in background", + Action = () => + { + controller.SearchInBackground(); + isBackgrounded = true; + this.Exit(); + }, + Enabled = { Value = false }, + TooltipText = "Wait 5 seconds for this option to become available." + } + } + }; + + Scheduler.AddDelayed(() => + { + if (state != newState) + return; + + sendToBackgroundButton.Enabled.Value = true; + sendToBackgroundButton.TooltipText = "You will receive a notification when your game is ready. Make sure to watch out for it!"; + }, 5000); + break; + + case MatchmakingScreenState.PendingAccept: + mainContent.Child = new FillFlowContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(20), + Children = new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = "Found a match!", + Font = OsuFont.GetFont(size: 32, weight: FontWeight.Regular, typeface: Typeface.TorusAlternate), + }, + new ShearedButton(200) + { + DarkerColour = colours.YellowDark, + LighterColour = colours.YellowLight, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Action = () => + { + client.MatchmakingAcceptInvitation().FireAndForget(); + SetState(MatchmakingScreenState.AcceptedWaitingForRoom); + }, + Text = "Join match!", + } + } + }; + matchFoundSample?.Play(); + break; + + case MatchmakingScreenState.AcceptedWaitingForRoom: + mainContent.Child = new FillFlowContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(20), + Children = new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = "Waiting for all players...", + Font = OsuFont.GetFont(size: 32, weight: FontWeight.Light, typeface: Typeface.TorusAlternate), + }, + new LoadingSpinner + { + State = { Value = Visibility.Visible }, + }, + } + }; + break; + + case MatchmakingScreenState.InRoom: + // room received, show users and transition to next screen. + mainContent.Child = new FillFlowContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(20), + Children = new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = "Good luck!", + Font = OsuFont.GetFont(size: 32, weight: FontWeight.Light, typeface: Typeface.TorusAlternate), + }, + } + }; + + using (BeginDelayedSequence(2000)) + Schedule(() => this.Push(new MatchmakingScreen(client.Room!))); + break; + + default: + throw new ArgumentOutOfRangeException(nameof(newState), newState, null); + } + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + client.MatchmakingLobbyStatusChanged -= onMatchmakingLobbyStatusChanged; + } + + public enum MatchmakingScreenState + { + Idle, + Queueing, + PendingAccept, + AcceptedWaitingForRoom, + InRoom + } + + private partial class BeginQueueingButton : ShearedButton + { + public readonly IBindable SelectedPool = new Bindable(); + + public BeginQueueingButton(float? width = null) + : base(width) + { + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + SelectedPool.BindValueChanged(p => Enabled.Value = p.NewValue != null, true); + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingScreenStack.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingScreenStack.cs new file mode 100644 index 0000000000..cba5c89385 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingScreenStack.cs @@ -0,0 +1,121 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Diagnostics; +using osu.Framework.Allocation; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Screens; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Results; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.RoundResults; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens +{ + public partial class MatchmakingScreenStack : CompositeDrawable + { + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + private ScreenStack screenStack = null!; + + [BackgroundDependencyLoader] + private void load() + { + RelativeSizeAxes = Axes.Both; + Padding = new MarginPadding(10); + + InternalChild = new GridContainer + { + RelativeSizeAxes = Axes.Both, + RowDimensions = new[] { new Dimension(), new Dimension(GridSizeMode.AutoSize) }, + Content = new Drawable[][] + { + [ + new GridContainer + { + RelativeSizeAxes = Axes.Both, + ColumnDimensions = new[] { new Dimension(), new Dimension(GridSizeMode.Absolute, 20), new Dimension(GridSizeMode.AutoSize) }, + Padding = new MarginPadding { Bottom = 20 }, + Content = new Drawable?[][] + { + [ + screenStack = new ScreenStack(), + null, + new PlayerPanelList + { + Horizontal = true, + RelativeSizeAxes = Axes.Y, + Width = 250, + Scale = new Vector2(0.8f), + } + ] + } + } + ], + [ + new StageDisplay + { + RelativeSizeAxes = Axes.X + } + ] + } + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + screenStack.Push(new IdleScreen()); + + client.MatchRoomStateChanged += onMatchRoomStateChanged; + onMatchRoomStateChanged(client.Room!.MatchState); + } + + private void onMatchRoomStateChanged(MatchRoomState? state) => Scheduler.Add(() => + { + if (state is not MatchmakingRoomState matchmakingState) + return; + + switch (matchmakingState.Stage) + { + case MatchmakingStage.WaitingForClientsJoin: + case MatchmakingStage.RoundWarmupTime: + while (screenStack.CurrentScreen is not IdleScreen) + screenStack.Exit(); + break; + + case MatchmakingStage.UserBeatmapSelect: + screenStack.Push(new PickScreen()); + break; + + case MatchmakingStage.ServerBeatmapFinalised: + Debug.Assert(screenStack.CurrentScreen is PickScreen); + ((PickScreen)screenStack.CurrentScreen).RollFinalBeatmap(matchmakingState.CandidateItems, matchmakingState.CandidateItem); + break; + + case MatchmakingStage.ResultsDisplaying: + screenStack.Push(new RoundResultsScreen()); + break; + + case MatchmakingStage.Ended: + screenStack.Push(new ResultsScreen()); + break; + } + }); + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + client.MatchRoomStateChanged -= onMatchRoomStateChanged; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingSubScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingSubScreen.cs new file mode 100644 index 0000000000..86a46546ca --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/MatchmakingSubScreen.cs @@ -0,0 +1,43 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Graphics; +using osu.Framework.Screens; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens +{ + public partial class MatchmakingSubScreen : Screen + { + public MatchmakingSubScreen() + { + RelativePositionAxes = Axes.X; + } + + public override void OnEntering(ScreenTransitionEvent e) + { + base.OnEntering(e); + this.MoveToX(1).MoveToX(0, 200); + } + + public override void OnSuspending(ScreenTransitionEvent e) + { + base.OnSuspending(e); + this.MoveToX(-1, 200); + } + + public override void OnResuming(ScreenTransitionEvent e) + { + base.OnResuming(e); + this.MoveToX(0, 200); + } + + public override bool OnExiting(ScreenExitEvent e) + { + if (base.OnExiting(e)) + return true; + + this.MoveToX(1, 200); + return false; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapPanel.cs new file mode 100644 index 0000000000..d3e5249c73 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapPanel.cs @@ -0,0 +1,192 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Colour; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Localisation; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Overlays; +using osuTK; +using osuTK.Graphics; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick +{ + public partial class BeatmapPanel : CompositeDrawable + { + public static readonly Vector2 SIZE = new Vector2(300, 70); + + public readonly Container OverlayLayer = new Container { RelativeSizeAxes = Axes.Both }; + + public APIBeatmap? Beatmap + { + get => beatmap; + set + { + if (beatmap?.OnlineID == value?.OnlineID) + return; + + beatmap = value; + + if (IsLoaded) + updateContent(); + } + } + + private APIBeatmap? beatmap; + + private Container content = null!; + private UpdateableOnlineBeatmapSetCover cover = null!; + + public BeatmapPanel(APIBeatmap? beatmap = null) + { + this.beatmap = beatmap; + } + + [BackgroundDependencyLoader] + private void load(OverlayColourProvider colourProvider) + { + Masking = true; + CornerRadius = 6; + + InternalChildren = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colourProvider.Background3 + }, + cover = new UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType.Card, timeBeforeLoad: 0) + { + RelativeSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Colour = ColourInfo.GradientVertical(Color4.White.Opacity(0.1f), Color4.White.Opacity(0.3f)) + }, + content = new Container + { + RelativeSizeAxes = Axes.Both, + }, + new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = 6, + BorderThickness = 2, + BorderColour = ColourInfo.GradientVertical(colourProvider.Background1, colourProvider.Background1.Opacity(0)), + Child = new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0, + AlwaysPresent = true, + }, + }, + OverlayLayer, + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + updateContent(); + FinishTransforms(true); + } + + private void updateContent() + { + foreach (var child in content.Children) + child.FadeOut(300).Expire(); + + cover.OnlineInfo = beatmap?.BeatmapSet; + + if (beatmap != null) + { + var panelContent = new BeatmapPanelContent(beatmap) + { + RelativeSizeAxes = Axes.Both, + }; + + content.Add(panelContent); + + panelContent.FadeInFromZero(300); + } + } + + private partial class BeatmapPanelContent : CompositeDrawable + { + private readonly APIBeatmap beatmap; + + public BeatmapPanelContent(APIBeatmap beatmap) + { + this.beatmap = beatmap; + } + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new FillFlowContainer + { + Direction = FillDirection.Vertical, + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Padding = new MarginPadding { Horizontal = 12 }, + Children = new Drawable[] + { + new TruncatingSpriteText + { + Text = new RomanisableString(beatmap.Metadata.TitleUnicode, beatmap.Metadata.TitleUnicode), + Font = OsuFont.Default.With(size: 19, weight: FontWeight.SemiBold), + Shadow = false, + RelativeSizeAxes = Axes.X, + }, + new TextFlowContainer(s => + { + s.Shadow = false; + s.Font = OsuFont.GetFont(size: 16, weight: FontWeight.SemiBold); + }).With(d => + { + d.RelativeSizeAxes = Axes.X; + d.AutoSizeAxes = Axes.Y; + d.AddText("by "); + d.AddText(new RomanisableString(beatmap.Metadata.ArtistUnicode, beatmap.Metadata.Artist)); + }), + new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Horizontal, + Margin = new MarginPadding { Top = 6 }, + Spacing = new Vector2(4), + Children = new Drawable[] + { + new StarRatingDisplay(new StarDifficulty(beatmap.StarRating, 0), StarRatingDisplaySize.Small) + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + }, + new TruncatingSpriteText + { + Text = beatmap.DifficultyName, + Font = OsuFont.Default.With(size: 16, weight: FontWeight.SemiBold), + Shadow = false, + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + }, + } + }, + }, + }; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionGrid.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionGrid.cs new file mode 100644 index 0000000000..813e8efa0d --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionGrid.cs @@ -0,0 +1,378 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Diagnostics; +using System.Linq; +using Microsoft.Toolkit.HighPerformance; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Transforms; +using osu.Framework.Utils; +using osu.Game.Graphics.Containers; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Rooms; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick +{ + public partial class BeatmapSelectionGrid : CompositeDrawable + { + public const double ARRANGE_DELAY = 200; + + private const double hide_duration = 800; + private const double arrange_duration = 1000; + private const double roll_duration = 4000; + private const double present_beatmap_delay = 1200; + private const float panel_spacing = 20; + + public event Action? ItemSelected; + + [Resolved] + private IAPIProvider api { get; set; } = null!; + + private readonly Dictionary panelLookup = new Dictionary(); + + private readonly PanelGridContainer panelGridContainer; + private readonly Container rollContainer; + private readonly OsuScrollContainer scroll; + + private bool allowSelection = true; + + private readonly Sample?[] spinSamples = new Sample?[5]; + private static readonly int[] spin_sample_sequence = [0, 1, 2, 3, 4, 2, 3, 4]; + private Sample? resultSample; + private Sample? swooshSample; + private double? lastSamplePlayback; + + public BeatmapSelectionGrid() + { + InternalChildren = new Drawable[] + { + scroll = new OsuScrollContainer + { + RelativeSizeAxes = Axes.Both, + ScrollbarVisible = false, + Child = panelGridContainer = new PanelGridContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Padding = new MarginPadding(20), + Spacing = new Vector2(panel_spacing) + }, + }, + rollContainer = new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + }, + }; + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + for (int i = 0; i < spinSamples.Length; i++) + spinSamples[i] = audio.Samples.Get($@"Multiplayer/Matchmaking/Selection/roulette-{i}"); + + resultSample = audio.Samples.Get(@"Multiplayer/Matchmaking/Selection/roulette-result"); + swooshSample = audio.Samples.Get(@"SongSelect/options-pop-out"); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + const double enter_duration = 500; + + // the scroll container has a 1 frame delay until it receives the correct height for the scrollable area which leads to the scrollbar resizing awkwardly + // if we wait until the panels have entered we get to avoid having to see that and the scrollbar it will appear synchronized with the rest of the content as a bonus + Scheduler.AddDelayed(() => scroll.ScrollbarVisible = true, enter_duration); + + SchedulerAfterChildren.Add(() => + { + foreach (var panel in panelGridContainer) + { + double delay = panel.Y / 3; + + panel.FadeInAndEnterFromBelow(duration: enter_duration, delay: delay); + } + }); + } + + public void AddItem(MultiplayerPlaylistItem item) + { + var panel = panelLookup[item.ID] = new BeatmapSelectionPanel(item) + { + Size = new Vector2(300, 70), + AllowSelection = allowSelection, + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Action = ItemSelected, + }; + + panelGridContainer.Add(panel); + panelGridContainer.SetLayoutPosition(panel, (float)item.StarRating); + } + + public void RemoveItem(long id) + { + if (!panelLookup.Remove(id, out var panel)) + return; + + panel.Expire(); + } + + public void SetUserSelection(APIUser user, long itemId, bool selected) + { + if (!panelLookup.TryGetValue(itemId, out var panel)) + return; + + if (selected) + panel.AddUser(user, user.Equals(api.LocalUser.Value)); + else + panel.RemoveUser(user); + } + + public void RollAndDisplayFinalBeatmap(long[] candidateItemIds, long finalItemId) + { + Debug.Assert(candidateItemIds.Length >= 1); + Debug.Assert(candidateItemIds.Contains(finalItemId)); + Debug.Assert(panelLookup.ContainsKey(finalItemId)); + Debug.Assert(candidateItemIds.All(id => panelLookup.ContainsKey(id))); + + allowSelection = false; + + TransferCandidatePanelsToRollContainer(candidateItemIds); + + if (candidateItemIds.Length == 1) + { + this.Delay(ARRANGE_DELAY) + .Schedule(() => ArrangeItemsForRollAnimation()) + .Delay(arrange_duration + present_beatmap_delay) + .Schedule(() => PresentUnanimouslyChosenBeatmap(finalItemId)); + } + else + { + this.Delay(ARRANGE_DELAY) + .Schedule(() => ArrangeItemsForRollAnimation()) + .Delay(arrange_duration) + .Schedule(() => PlayRollAnimation(finalItemId, roll_duration)) + .Delay(roll_duration + present_beatmap_delay) + .Schedule(() => PresentRolledBeatmap(finalItemId)); + } + } + + internal void TransferCandidatePanelsToRollContainer(long[] candidateItemIds, double duration = hide_duration) + { + scroll.ScrollbarVisible = false; + panelGridContainer.LayoutDisabled = true; + + var rng = new Random(); + + var remainingPanels = new List(); + + foreach (var panel in panelGridContainer.Children.ToArray()) + { + panel.AllowSelection = false; + + if (!candidateItemIds.Contains(panel.Item.ID)) + { + panel.PopOutAndExpire(duration: duration / 2, delay: rng.NextDouble() * duration / 2); + continue; + } + + remainingPanels.Add(panel); + } + + rng.Shuffle(remainingPanels.AsSpan()); + + foreach (var panel in remainingPanels) + { + var position = panel.ScreenSpaceDrawQuad.Centre; + + panelGridContainer.Remove(panel, false); + + panel.Anchor = panel.Origin = Anchor.Centre; + panel.Position = rollContainer.ToLocalSpace(position) - rollContainer.ChildSize / 2; + + rollContainer.Add(panel); + } + } + + internal void ArrangeItemsForRollAnimation(double duration = arrange_duration, double stagger = 30) + { + var positions = calculateLayoutPositionsForRollAnimation(rollContainer.Children.Count); + + Debug.Assert(positions.Length == rollContainer.Children.Count); + + for (int i = 0; i < positions.Length; i++) + { + var panel = rollContainer.Children[i]; + + var position = positions[i] * (BeatmapPanel.SIZE + new Vector2(panel_spacing)); + + panel.MoveTo(position, duration + stagger * i, new SplitEasingFunction(Easing.InCubic, Easing.OutExpo, 0.3f)); + + Scheduler.AddDelayed(() => + { + var chan = swooshSample?.GetChannel(); + if (chan == null) return; + + chan.Frequency.Value = 1.25f - RNG.NextDouble(0.5f); + chan.Play(); + }, stagger * i); + } + } + + private static Vector2[] calculateLayoutPositionsForRollAnimation(int panelCount) + { + if (panelCount == 1) + return new[] { Vector2.Zero }; + + // goal is to get the positions arranged in clockwise order, with the top-left position being the first one + // to keep things simple the positions are first inserted in the order: right row, optional bottom center panel, left row backwards + // then the positions get shifted by 1 to move the top-left position into the first spot + + bool hasCenterPanel = panelCount % 2 == 1; + int rowCount = (panelCount + 1) / 2; + int outerRowCount = hasCenterPanel ? rowCount - 1 : rowCount; + + float yOffset = -(rowCount - 1f) / 2; + + var positions = new Vector2[panelCount]; + + for (int row = 0; row < outerRowCount; row++) + { + positions[row] = new Vector2(0.5f, row + yOffset); + } + + if (hasCenterPanel) + { + int centerIndex = panelCount / 2; + + positions[centerIndex] = new Vector2(0, outerRowCount + yOffset); + } + + for (int row = 0; row < outerRowCount; row++) + { + int index = positions.Length - 1 - row; + + positions[index] = new Vector2(-0.5f, row + yOffset); + } + + return positions.TakeLast(1).Concat(positions.SkipLast(1)).ToArray(); + } + + internal void PlayRollAnimation(long finalItem, double duration = roll_duration) + { + const int minimum_steps = 20; + + int finalItemIndex = rollContainer.Children + .Select(it => it.Item.ID) + .ToImmutableList() + .IndexOf(finalItem); + + Debug.Assert(finalItemIndex >= 0); + + int numSteps = minimum_steps; + while ((numSteps - 1) % rollContainer.Children.Count != finalItemIndex) + numSteps++; + + BeatmapSelectionPanel? lastPanel = null; + + for (int i = 0; i < numSteps; i++) + { + float progress = ((float)i) / (numSteps - 1); + + double delay = Math.Pow(progress, 2.5) * duration; + var panel = rollContainer.Children[i % rollContainer.Children.Count]; + + int ii = i; + Scheduler.AddDelayed(() => + { + lastPanel?.HideBorder(); + panel.ShowBorder(); + + if (lastSamplePlayback == null || Time.Current - lastSamplePlayback > OsuGameBase.SAMPLE_DEBOUNCE_TIME) + { + int sequenceIdx = ii % spin_sample_sequence.Length; + spinSamples[spin_sample_sequence[sequenceIdx]]?.Play(); + lastSamplePlayback = Time.Current; + } + + lastPanel = panel; + }, delay); + } + } + + internal void PresentRolledBeatmap(long finalItem) + { + Debug.Assert(rollContainer.Children.Any(it => it.Item.ID == finalItem)); + + foreach (var panel in rollContainer.Children) + { + if (panel.Item.ID != finalItem) + { + panel.FadeOut(200); + panel.PopOutAndExpire(easing: Easing.InQuad); + continue; + } + + // if we changed child depth without scheduling we'd change the order of the panels while iterating + Schedule(() => + { + rollContainer.ChangeChildDepth(panel, float.MinValue); + + panel.ShowBorder(); + panel.MoveTo(Vector2.Zero, 1000, Easing.OutExpo) + .ScaleTo(1.5f, 1000, Easing.OutExpo); + + resultSample?.Play(); + }); + } + } + + internal void PresentUnanimouslyChosenBeatmap(long finalItem) + { + // TODO: display special animation in this case + + PresentRolledBeatmap(finalItem); + } + + private partial class PanelGridContainer : FillFlowContainer + { + public bool LayoutDisabled; + + protected override IEnumerable ComputeLayoutPositions() + { + if (LayoutDisabled) + return FlowingChildren.Select(c => c.Position); + + return base.ComputeLayoutPositions(); + } + } + + private readonly struct SplitEasingFunction(DefaultEasingFunction easeIn, DefaultEasingFunction easeOut, float ratio) : IEasingFunction + { + public SplitEasingFunction(Easing easeIn, Easing easeOut, float ratio = 0.5f) + : this(new DefaultEasingFunction(easeIn), new DefaultEasingFunction(easeOut), ratio) + { + } + + public double ApplyEasing(double time) + { + if (time < ratio) + return easeIn.ApplyEasing(time / ratio) * ratio; + + return double.Lerp(ratio, 1, easeOut.ApplyEasing((time - ratio) / (1 - ratio))); + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionOverlay.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionOverlay.cs new file mode 100644 index 0000000000..2a15201d11 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionOverlay.cs @@ -0,0 +1,157 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Online.API.Requests.Responses; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick +{ + public partial class BeatmapSelectionOverlay : CompositeDrawable + { + private readonly Dictionary avatars = new Dictionary(); + + private readonly Container avatarContainer; + + private Sample? userAddedSample; + private double? lastSamplePlayback; + + public new Axes AutoSizeAxes + { + get => base.AutoSizeAxes; + set => base.AutoSizeAxes = value; + } + + public new MarginPadding Padding + { + get => base.Padding; + set => base.Padding = value; + } + + public BeatmapSelectionOverlay() + { + InternalChild = avatarContainer = new Container(); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + avatarContainer.AutoSizeAxes = AutoSizeAxes; + avatarContainer.RelativeSizeAxes = RelativeSizeAxes; + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + userAddedSample = audio.Samples.Get(@"Multiplayer/player-ready"); + } + + public bool AddUser(APIUser user, bool isOwnUser) + { + if (avatars.ContainsKey(user.Id)) + return false; + + var avatar = new SelectionAvatar(user, isOwnUser) + { + Anchor = Anchor.CentreRight, + Origin = Anchor.CentreRight, + }; + + avatarContainer.Add(avatars[user.Id] = avatar); + + if (lastSamplePlayback == null || Time.Current - lastSamplePlayback > OsuGameBase.SAMPLE_DEBOUNCE_TIME) + { + userAddedSample?.Play(); + lastSamplePlayback = Time.Current; + } + + updateLayout(); + + avatar.FinishTransforms(); + + return true; + } + + public bool RemoveUser(int id) + { + if (!avatars.Remove(id, out var avatar)) + return false; + + avatar.PopOutAndExpire(); + avatarContainer.ChangeChildDepth(avatar, float.MaxValue); + + updateLayout(); + + return true; + } + + private void updateLayout() + { + const double stagger = 30; + const float spacing = 4; + + double delay = 0; + float x = 0; + + for (int i = avatarContainer.Count - 1; i >= 0; i--) + { + var avatar = avatarContainer[i]; + + if (avatar.Expired) + continue; + + avatar.Delay(delay).MoveToX(x, 500, Easing.OutElasticQuarter); + + x -= avatar.LayoutSize.X + spacing; + + delay += stagger; + } + } + + public partial class SelectionAvatar : CompositeDrawable + { + public bool Expired { get; private set; } + + private readonly Container content; + + public SelectionAvatar(APIUser user, bool isOwnUser) + { + Size = new Vector2(30); + + InternalChildren = new Drawable[] + { + content = new Container + { + RelativeSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Child = new MatchmakingAvatar(user, isOwnUser) + } + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + content.ScaleTo(0) + .ScaleTo(1, 500, Easing.OutElasticHalf) + .FadeIn(200); + } + + public void PopOutAndExpire() + { + content.ScaleTo(0, 400, Easing.OutExpo); + + this.FadeOut(100).Expire(); + Expired = true; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionPanel.cs new file mode 100644 index 0000000000..029bf48e30 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/BeatmapSelectionPanel.cs @@ -0,0 +1,213 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using osu.Framework.Allocation; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Input.Events; +using osu.Game.Database; +using osu.Game.Graphics.UserInterface; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Rooms; +using osuTK.Graphics; +using osuTK.Input; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick +{ + public partial class BeatmapSelectionPanel : Container + { + private const float corner_radius = 6; + private const float border_width = 3; + + public readonly MultiplayerPlaylistItem Item; + + private readonly Container scaleContainer; + private readonly BeatmapPanel beatmapPanel; + private readonly BeatmapSelectionOverlay selectionOverlay; + private readonly Container border; + private readonly Box flash; + private readonly Container shadow; + + public bool AllowSelection; + + public Action? Action; + + [Resolved] + private BeatmapLookupCache beatmapLookupCache { get; set; } = null!; + + public override bool PropagatePositionalInputSubTree => AllowSelection; + + public BeatmapSelectionPanel(MultiplayerPlaylistItem item) + { + Item = item; + Size = BeatmapPanel.SIZE; + + InternalChildren = new Drawable[] + { + scaleContainer = new Container + { + RelativeSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Children = new Drawable[] + { + shadow = new Container + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding(4), + Y = 8, + Child = new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = 7, + Child = new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black, + Alpha = 0.15f, + } + } + }, + new Container + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding(-border_width), + Child = border = new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = corner_radius + border_width, + Alpha = 0, + Child = new Box { RelativeSizeAxes = Axes.Both }, + } + }, + beatmapPanel = new BeatmapPanel + { + RelativeSizeAxes = Axes.Both, + OverlayLayer = + { + Children = new[] + { + flash = new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0, + }, + } + } + }, + selectionOverlay = new BeatmapSelectionOverlay + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Padding = new MarginPadding { Horizontal = 10 }, + Origin = Anchor.CentreLeft, + }, + } + }, + new HoverClickSounds(), + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + beatmapLookupCache.GetBeatmapAsync(Item.BeatmapID).ContinueWith(b => Schedule(() => + { + var beatmap = b.GetResultSafely()!; + + beatmap.StarRating = Item.StarRating; + + beatmapPanel.Beatmap = beatmap; + })); + } + + public bool AddUser(APIUser user, bool isOwnUser = false) => selectionOverlay.AddUser(user, isOwnUser); + + public bool RemoveUser(int userId) => selectionOverlay.RemoveUser(userId); + + public bool RemoveUser(APIUser user) => RemoveUser(user.Id); + + protected override bool OnHover(HoverEvent e) + { + flash.FadeTo(0.2f, 50) + .Then() + .FadeTo(0.1f, 300); + + return true; + } + + protected override void OnHoverLost(HoverLostEvent e) + { + base.OnHoverLost(e); + + flash.FadeOut(200); + } + + protected override bool OnMouseDown(MouseDownEvent e) + { + if (e.Button == MouseButton.Left) + { + scaleContainer.ScaleTo(0.95f, 400, Easing.OutExpo); + shadow.MoveToY(4, 400, Easing.OutExpo) + .TransformTo(nameof(Padding), new MarginPadding(2), 400, Easing.OutExpo); + return true; + } + + return base.OnMouseDown(e); + } + + protected override void OnMouseUp(MouseUpEvent e) + { + base.OnMouseUp(e); + + if (e.Button == MouseButton.Left) + { + scaleContainer.ScaleTo(1f, 500, Easing.OutElasticHalf); + shadow.MoveToY(8, 500, Easing.OutElasticHalf) + .TransformTo(nameof(Padding), new MarginPadding(4), 400, Easing.OutExpo); + } + } + + protected override bool OnClick(ClickEvent e) + { + Action?.Invoke(Item); + + flash.FadeTo(0.5f, 50) + .Then() + .FadeTo(0.1f, 400); + + return true; + } + + public void ShowBorder() => border.Show(); + + public void HideBorder() => border.Hide(); + + public void FadeInAndEnterFromBelow(double duration = 500, double delay = 0, float distance = 200) + { + scaleContainer + .FadeOut() + .MoveToY(distance) + .Delay(delay) + .FadeIn(duration / 2) + .MoveToY(0, duration, Easing.OutExpo); + } + + public void PopOutAndExpire(double duration = 400, double delay = 0, Easing easing = Easing.InCubic) + { + AllowSelection = false; + + scaleContainer.Delay(delay) + .ScaleTo(0, duration, easing) + .FadeOut(duration); + + this.Delay(delay + duration).FadeOut().Expire(); + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/PickScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/PickScreen.cs new file mode 100644 index 0000000000..73e2188273 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Pick/PickScreen.cs @@ -0,0 +1,83 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Rooms; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Pick +{ + public partial class PickScreen : OsuScreen + { + private BeatmapSelectionGrid selectionGrid = null!; + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new Container + { + RelativeSizeAxes = Axes.Both, + Child = selectionGrid = new BeatmapSelectionGrid + { + RelativeSizeAxes = Axes.Both, + }, + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.ItemAdded += onItemAdded; + + foreach (var item in client.Room!.Playlist) + onItemAdded(item); + + selectionGrid.ItemSelected += item => client.MatchmakingToggleSelection(item.ID); + + client.MatchmakingItemSelected += onItemSelected; + client.MatchmakingItemDeselected += onItemDeselected; + } + + private void onItemAdded(MultiplayerPlaylistItem item) => Scheduler.Add(() => + { + if (item.Expired) + return; + + selectionGrid.AddItem(item); + }); + + private void onItemSelected(int userId, long itemId) + { + var user = client.Room!.Users.First(it => it.UserID == userId).User!; + selectionGrid.SetUserSelection(user, itemId, true); + } + + private void onItemDeselected(int userId, long itemId) + { + var user = client.Room!.Users.First(it => it.UserID == userId).User!; + selectionGrid.SetUserSelection(user, itemId, false); + } + + public void RollFinalBeatmap(long[] candidateItems, long finalItem) => selectionGrid.RollAndDisplayFinalBeatmap(candidateItems, finalItem); + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + { + client.ItemAdded -= onItemAdded; + client.MatchmakingItemSelected -= onItemSelected; + client.MatchmakingItemDeselected -= onItemDeselected; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/ResultsScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/ResultsScreen.cs new file mode 100644 index 0000000000..3fe4cc6d7a --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/ResultsScreen.cs @@ -0,0 +1,339 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Idle; +using osu.Game.Utils; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Results +{ + public partial class ResultsScreen : MatchmakingSubScreen + { + private const float grid_spacing = 5; + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + private OsuSpriteText placementText = null!; + private FillFlowContainer userStatistics = null!; + private FillFlowContainer roomStatistics = null!; + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new GridContainer + { + RelativeSizeAxes = Axes.Both, + RowDimensions = + [ + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.Absolute, grid_spacing), + new Dimension(), + new Dimension(GridSizeMode.Absolute, grid_spacing), + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.Absolute, 75) + ], + Content = new Drawable[]?[] + { + [ + new FillFlowContainer + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(grid_spacing), + Children = new[] + { + new OsuSpriteText + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Text = "Placement", + Font = OsuFont.Default.With(size: 12) + }, + placementText = new OsuSpriteText + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Font = OsuFont.Default.With(size: 72), + UseFullGlyphHeight = false + } + } + } + ], + null, + [ + new GridContainer + { + RelativeSizeAxes = Axes.Both, + ColumnDimensions = + [ + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.Absolute, grid_spacing), + new Dimension() + ], + Content = new Drawable?[][] + { + [ + new FillFlowContainer + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(grid_spacing), + Children = new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Text = "Breakdown", + Font = OsuFont.Default.With(size: 12) + }, + userStatistics = new FillFlowContainer + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(grid_spacing) + } + } + }, + null, + new PlayerPanelList + { + RelativeSizeAxes = Axes.Both + } + ] + } + } + ], + null, + [ + new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(grid_spacing), + Children = new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Text = "Statistics", + Font = OsuFont.Default.With(size: 12) + }, + roomStatistics = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Spacing = new Vector2(grid_spacing) + } + } + }, + ], + } + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.MatchRoomStateChanged += onRoomStateChanged; + + onRoomStateChanged(client.Room?.MatchState); + } + + private void onRoomStateChanged(MatchRoomState? state) => Scheduler.Add(() => + { + if (state is not MatchmakingRoomState matchmakingState || matchmakingState.Stage != MatchmakingStage.Ended) + return; + + populateUserStatistics(matchmakingState); + populateRoomStatistics(matchmakingState); + }); + + private void populateUserStatistics(MatchmakingRoomState state) + { + userStatistics.Clear(); + + if (state.Users[client.LocalUser!.UserID].Rounds.Count == 0) + { + placementText.Text = "-"; + addStatistic("No rounds played"); + return; + } + + int overallPlacement = state.Users[client.LocalUser!.UserID].Placement; + int overallPoints = state.Users[client.LocalUser!.UserID].Points; + int bestPlacement = state.Users[client.LocalUser!.UserID].Rounds.Min(r => r.Placement); + var accuracyPlacement = state.Users.Select(u => (user: u, avgAcc: u.Rounds.Select(r => r.Accuracy).DefaultIfEmpty(0).Average())) + .OrderByDescending(t => t.avgAcc) + .Select((t, i) => (info: t, index: i)) + .Single(t => t.info.user.UserId == client.LocalUser!.UserID); + + placementText.Text = $"#{state.Users[client.LocalUser!.UserID].Placement}"; + addStatistic($"#{overallPlacement} overall ({overallPoints}pts)"); + addStatistic($"#{bestPlacement} best placement"); + addStatistic($"#{accuracyPlacement.index + 1} accuracy ({accuracyPlacement.info.avgAcc.FormatAccuracy()})"); + + void addStatistic(string text) + { + userStatistics.Add(new UserStatisticPanel(text) + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre + }); + } + } + + private void populateRoomStatistics(MatchmakingRoomState state) + { + roomStatistics.Clear(); + + long maxScore = long.MinValue; + int maxScoreUserId = 0; + + double maxAccuracy = double.MinValue; + int maxAccuracyUserId = 0; + + int maxCombo = int.MinValue; + int maxComboUserId = 0; + + long maxBonusScore = 0; + int maxBonusScoreUserId = 0; + + long largestScoreDifference = long.MinValue; + int largestScoreDifferenceUserId = 0; + + long smallestScoreDifference = long.MaxValue; + int smallestScoreDifferenceUserId = 0; + + for (int round = 1; round <= state.CurrentRound; round++) + { + long roundHighestScore = long.MinValue; + int roundHighestScoreUserId = 0; + + long roundLowestScore = long.MaxValue; + + foreach (MatchmakingUser user in state.Users) + { + if (!user.Rounds.RoundsDictionary.TryGetValue(round, out MatchmakingRound? mmRound)) + continue; + + if (mmRound.TotalScore > maxScore) + { + maxScore = mmRound.TotalScore; + maxScoreUserId = user.UserId; + } + + if (mmRound.Accuracy > maxAccuracy) + { + maxAccuracy = mmRound.Accuracy; + maxAccuracyUserId = user.UserId; + } + + if (mmRound.MaxCombo > maxCombo) + { + maxCombo = mmRound.MaxCombo; + maxComboUserId = user.UserId; + } + + if (mmRound.TotalScore > roundHighestScore) + { + roundHighestScore = mmRound.TotalScore; + roundHighestScoreUserId = user.UserId; + } + + if (mmRound.TotalScore < roundLowestScore) + roundLowestScore = mmRound.TotalScore; + } + + long roundScoreDifference = roundHighestScore - roundLowestScore; + + if (roundScoreDifference > 0 && roundScoreDifference > largestScoreDifference) + { + largestScoreDifference = roundScoreDifference; + largestScoreDifferenceUserId = roundHighestScoreUserId; + } + + if (roundScoreDifference > 0 && roundScoreDifference < smallestScoreDifference) + { + smallestScoreDifference = roundScoreDifference; + smallestScoreDifferenceUserId = roundHighestScoreUserId; + } + } + + foreach (MatchmakingUser user in state.Users) + { + int userBonusScore = 0; + + foreach (MatchmakingRound round in user.Rounds) + { + userBonusScore += round.Statistics.TryGetValue(HitResult.LargeBonus, out int bonus) ? bonus * 5 : 0; + userBonusScore += round.Statistics.TryGetValue(HitResult.SmallBonus, out bonus) ? bonus : 0; + } + + if (userBonusScore > maxBonusScore) + { + maxBonusScore = userBonusScore; + maxBonusScoreUserId = user.UserId; + } + } + + // Highest score - highest score across all rounds. + addStatistic(maxScoreUserId, "Highest score"); + + // Most accurate - highest accuracy across all rounds. + addStatistic(maxAccuracyUserId, "Most accurate"); + + // Most combo - highest combo across all rounds. + addStatistic(maxComboUserId, "Most combo"); + + // Most bonus - most bonus score across all rounds. + if (maxBonusScoreUserId > 0) + addStatistic(maxBonusScoreUserId, "Most bonus"); + + // Most clutch - smallest victory in any round. + if (smallestScoreDifferenceUserId > 0) + addStatistic(smallestScoreDifferenceUserId, "Most clutch"); + + // Best finish - largest victory in any round. + if (largestScoreDifferenceUserId > 0) + addStatistic(largestScoreDifferenceUserId, "Best finish"); + + void addStatistic(int userId, string text) + { + roomStatistics.Add(new RoomStatisticPanel(text, userId) + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre + }); + } + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + client.MatchRoomStateChanged -= onRoomStateChanged; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/RoomStatisticPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/RoomStatisticPanel.cs new file mode 100644 index 0000000000..5988a73ef8 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/RoomStatisticPanel.cs @@ -0,0 +1,57 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Database; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.API.Requests.Responses; +using osuTK.Graphics; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Results +{ + public partial class RoomStatisticPanel : CompositeDrawable + { + private readonly Color4 backgroundColour = Color4.SaddleBrown; + + private readonly string text; + private readonly int userId; + + public RoomStatisticPanel(string text, int userId) + { + this.text = text; + this.userId = userId; + + AutoSizeAxes = Axes.Both; + } + + [BackgroundDependencyLoader] + private void load(UserLookupCache userLookupCache) + { + // Should be cached by this point. + APIUser? user = userLookupCache.GetUserAsync(userId).GetResultSafely(); + + InternalChild = new CircularContainer + { + AutoSizeAxes = Axes.Both, + Masking = true, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = backgroundColour + }, + new OsuSpriteText + { + Margin = new MarginPadding(10), + Text = $"{text}: {user?.Username}" + } + } + }; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/UserStatisticPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/UserStatisticPanel.cs new file mode 100644 index 0000000000..3a39fc714d --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/Results/UserStatisticPanel.cs @@ -0,0 +1,49 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Sprites; +using osuTK.Graphics; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.Results +{ + public partial class UserStatisticPanel : CompositeDrawable + { + private readonly Color4 backgroundColour = Color4.SaddleBrown; + + private readonly string text; + + public UserStatisticPanel(string text) + { + this.text = text; + + AutoSizeAxes = Axes.Both; + } + + [BackgroundDependencyLoader] + private void load() + { + InternalChild = new CircularContainer + { + AutoSizeAxes = Axes.Both, + Masking = true, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = backgroundColour + }, + new OsuSpriteText + { + Margin = new MarginPadding(10), + Text = text + } + } + }; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScorePanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScorePanel.cs new file mode 100644 index 0000000000..ad30c19c02 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScorePanel.cs @@ -0,0 +1,36 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Scoring; +using osu.Game.Screens.Ranking; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.RoundResults +{ + internal partial class RoundResultsScorePanel : CompositeDrawable + { + public RoundResultsScorePanel(ScoreInfo score) + { + AutoSizeAxes = Axes.Both; + InternalChild = new InstantSizingScorePanel(score); + } + + public override bool PropagateNonPositionalInputSubTree => false; + public override bool PropagatePositionalInputSubTree => false; + + private partial class InstantSizingScorePanel : ScorePanel + { + public InstantSizingScorePanel(ScoreInfo score, bool isNewLocalScore = false) + : base(score, isNewLocalScore) + { + } + + protected override void LoadComplete() + { + base.LoadComplete(); + FinishTransforms(true); + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScreen.cs new file mode 100644 index 0000000000..d7837e96c6 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Screens/RoundResults/RoundResultsScreen.cs @@ -0,0 +1,181 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using osu.Framework.Allocation; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Logging; +using osu.Game.Beatmaps; +using osu.Game.Database; +using osu.Game.Graphics.Containers; +using osu.Game.Graphics.UserInterface; +using osu.Game.Models; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Rooms; +using osu.Game.Rulesets; +using osu.Game.Scoring; +using osu.Game.Screens.Ranking; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.Screens.RoundResults +{ + public partial class RoundResultsScreen : MatchmakingSubScreen + { + private const int panel_spacing = 5; + + [Resolved] + private IAPIProvider api { get; set; } = null!; + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + [Resolved] + private BeatmapLookupCache beatmapLookupCache { get; set; } = null!; + + [Resolved] + private ScoreManager scoreManager { get; set; } = null!; + + [Resolved] + private RulesetStore rulesets { get; set; } = null!; + + private AutoScrollContainer scrollContainer = null!; + private LoadingSpinner loadingSpinner = null!; + + [BackgroundDependencyLoader] + private void load() + { + InternalChildren = new Drawable[] + { + scrollContainer = new AutoScrollContainer + { + RelativeSizeAxes = Axes.Both + }, + loadingSpinner = new LoadingSpinner + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + } + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + loadingSpinner.Show(); + + queryScores().FireAndForget(); + } + + private async Task queryScores() + { + try + { + if (client.Room == null) + return; + + Task beatmapTask = beatmapLookupCache.GetBeatmapAsync(client.Room.CurrentPlaylistItem.BeatmapID); + TaskCompletionSource> scoreTask = new TaskCompletionSource>(); + + var request = new IndexPlaylistScoresRequest(client.Room.RoomID, client.Room.Settings.PlaylistItemId); + request.Success += req => scoreTask.SetResult(req.Scores); + request.Failure += e => scoreTask.SetException(e); + api.Queue(request); + + await Task.WhenAll(beatmapTask, scoreTask.Task).ConfigureAwait(false); + + APIBeatmap? apiBeatmap = beatmapTask.GetResultSafely(); + List apiScores = scoreTask.Task.GetResultSafely(); + + if (apiBeatmap == null) + return; + + // Reference: PlaylistItemResultsScreen + setScores(apiScores.Select(s => s.CreateScoreInfo(scoreManager, rulesets, new BeatmapInfo + { + Difficulty = new BeatmapDifficulty(apiBeatmap.Difficulty), + Metadata = + { + Artist = apiBeatmap.Metadata.Artist, + Title = apiBeatmap.Metadata.Title, + Author = new RealmUser + { + Username = apiBeatmap.Metadata.Author.Username, + OnlineID = apiBeatmap.Metadata.Author.OnlineID, + } + }, + DifficultyName = apiBeatmap.DifficultyName, + StarRating = apiBeatmap.StarRating, + Length = apiBeatmap.Length, + BPM = apiBeatmap.BPM + })).ToArray()); + } + catch (Exception e) + { + Logger.Error(e, "Failed to load scores for playlist item."); + throw; + } + finally + { + Scheduler.Add(() => loadingSpinner.Hide()); + } + } + + private void setScores(ScoreInfo[] scores) => Scheduler.Add(() => + { + Container panels; + + scrollContainer.Child = panels = new Container + { + RelativeSizeAxes = Axes.Y, + Width = scores.Length * (ScorePanel.CONTRACTED_WIDTH + panel_spacing), + ChildrenEnumerable = scores.Select(s => new RoundResultsScorePanel(s) + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft + }) + }; + + for (int i = 0; i < panels.Count; i++) + { + panels[i].MoveToX(panels.DrawWidth * 2) + .Delay(i * 100) + .MoveToX((ScorePanel.CONTRACTED_WIDTH + panel_spacing) * i, 500, Easing.OutQuint); + } + }); + + private partial class AutoScrollContainer : UserTrackingScrollContainer + { + private const float initial_offset = -0.5f; + private const double scroll_duration = 20000; + + private double? scrollStartTime; + + public AutoScrollContainer() + : base(Direction.Horizontal) + { + } + + protected override void Update() + { + base.Update(); + + if (!UserScrolling && Children.Count > 0) + { + scrollStartTime ??= Time.Current; + + double scrollOffset = (Time.Current - scrollStartTime.Value) / scroll_duration; + + if (scrollOffset < 1) + ScrollTo(DrawWidth * (initial_offset + scrollOffset), false); + } + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/StageBubble.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/StageBubble.cs new file mode 100644 index 0000000000..2ebd3376d3 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/StageBubble.cs @@ -0,0 +1,171 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Localisation; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.Matchmaking; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osuTK.Graphics; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + internal partial class StageBubble : CompositeDrawable + { + private readonly Color4 backgroundColour = Color4.Salmon; + + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + private readonly MatchmakingStage stage; + private readonly LocalisableString displayText; + private Drawable progressBar = null!; + + private DateTimeOffset countdownStartTime; + private DateTimeOffset countdownEndTime; + + private Sample? stageProgressSample; + private double? lastSamplePlayback; + + public StageBubble(MatchmakingStage stage, LocalisableString displayText) + { + this.stage = stage; + this.displayText = displayText; + + AutoSizeAxes = Axes.Y; + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + InternalChild = new CircularContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Masking = true, + Children = new[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = backgroundColour.Darken(0.2f) + }, + progressBar = new Box + { + RelativeSizeAxes = Axes.Both, + Colour = backgroundColour + }, + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = displayText, + Padding = new MarginPadding(10) + } + } + }; + + stageProgressSample = audio.Samples.Get(@"Multiplayer/countdown-tick"); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.MatchRoomStateChanged += onMatchRoomStateChanged; + client.CountdownStarted += onCountdownStarted; + client.CountdownStopped += onCountdownStopped; + + if (client.Room != null) + { + onMatchRoomStateChanged(client.Room.MatchState); + foreach (var countdown in client.Room.ActiveCountdowns) + onCountdownStarted(countdown); + } + } + + protected override void Update() + { + base.Update(); + + TimeSpan duration = countdownEndTime - countdownStartTime; + + if (duration.TotalMilliseconds == 0) + progressBar.Width = 0; + else + { + TimeSpan elapsed = DateTimeOffset.Now - countdownStartTime; + progressBar.Width = (float)(elapsed.TotalMilliseconds / duration.TotalMilliseconds); + + bool enoughTimeElapsed = lastSamplePlayback == null || Time.Current - lastSamplePlayback >= 1000f; + if (elapsed.TotalMilliseconds < 1000f || !enoughTimeElapsed || elapsed.TotalMilliseconds >= duration.TotalMilliseconds) + return; + + stageProgressSample?.Play(); + lastSamplePlayback = Time.Current; + } + } + + private void onMatchRoomStateChanged(MatchRoomState? state) => Scheduler.Add(() => + { + if (state is not MatchmakingRoomState matchmakingState) + return; + + if (matchmakingState.Stage == MatchmakingStage.RoundWarmupTime) + { + countdownStartTime = countdownEndTime = DateTimeOffset.Now; + activate(); + } + }); + + private void onCountdownStarted(MultiplayerCountdown countdown) => Scheduler.Add(() => + { + if (countdown is not MatchmakingStageCountdown matchmakingStatusCountdown || matchmakingStatusCountdown.Stage != stage) + return; + + countdownStartTime = DateTimeOffset.Now; + countdownEndTime = countdownStartTime + countdown.TimeRemaining; + activate(); + }); + + private void onCountdownStopped(MultiplayerCountdown countdown) => Scheduler.Add(() => + { + if (countdown is not MatchmakingStageCountdown matchmakingStatusCountdown || matchmakingStatusCountdown.Stage != stage) + return; + + countdownEndTime = DateTimeOffset.Now; + deactivate(); + }); + + private void activate() + { + this.FadeTo(1, 200); + } + + private void deactivate() + { + this.FadeTo(0.5f, 200); + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + { + client.MatchRoomStateChanged -= onMatchRoomStateChanged; + client.CountdownStarted -= onCountdownStarted; + client.CountdownStopped -= onCountdownStopped; + } + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/StageDisplay.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/StageDisplay.cs new file mode 100644 index 0000000000..1f426ec8e6 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/StageDisplay.cs @@ -0,0 +1,91 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Localisation; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class StageDisplay : CompositeDrawable + { + public static readonly (MatchmakingStage status, LocalisableString text)[] DISPLAYED_STAGES = + [ + (MatchmakingStage.RoundWarmupTime, "Next Round"), + (MatchmakingStage.UserBeatmapSelect, "Beatmap Selection"), + (MatchmakingStage.GameplayWarmupTime, "Get Ready"), + (MatchmakingStage.ResultsDisplaying, "Results"), + (MatchmakingStage.Ended, "Match End") + ]; + + public StageDisplay() + { + AutoSizeAxes = Axes.Y; + } + + [BackgroundDependencyLoader] + private void load() + { + List columnDimensions = new List(); + List columnContent = new List(); + + for (int i = 0; i < DISPLAYED_STAGES.Length; i++) + { + if (i > 0) + { + columnDimensions.Add(new Dimension(GridSizeMode.AutoSize)); + columnContent.Add(new SpriteIcon + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(16), + Icon = FontAwesome.Solid.ArrowRight, + Margin = new MarginPadding { Horizontal = 10 } + }); + } + + columnDimensions.Add(new Dimension()); + columnContent.Add(new StageBubble(DISPLAYED_STAGES[i].status, DISPLAYED_STAGES[i].text) + { + RelativeSizeAxes = Axes.X + }); + } + + InternalChild = new GridContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + RowDimensions = + [ + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.AutoSize) + ], + Content = new Drawable[][] + { + [ + new GridContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + ColumnDimensions = columnDimensions.ToArray(), + RowDimensions = [new Dimension(GridSizeMode.AutoSize)], + Content = new[] { columnContent.ToArray() } + } + ], + [ + new StageText + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre + } + ] + } + }; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/StageText.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/StageText.cs new file mode 100644 index 0000000000..b47e135004 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/StageText.cs @@ -0,0 +1,97 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Localisation; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.Multiplayer; +using osu.Game.Online.Multiplayer.MatchTypes.Matchmaking; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking +{ + public partial class StageText : CompositeDrawable + { + [Resolved] + private MultiplayerClient client { get; set; } = null!; + + private OsuSpriteText text = null!; + + private Sample? textChangedSample; + private double? lastSamplePlayback; + + public StageText() + { + AutoSizeAxes = Axes.Both; + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + InternalChild = text = new OsuSpriteText + { + Height = 16, + Font = OsuFont.Default, + AlwaysPresent = true, + }; + + textChangedSample = audio.Samples.Get(@"Multiplayer/Matchmaking/stage-message"); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + client.MatchRoomStateChanged += onMatchRoomStateChanged; + onMatchRoomStateChanged(client.Room!.MatchState); + } + + private void onMatchRoomStateChanged(MatchRoomState? state) => Scheduler.Add(() => + { + if (state is not MatchmakingRoomState matchmakingState) + return; + + text.Text = getTextForStatus(matchmakingState.Stage); + + if (text.Text == string.Empty || (lastSamplePlayback != null && Time.Current - lastSamplePlayback < OsuGameBase.SAMPLE_DEBOUNCE_TIME)) + return; + + textChangedSample?.Play(); + lastSamplePlayback = Time.Current; + }); + + private LocalisableString getTextForStatus(MatchmakingStage status) + { + switch (status) + { + case MatchmakingStage.WaitingForClientsJoin: + return "Players are joining the match..."; + + case MatchmakingStage.WaitingForClientsBeatmapDownload: + return "Players are downloading the beatmap..."; + + case MatchmakingStage.Gameplay: + return "Game is in progress..."; + + case MatchmakingStage.Ended: + return "Thanks for playing! The match will close shortly."; + + default: + return string.Empty; + } + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (client.IsNotNull()) + client.MatchRoomStateChanged -= onMatchRoomStateChanged; + } + } +} diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs index 689a8df12f..bbac86fd2d 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSubScreen.cs @@ -280,7 +280,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer new AddItemButton { RelativeSizeAxes = Axes.X, - Height = 40, + Height = 30, Text = "Add item", Action = () => ShowSongSelect() }, diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs index 9083a21704..a001863780 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs @@ -70,6 +70,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer if (!LoadedBeatmapSuccessfully) return; + // also applied in `MultiSpectatorPlayer.load()` ScoreProcessor.ApplyNewJudgementsWhenFailed = true; LoadComponentAsync(new FillFlowContainer @@ -170,6 +171,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer protected override void PerformFail() { // base logic intentionally suppressed - failing in multiplayer only marks the score with F rank + // see also: `MultiSpectatorPlayer.PerformFail()` ScoreProcessor.FailScore(Score.ScoreInfo); } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/Participants/ParticipantsList.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/Participants/ParticipantsList.cs index b553fcc9cd..7429fc817c 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/Participants/ParticipantsList.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/Participants/ParticipantsList.cs @@ -22,7 +22,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Participants private MultiplayerClient client { get; set; } = null!; public ParticipantsList() - : base(ParticipantPanel.HEIGHT, initialPoolSize: 20) + : base(ParticipantPanel.HEIGHT + 1, initialPoolSize: 20) { } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorPlayer.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorPlayer.cs index 8526e11e12..0dd547bfbb 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorPlayer.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorPlayer.cs @@ -1,6 +1,7 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System; using System.Threading; using osu.Framework.Allocation; using osu.Framework.Audio; @@ -42,6 +43,12 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate if (cancellationToken.IsCancellationRequested) return; + if (!LoadedBeatmapSuccessfully) + return; + + // also applied in `MultiplayerPlayer.load()` + ScoreProcessor.ApplyNewJudgementsWhenFailed = true; + HUDOverlay.PlayerSettingsOverlay.Expire(); HUDOverlay.HoldToQuit.Expire(); } @@ -76,5 +83,15 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate } protected override ResultsScreen CreateResults(ScoreInfo score) => new MultiSpectatorResultsScreen(score); + + protected override void PerformFail() + { + // base logic intentionally suppressed - failing in multiplayer only marks the score with F rank + // see also: `MultiplayerPlayer.PerformFail()` + ScoreProcessor.FailScore(Score.ScoreInfo); + } + + protected override void ConcludeFailedScore(Score score) + => throw new NotSupportedException($"{nameof(MultiSpectatorPlayer)} should never be calling {nameof(ConcludeFailedScore)}. Failing in multiplayer only marks the score with F rank."); } } diff --git a/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSubScreen.cs b/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSubScreen.cs index 5b42bcf254..fdda6f6c85 100644 --- a/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSubScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSubScreen.cs @@ -13,6 +13,7 @@ using osu.Framework.Bindables; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; using osu.Framework.Screens; @@ -164,225 +165,229 @@ namespace osu.Game.Screens.OnlinePlay.Playlists InternalChild = new OsuContextMenuContainer { RelativeSizeAxes = Axes.Both, - Children = new Drawable[] + Child = new PopoverContainer { - roomUpdater = new PlaylistsRoomUpdater(room), - beatmapAvailabilityTracker, - new MultiplayerRoomSounds(), - new Container + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding + roomUpdater = new PlaylistsRoomUpdater(room), + beatmapAvailabilityTracker, + new MultiplayerRoomSounds(), + new Container { - Horizontal = WaveOverlayContainer.WIDTH_PADDING, - Bottom = footer_height + footer_padding - }, - Children = new[] - { - roomContent = new GridContainer + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding { - RelativeSizeAxes = Axes.Both, - RowDimensions = new[] + Horizontal = WaveOverlayContainer.WIDTH_PADDING, + Bottom = footer_height + footer_padding + }, + Children = new[] + { + roomContent = new GridContainer { - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.Absolute, row_padding), - }, - Content = new[] - { - new Drawable[] + RelativeSizeAxes = Axes.Both, + RowDimensions = new[] { - new PlaylistsRoomPanel(room) - { - SelectedItem = SelectedItem - } + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.Absolute, row_padding), }, - null, - new Drawable[] + Content = new[] { - new Container + new Drawable[] { - RelativeSizeAxes = Axes.Both, - Masking = true, - CornerRadius = 10, - Children = new Drawable[] + new PlaylistsRoomPanel(room) { - new Box + SelectedItem = SelectedItem + } + }, + null, + new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = 10, + Children = new Drawable[] { - RelativeSizeAxes = Axes.Both, - Colour = Color4Extensions.FromHex(@"3e3a44") // Temporary. - }, - new GridContainer - { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding(content_padding), - ColumnDimensions = new[] + new Box { - new Dimension(), - new Dimension(GridSizeMode.Absolute, column_padding), - new Dimension(), - new Dimension(GridSizeMode.Absolute, column_padding), - new Dimension(), + RelativeSizeAxes = Axes.Both, + Colour = Color4Extensions.FromHex(@"3e3a44") // Temporary. }, - Content = new[] + new GridContainer { - new Drawable?[] + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding(content_padding), + ColumnDimensions = new[] { - new GridContainer + new Dimension(), + new Dimension(GridSizeMode.Absolute, column_padding), + new Dimension(), + new Dimension(GridSizeMode.Absolute, column_padding), + new Dimension(), + }, + Content = new[] + { + new Drawable?[] { - RelativeSizeAxes = Axes.Both, - RowDimensions = new[] + new GridContainer { - new Dimension(GridSizeMode.AutoSize), - new Dimension(), - new Dimension(GridSizeMode.AutoSize), - }, - Content = new[] - { - new Drawable[] + RelativeSizeAxes = Axes.Both, + RowDimensions = new[] { - new OverlinedPlaylistHeader(room), + new Dimension(GridSizeMode.AutoSize), + new Dimension(), + new Dimension(GridSizeMode.AutoSize), }, - new Drawable[] + Content = new[] { - drawablePlaylist = new DrawableRoomPlaylist + new Drawable[] { - RelativeSizeAxes = Axes.Both, - SelectedItem = { BindTarget = SelectedItem }, - AllowSelection = true, - AllowShowingResults = true, - RequestResults = showResults - } - }, - new Drawable[] - { - new AddPlaylistToCollectionButton(room) + new OverlinedPlaylistHeader(room), + }, + new Drawable[] { - Margin = new MarginPadding { Top = 5 }, - RelativeSizeAxes = Axes.X, - Size = new Vector2(1, 40) + drawablePlaylist = new DrawableRoomPlaylist + { + RelativeSizeAxes = Axes.Both, + SelectedItem = { BindTarget = SelectedItem }, + AllowSelection = true, + AllowShowingResults = true, + RequestResults = showResults + } + }, + new Drawable[] + { + new AddPlaylistToCollectionButton(room) + { + Margin = new MarginPadding { Top = 5 }, + RelativeSizeAxes = Axes.X, + Size = new Vector2(1, 40) + } } } - } - }, - null, - new GridContainer - { - RelativeSizeAxes = Axes.Both, - RowDimensions = new[] - { - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.AutoSize), }, - Content = new[] + null, + new GridContainer { - new Drawable[] + RelativeSizeAxes = Axes.Both, + RowDimensions = new[] { - userModsSection = new FillFlowContainer + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.AutoSize), + }, + Content = new[] + { + new Drawable[] { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Margin = new MarginPadding { Bottom = row_padding }, - Alpha = 0, - Children = new Drawable[] + userModsSection = new FillFlowContainer { - new OverlinedHeader("Extra mods"), - new FillFlowContainer + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Margin = new MarginPadding { Bottom = row_padding }, + Alpha = 0, + Children = new Drawable[] { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Spacing = new Vector2(10, 0), - Children = new Drawable[] + new OverlinedHeader("Extra mods"), + new FillFlowContainer { - new UserModSelectButton + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Horizontal, + Spacing = new Vector2(10, 0), + Children = new Drawable[] { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Width = 90, - Height = 30, - Text = "Select", - Action = showUserModSelect, - }, - new ModDisplay - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Current = UserMods, - Scale = new Vector2(0.8f), + new UserModSelectButton + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Width = 90, + Height = 30, + Text = "Select", + Action = showUserModSelect, + }, + new ModDisplay + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Current = UserMods, + Scale = new Vector2(0.8f), + } } } } } - } - }, - new Drawable[] - { - userStyleSection = new FillFlowContainer + }, + new Drawable[] { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Margin = new MarginPadding { Bottom = row_padding }, - Alpha = 0, - Children = new Drawable[] + userStyleSection = new FillFlowContainer { - new OverlinedHeader("Difficulty"), - userStyleDisplayContainer = new Container + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Margin = new MarginPadding { Bottom = row_padding }, + Alpha = 0, + Children = new Drawable[] { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y + new OverlinedHeader("Difficulty"), + userStyleDisplayContainer = new Container + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y + } } } - } - }, - new Drawable[] - { - progressSection = new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Margin = new MarginPadding { Bottom = row_padding }, - Alpha = 0, - Direction = FillDirection.Vertical, - Children = new Drawable[] - { - new OverlinedHeader("Progress"), - new RoomLocalUserInfo(room), - } - } - }, - new Drawable[] - { - new OverlinedHeader("Leaderboard") - }, - new Drawable[] - { - leaderboard = new MatchLeaderboard(room) - { - RelativeSizeAxes = Axes.Both }, - } - } - }, - null, - new GridContainer - { - RelativeSizeAxes = Axes.Both, - RowDimensions = new[] - { - new Dimension(GridSizeMode.AutoSize) - }, - Content = new[] - { - new Drawable[] - { - new OverlinedHeader("Chat") - }, - new Drawable[] - { - new MatchChatDisplay(room) + new Drawable[] { - RelativeSizeAxes = Axes.Both + progressSection = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Margin = new MarginPadding { Bottom = row_padding }, + Alpha = 0, + Direction = FillDirection.Vertical, + Children = new Drawable[] + { + new OverlinedHeader("Progress"), + new RoomLocalUserInfo(room), + } + } + }, + new Drawable[] + { + new OverlinedHeader("Leaderboard") + }, + new Drawable[] + { + leaderboard = new MatchLeaderboard(room) + { + RelativeSizeAxes = Axes.Both + }, + } + } + }, + null, + new GridContainer + { + RelativeSizeAxes = Axes.Both, + RowDimensions = new[] + { + new Dimension(GridSizeMode.AutoSize) + }, + Content = new[] + { + new Drawable[] + { + new OverlinedHeader("Chat") + }, + new Drawable[] + { + new MatchChatDisplay(room) + { + RelativeSizeAxes = Axes.Both + } } } } @@ -393,39 +398,39 @@ namespace osu.Game.Screens.OnlinePlay.Playlists } } } - } - }, - settingsOverlay = new PlaylistsRoomSettingsOverlay(room) - { - EditPlaylist = () => + }, + settingsOverlay = new PlaylistsRoomSettingsOverlay(room) { - if (this.IsCurrentScreen()) - this.Push(new PlaylistsSongSelect(room)); + EditPlaylist = () => + { + if (this.IsCurrentScreen()) + this.Push(new PlaylistsSongSelect(room)); + } } } - } - }, - new Container - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.BottomLeft, - RelativeSizeAxes = Axes.X, - Height = footer_height, - Children = new Drawable[] + }, + new Container { - new Box + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomLeft, + RelativeSizeAxes = Axes.X, + Height = footer_height, + Children = new Drawable[] { - RelativeSizeAxes = Axes.Both, - Colour = Color4Extensions.FromHex(@"28242d") // Temporary. - }, - new Container - { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding(5), - Child = new PlaylistsRoomFooter(room) + new Box { - OnStart = startPlay, - OnClose = closePlaylist + RelativeSizeAxes = Axes.Both, + Colour = Color4Extensions.FromHex(@"28242d") // Temporary. + }, + new Container + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding(5), + Child = new PlaylistsRoomFooter(room) + { + OnStart = startPlay, + OnClose = closePlaylist + } } } } diff --git a/osu.Game/Screens/Play/HUD/ArgonCounterTextComponent.cs b/osu.Game/Screens/Play/HUD/ArgonCounterTextComponent.cs index bd8f17185b..d55bf46f97 100644 --- a/osu.Game/Screens/Play/HUD/ArgonCounterTextComponent.cs +++ b/osu.Game/Screens/Play/HUD/ArgonCounterTextComponent.cs @@ -15,6 +15,7 @@ using osu.Framework.Text; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osuTK; +using osuTK.Graphics; namespace osu.Game.Screens.Play.HUD { @@ -26,6 +27,8 @@ namespace osu.Game.Screens.Play.HUD public IBindable WireframeOpacity { get; } = new BindableFloat(); public Bindable ShowLabel { get; } = new BindableBool(); + public Bindable LabelColour { get; } = new Bindable(Color4.White); + public Bindable TextColour { get; } = new Bindable(Color4.White); public Container NumberContainer { get; private set; } @@ -58,7 +61,6 @@ namespace osu.Game.Screens.Play.HUD labelText = new OsuSpriteText { Alpha = 0, - BypassAutoSizeAxes = Axes.X, Text = label.GetValueOrDefault(), Font = OsuFont.Torus.With(size: 12, weight: FontWeight.Bold), Margin = new MarginPadding { Left = 2.5f }, @@ -72,13 +74,13 @@ namespace osu.Game.Screens.Play.HUD { wireframesPart = new ArgonCounterSpriteText(wireframesLookup) { - Anchor = anchor, - Origin = anchor, + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, }, textPart = new ArgonCounterSpriteText(textLookup) { - Anchor = anchor, - Origin = anchor, + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, }, } } @@ -110,7 +112,7 @@ namespace osu.Game.Screens.Play.HUD [BackgroundDependencyLoader] private void load(OsuColour colours) { - labelText.Colour = colours.Blue0; + LabelColour.Value = colours.Blue0; } protected override void LoadComplete() @@ -122,6 +124,12 @@ namespace osu.Game.Screens.Play.HUD labelText.Alpha = s.NewValue ? 1 : 0; NumberContainer.Y = s.NewValue ? 12 : 0; }, true); + LabelColour.BindValueChanged(c => labelText.Colour = c.NewValue, true); + TextColour.BindValueChanged(c => + { + textPart.Colour = c.NewValue; + wireframesPart.Colour = c.NewValue; + }, true); } private partial class ArgonCounterSpriteText : OsuSpriteText diff --git a/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs b/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs index f184ad6a03..d768fedca4 100644 --- a/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs +++ b/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs @@ -19,22 +19,25 @@ namespace osu.Game.Screens.Play.HUD { public partial class DefaultRankDisplay : CompositeDrawable, ISerialisableDrawable { + public bool UsesFixedAnchor { get; set; } + [Resolved] private ScoreProcessor scoreProcessor { get; set; } = null!; [SettingSource(typeof(DefaultRankDisplayStrings), nameof(DefaultRankDisplayStrings.PlaySamplesOnRankChange))] public BindableBool PlaySamples { get; set; } = new BindableBool(true); - public bool UsesFixedAnchor { get; set; } - private UpdateableRank rankDisplay = null!; private SkinnableSound rankDownSample = null!; private SkinnableSound rankUpSample = null!; - private Bindable lastSamplePlaybackTime = null!; + private Bindable lastSamplePlayback = null!; + private double lastChangeTime; - private IBindable rank = null!; + private ScoreRank? displayedRank; + + private const int time_between_changes = 1500; public DefaultRankDisplay() { @@ -48,7 +51,7 @@ namespace osu.Game.Screens.Play.HUD { rankDownSample = new SkinnableSound(new SampleInfo("Gameplay/rank-down")), rankUpSample = new SkinnableSound(new SampleInfo("Gameplay/rank-up")), - rankDisplay = new UpdateableRank(ScoreRank.X) + rankDisplay = new UpdateableRank { RelativeSizeAxes = Axes.Both }, @@ -57,31 +60,49 @@ namespace osu.Game.Screens.Play.HUD if (skinEditor != null) PlaySamples.Value = false; - lastSamplePlaybackTime = statics.GetBindable(Static.LastRankChangeSamplePlaybackTime); + lastSamplePlayback = statics.GetBindable(Static.LastRankChangeSamplePlaybackTime); } protected override void LoadComplete() { base.LoadComplete(); - rank = scoreProcessor.Rank.GetBoundCopy(); - rank.BindValueChanged(r => + updateRank(scoreProcessor.Rank.Value); + } + + protected override void Update() + { + base.Update(); + + var currentRank = scoreProcessor.Rank.Value; + + if (currentRank == displayedRank) + return; + + if (Time.Current - lastChangeTime >= time_between_changes || scoreProcessor.HasCompleted.Value || currentRank == ScoreRank.F) + updateRank(currentRank); + } + + private void updateRank(ScoreRank rank) + { + rankDisplay.Rank = rank; + + // Check sample time separately to ensure two copies of the rank display don't both play samples on a change. + bool enoughSampleTimeElapsed = !lastSamplePlayback.Value.HasValue || Time.Current - lastSamplePlayback.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME; + + // Also don't play rank-down sfx on quit/retry/initial update. + if (displayedRank != null && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed) { - bool enoughTimeElapsed = !lastSamplePlaybackTime.Value.HasValue || Time.Current - lastSamplePlaybackTime.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME; + if (rank > displayedRank) + rankUpSample.Play(); + else + rankDownSample.Play(); - // Don't play rank-down sfx on quit/retry - if (r.NewValue != r.OldValue && r.NewValue > ScoreRank.F && PlaySamples.Value && enoughTimeElapsed) - { - if (r.NewValue > rankDisplay.Rank) - rankUpSample.Play(); - else - rankDownSample.Play(); + lastSamplePlayback.Value = Time.Current; + } - lastSamplePlaybackTime.Value = Time.Current; - } - - rankDisplay.Rank = r.NewValue; - }, true); + displayedRank = rank; + lastChangeTime = Time.Current; } } } diff --git a/osu.Game/Screens/Play/SoloSpectatorPlayer.cs b/osu.Game/Screens/Play/SoloSpectatorPlayer.cs index be83a4c6b5..87d77db847 100644 --- a/osu.Game/Screens/Play/SoloSpectatorPlayer.cs +++ b/osu.Game/Screens/Play/SoloSpectatorPlayer.cs @@ -45,6 +45,26 @@ namespace osu.Game.Screens.Play }); } + #region Fail handling + + protected override bool CheckModsAllowFailure() + { + if (!allowFail) + return false; + + return base.CheckModsAllowFailure(); + } + + private bool allowFail; + + /// + /// Should be called when it is apparent that the player being spectated has failed. + /// This will subsequently stop blocking the fail screen from displaying (usually done out of safety). + /// + public void AllowFail() => allowFail = true; + + #endregion + protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); diff --git a/osu.Game/Screens/Play/SoloSpectatorScreen.cs b/osu.Game/Screens/Play/SoloSpectatorScreen.cs index 269bc3bb92..75f8da707c 100644 --- a/osu.Game/Screens/Play/SoloSpectatorScreen.cs +++ b/osu.Game/Screens/Play/SoloSpectatorScreen.cs @@ -183,7 +183,7 @@ namespace osu.Game.Screens.Play { if (this.GetChildScreen() is SpectatorPlayerLoader loader) { - if (loader.GetChildScreen() is SpectatorPlayer player) + if (loader.GetChildScreen() is SoloSpectatorPlayer player) { player.AllowFail(); resetStartState(); diff --git a/osu.Game/Screens/Play/SpectatorPlayer.cs b/osu.Game/Screens/Play/SpectatorPlayer.cs index 6bfb6e033a..4bd9bfafc0 100644 --- a/osu.Game/Screens/Play/SpectatorPlayer.cs +++ b/osu.Game/Screens/Play/SpectatorPlayer.cs @@ -29,16 +29,6 @@ namespace osu.Game.Screens.Play private readonly Score score; - protected override bool CheckModsAllowFailure() - { - if (!allowFail) - return false; - - return base.CheckModsAllowFailure(); - } - - private bool allowFail; - protected SpectatorPlayer(Score score, PlayerConfiguration? configuration = null) : base(configuration) { @@ -72,12 +62,6 @@ namespace osu.Game.Screens.Play }, true); } - /// - /// Should be called when it is apparent that the player being spectated has failed. - /// This will subsequently stop blocking the fail screen from displaying (usually done out of safety). - /// - public void AllowFail() => allowFail = true; - protected override void StartGameplay() { base.StartGameplay(); diff --git a/osu.Game/Screens/Ranking/Statistics/StatisticsPanel.cs b/osu.Game/Screens/Ranking/Statistics/StatisticsPanel.cs index 3c1aec745d..5c5c814c5b 100644 --- a/osu.Game/Screens/Ranking/Statistics/StatisticsPanel.cs +++ b/osu.Game/Screens/Ranking/Statistics/StatisticsPanel.cs @@ -19,7 +19,6 @@ using osu.Game.Extensions; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.UserInterface; -using osu.Game.Models; using osu.Game.Online.API; using osu.Game.Online.Placeholders; using osu.Game.Scoring; @@ -246,11 +245,8 @@ namespace osu.Game.Screens.Ranking.Statistics // We may want to iterate on the following conditions further in the future var localUserScore = AchievedScore ?? realm.Run(r => - r.All() - .Filter($@"{nameof(ScoreInfo.User)}.{nameof(RealmUser.OnlineID)} == $0" - + $@" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.ID)} == $1" - + $@" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.Hash)} == {nameof(ScoreInfo.BeatmapHash)}" - + $@" && {nameof(ScoreInfo.DeletePending)} == false", api.LocalUser.Value.Id, newScore.BeatmapInfo.ID, newScore.BeatmapInfo.Ruleset.ShortName) + r.GetAllLocalScoresForUser(api.LocalUser.Value.Id) + .Filter($@"{nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.ID)} == $0", newScore.BeatmapInfo.ID) .AsEnumerable() .OrderByDescending(score => score.Ruleset.MatchesOnlineID(newScore.BeatmapInfo.Ruleset)) .ThenByDescending(score => score.Rank) diff --git a/osu.Game/Screens/Select/Carousel/TopLocalRank.cs b/osu.Game/Screens/Select/Carousel/TopLocalRank.cs index da9661f702..6f1f2e8370 100644 --- a/osu.Game/Screens/Select/Carousel/TopLocalRank.cs +++ b/osu.Game/Screens/Select/Carousel/TopLocalRank.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; using osu.Game.Database; -using osu.Game.Models; using osu.Game.Online.API; using osu.Game.Online.Leaderboards; using osu.Game.Rulesets; @@ -59,12 +58,9 @@ namespace osu.Game.Screens.Select.Carousel { scoreSubscription?.Dispose(); scoreSubscription = realm.RegisterForNotifications(r => - r.All() - .Filter($"{nameof(ScoreInfo.User)}.{nameof(RealmUser.OnlineID)} == $0" - + $" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.ID)} == $1" - + $" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.Hash)} == {nameof(ScoreInfo.BeatmapHash)}" - + $" && {nameof(ScoreInfo.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $2" - + $" && {nameof(ScoreInfo.DeletePending)} == false", api.LocalUser.Value.Id, beatmapInfo.ID, ruleset.Value.ShortName), + r.GetAllLocalScoresForUser(api.LocalUser.Value.Id) + .Filter($@"{nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.ID)} == $0" + + $" && {nameof(ScoreInfo.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $1", beatmapInfo.ID, ruleset.Value.ShortName), localScoresChanged); }, true); diff --git a/osu.Game/Screens/Select/FilterQueryParser.cs b/osu.Game/Screens/Select/FilterQueryParser.cs index 7d66a61884..8cf3bda1c5 100644 --- a/osu.Game/Screens/Select/FilterQueryParser.cs +++ b/osu.Game/Screens/Select/FilterQueryParser.cs @@ -57,7 +57,7 @@ namespace osu.Game.Screens.Select return TryUpdateCriteriaRange(ref criteria.OverallDifficulty, op, value); case "bpm": - return TryUpdateCriteriaRange(ref criteria.BPM, op, value, 0.01d / 2); + return TryUpdateCriteriaRange(ref criteria.BPM, op, value, 0.5f); case "length": return tryUpdateLengthRange(criteria, op, value); diff --git a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs index c2711ceef0..52d5989c8f 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs @@ -25,7 +25,6 @@ using osu.Game.Database; using osu.Game.Graphics; using osu.Game.Graphics.Carousel; using osu.Game.Graphics.UserInterface; -using osu.Game.Models; using osu.Game.Rulesets; using osu.Game.Scoring; using osu.Game.Screens.Select; @@ -41,12 +40,12 @@ namespace osu.Game.Screens.SelectV2 /// /// From the provided beatmaps, select the most appropriate one for the user's skill. /// - public required Action> RequestRecommendedSelection { private get; init; } + public required Action> RequestRecommendedSelection { private get; init; } /// /// Selection requested for the provided beatmap. /// - public required Action RequestSelection { private get; init; } + public required Action RequestSelection { private get; init; } public const float SPACING = 3f; @@ -74,11 +73,11 @@ namespace osu.Game.Screens.SelectV2 return SPACING * 2; // ..and the bottom. - if (top.Model is BeatmapInfo && bottom.Model is GroupedBeatmapSet) + if (top.Model is GroupedBeatmap && bottom.Model is GroupedBeatmapSet) return SPACING * 2; // Beatmap difficulty panels do not overlap with themselves or any other panel. - if (top.Model is BeatmapInfo || bottom.Model is BeatmapInfo) + if (top.Model is GroupedBeatmap || bottom.Model is GroupedBeatmap) return SPACING; } else @@ -103,14 +102,14 @@ namespace osu.Game.Screens.SelectV2 { new BeatmapCarouselFilterMatching(() => Criteria!), new BeatmapCarouselFilterSorting(() => Criteria!), - grouping = new BeatmapCarouselFilterGrouping(() => Criteria!, getDetachedCollections, getTopRanksMapping) + grouping = new BeatmapCarouselFilterGrouping(() => Criteria!, GetAllCollections, GetBeatmapInfoGuidToTopRankMapping) }; AddInternal(loading = new LoadingLayer()); } [BackgroundDependencyLoader] - private void load(BeatmapStore beatmapStore, RealmAccess realm, AudioManager audio, OsuConfigManager config, CancellationToken? cancellationToken) + private void load(BeatmapStore beatmapStore, AudioManager audio, OsuConfigManager config, CancellationToken? cancellationToken) { setupPools(); detachedBeatmaps = beatmapStore.GetBeatmapSets(cancellationToken); @@ -158,7 +157,7 @@ namespace osu.Game.Screens.SelectV2 foreach (var beatmap in set.Beatmaps) { Items.RemoveAll(i => i is BeatmapInfo bi && beatmap.Equals(bi)); - selectedSetDeleted |= CheckModelEquality(CurrentSelection, beatmap); + selectedSetDeleted |= CheckModelEquality((CurrentSelection as GroupedBeatmap)?.Beatmap, beatmap); } } @@ -200,13 +199,13 @@ namespace osu.Game.Screens.SelectV2 { if (CheckValidForSetSelection(item)) { - if (item.Model is BeatmapInfo beatmapInfo) + if (item.Model is GroupedBeatmap groupedBeatmap) { // check the new selection wasn't deleted above - if (!Items.Contains(beatmapInfo)) + if (!Items.Contains(groupedBeatmap.Beatmap)) return false; - RequestSelection(beatmapInfo); + RequestSelection(groupedBeatmap); return true; } @@ -215,7 +214,7 @@ namespace osu.Game.Screens.SelectV2 if (oldItems.Contains(groupedSet.BeatmapSet)) return false; - RequestRecommendedSelection(groupedSet.BeatmapSet.Beatmaps); + selectRecommendedDifficultyForBeatmapSet(groupedSet); return true; } } @@ -252,12 +251,20 @@ namespace osu.Game.Screens.SelectV2 newSetBeatmaps.FirstOrDefault(b => b.OnlineID > 0 && b.OnlineID == beatmap.OnlineID) ?? newSetBeatmaps.FirstOrDefault(b => b.DifficultyName == beatmap.DifficultyName && b.Ruleset.Equals(beatmap.Ruleset)); + // The matching beatmap may have been deleted or invalidated in some way since this event was fired. + // Let's make sure we have the most up-to-date realm state. + if (matchingNewBeatmap?.ID is Guid matchingID) + matchingNewBeatmap = realm.Run(r => r.FindWithRefresh(matchingID)?.Detach()); + if (matchingNewBeatmap != null) { // TODO: should this exist in song select instead of here? // we need to ensure the global beatmap is also updated alongside changes. - if (CurrentSelection != null && CheckModelEquality(beatmap, CurrentSelection)) - RequestSelection(matchingNewBeatmap); + if (CurrentBeatmap != null && beatmap.Equals(CurrentBeatmap)) + // we don't know in which group the matching new beatmap is, but that's fine - we can keep the previous one for now. + // we are about to modify `Items`, which - if required - will trigger a re-filter, + // which will pick a correct group - if one is present - via `HandleFilterCompleted()`. + RequestSelection(new GroupedBeatmap(CurrentGroupedBeatmap?.Group, matchingNewBeatmap)); Items.ReplaceRange(previousIndex, 1, [matchingNewBeatmap]); newSetBeatmaps.Remove(matchingNewBeatmap); @@ -289,7 +296,51 @@ namespace osu.Game.Screens.SelectV2 protected GroupedBeatmapSet? ExpandedBeatmapSet { get; private set; } protected override bool ShouldActivateOnKeyboardSelection(CarouselItem item) => - grouping.BeatmapSetsGroupedTogether && item.Model is BeatmapInfo; + grouping.BeatmapSetsGroupedTogether && item.Model is GroupedBeatmap; + + /// + /// The currently selected . + /// + /// + /// The selection is never reset due to not existing. It can be set to anything. + /// If no matching carousel item exists, there will be no visually selected item while waiting for potential new item which matches. + /// + public GroupedBeatmap? CurrentGroupedBeatmap + { + get => CurrentSelection as GroupedBeatmap; + set => CurrentSelection = value; + } + + /// + /// The currently selected . + /// + /// + /// This is a property mostly dedicated to external consumers who only care about showing some particular copy of a beatmap + /// (there could be multiple panels for one beatmap due to grouping). + /// Through this property, the carousel basically figures out what group to use internally. + /// + public BeatmapInfo? CurrentBeatmap + { + get => CurrentGroupedBeatmap?.Beatmap; + set + { + if (value == null) + { + CurrentGroupedBeatmap = null; + return; + } + + if (CurrentGroupedBeatmap != null && value.Equals(CurrentGroupedBeatmap.Beatmap)) + return; + + // it is not universally guaranteed that the carousel items will be materialised at the time this is set. + // therefore, in cases where it is known that they will not be, default to a null group. + // even if grouping is active, this will be rectified to a correct group on the next invocation of `HandleFilterCompleted()`. + CurrentGroupedBeatmap = IsLoaded && !IsFiltering + ? GetCarouselItems()?.Select(item => item.Model).OfType().FirstOrDefault(gb => gb.Beatmap.Equals(value)) + : new GroupedBeatmap(null, value); + } + } protected override void HandleItemActivated(CarouselItem item) { @@ -309,8 +360,8 @@ namespace osu.Game.Screens.SelectV2 setExpandedGroup(group); // If the active selection is within this group, it should get keyboard focus immediately. - if (CurrentSelectionItem?.IsVisible == true && CurrentSelection is BeatmapInfo info) - RequestSelection(info); + if (CurrentSelectionItem?.IsVisible == true && CurrentSelection is GroupedBeatmap gb) + RequestSelection(gb); return; @@ -318,14 +369,14 @@ namespace osu.Game.Screens.SelectV2 selectRecommendedDifficultyForBeatmapSet(groupedSet); return; - case BeatmapInfo beatmapInfo: - if (CurrentSelection != null && CheckModelEquality(CurrentSelection, beatmapInfo)) + case GroupedBeatmap groupedBeatmap: + if (CurrentSelection != null && CheckModelEquality(CurrentSelection, groupedBeatmap)) { - RequestPresentBeatmap?.Invoke(beatmapInfo); + RequestPresentBeatmap?.Invoke(groupedBeatmap.Beatmap); return; } - RequestSelection(beatmapInfo); + RequestSelection(groupedBeatmap); return; } } @@ -345,14 +396,11 @@ namespace osu.Game.Screens.SelectV2 case GroupDefinition: throw new InvalidOperationException("Groups should never become selected"); - case BeatmapInfo beatmapInfo: - // Find any containing group. There should never be too many groups so iterating is efficient enough. - GroupDefinition? containingGroup = grouping.GroupItems.SingleOrDefault(kvp => kvp.Value.Any(i => CheckModelEquality(i.Model, beatmapInfo))).Key; - - setExpandedGroup(containingGroup); + case GroupedBeatmap groupedBeatmap: + setExpandedGroup(groupedBeatmap.Group); if (grouping.BeatmapSetsGroupedTogether) - setExpandedSet(new GroupedBeatmapSet(containingGroup, beatmapInfo.BeatmapSet!)); + setExpandedSet(new GroupedBeatmapSet(groupedBeatmap.Group, groupedBeatmap.Beatmap.BeatmapSet!)); break; } } @@ -417,9 +465,27 @@ namespace osu.Game.Screens.SelectV2 // Store selected group before handling selection (it may implicitly change the expanded group). var groupForReselection = ExpandedGroup; - // Ensure correct post-selection logic is handled on the new items list. - // This will update the visual state of the selected item. - HandleItemSelected(CurrentSelection); + var currentGroupedBeatmap = CurrentSelection as GroupedBeatmap; + + // The filter might have changed the set of available groups, which means that the current selection may point to a stale group. + // Check whether that is the case. + bool groupingRemainsOff = currentGroupedBeatmap?.Group == null && grouping.GroupItems.Count == 0; + bool groupStillExists = currentGroupedBeatmap?.Group != null && grouping.GroupItems.ContainsKey(currentGroupedBeatmap.Group); + + if (groupingRemainsOff || groupStillExists) + { + // Only update the visual state of the selected item. + HandleItemSelected(currentGroupedBeatmap); + } + else if (currentGroupedBeatmap != null) + { + // If the group no longer exists, grab an arbitrary other instance of the beatmap under the first group encountered. + var newSelection = GetCarouselItems()?.Select(i => i.Model).OfType().FirstOrDefault(gb => gb.Beatmap.Equals(currentGroupedBeatmap.Beatmap)); + // Only change the selection if we actually got a positive hit. + // This is necessary so that selection isn't lost if the panel reappears later due to e.g. unapplying some filter criteria that made it disappear in the first place. + if (newSelection != null) + CurrentSelection = newSelection; + } // If a group was selected that is not the one containing the selection, attempt to reselect it. // If the original group was not found, ExpandedGroup will already have been updated to a valid value in `HandleItemSelected` above. @@ -432,7 +498,7 @@ namespace osu.Game.Screens.SelectV2 // Selecting a set isn't valid – let's re-select the first visible difficulty. if (grouping.SetItems.TryGetValue(set, out var items)) { - var beatmaps = items.Select(i => i.Model).OfType(); + var beatmaps = items.Select(i => i.Model).OfType(); RequestRecommendedSelection(beatmaps); } } @@ -450,8 +516,10 @@ namespace osu.Game.Screens.SelectV2 foreach (var item in items) { - if (item.Model is BeatmapInfo beatmapInfo) + if (item.Model is GroupedBeatmap groupedBeatmap) { + var beatmapInfo = groupedBeatmap.Beatmap; + if (beatmapSetInfo == null) { beatmapSetInfo = beatmapInfo.BeatmapSet!; @@ -464,9 +532,9 @@ namespace osu.Game.Screens.SelectV2 } } - var beatmaps = items.Select(i => i.Model).OfType(); + var beatmaps = items.Select(i => i.Model).OfType(); - if (beatmaps.Any(b => b.Equals(CurrentSelection as BeatmapInfo))) + if (beatmaps.Any(b => b.Equals(CurrentSelection as GroupedBeatmap))) return; RequestRecommendedSelection(beatmaps); @@ -481,7 +549,7 @@ namespace osu.Game.Screens.SelectV2 case GroupedBeatmapSet: return true; - case BeatmapInfo: + case GroupedBeatmap: return !grouping.BeatmapSetsGroupedTogether; case GroupDefinition: @@ -492,7 +560,7 @@ namespace osu.Game.Screens.SelectV2 } } - private void setExpandedGroup(GroupDefinition group) + private void setExpandedGroup(GroupDefinition? group) { if (ExpandedGroup != null) setExpansionStateOfGroup(ExpandedGroup, false); @@ -500,7 +568,7 @@ namespace osu.Game.Screens.SelectV2 ExpandedGroup = group; if (ExpandedGroup != null) - setExpansionStateOfGroup(group, true); + setExpansionStateOfGroup(ExpandedGroup, true); } private void setExpansionStateOfGroup(GroupDefinition group, bool expanded) @@ -607,7 +675,7 @@ namespace osu.Game.Screens.SelectV2 sampleChangeSet?.Play(); return; - case BeatmapInfo: + case GroupedBeatmap: sampleChangeDifficulty?.Play(); return; } @@ -687,17 +755,14 @@ namespace osu.Game.Screens.SelectV2 [Resolved] private RealmAccess realm { get; set; } = null!; - private List getDetachedCollections() => realm.Run(r => r.All().AsEnumerable().Detach()); + protected virtual List GetAllCollections() => realm.Run(r => r.All().AsEnumerable().Detach()); - private Dictionary getTopRanksMapping(FilterCriteria criteria) => realm.Run(r => + protected virtual Dictionary GetBeatmapInfoGuidToTopRankMapping(FilterCriteria criteria) => realm.Run(r => { var topRankMapping = new Dictionary(); - var allLocalScores = r.All() - .Filter($"{nameof(ScoreInfo.User)}.{nameof(RealmUser.OnlineID)} == $0" - + $" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.Hash)} == {nameof(ScoreInfo.BeatmapHash)}" - + $" && {nameof(ScoreInfo.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $1" - + $" && {nameof(ScoreInfo.DeletePending)} == false", criteria.LocalUserId, criteria.Ruleset?.ShortName) + var allLocalScores = r.GetAllLocalScoresForUser(criteria.LocalUserId) + .Filter($@"{nameof(ScoreInfo.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $0", criteria.Ruleset?.ShortName) .OrderByDescending(s => s.TotalScore) .ThenBy(s => s.Date); @@ -745,8 +810,8 @@ namespace osu.Game.Screens.SelectV2 if (x is GroupedBeatmapSet groupedSetX && y is GroupedBeatmapSet groupedSetY) return groupedSetX.Equals(groupedSetY); - if (x is BeatmapInfo beatmapX && y is BeatmapInfo beatmapY) - return beatmapX.Equals(beatmapY); + if (x is GroupedBeatmap groupedBeatmapX && y is GroupedBeatmap groupedBeatmapY) + return groupedBeatmapX.Equals(groupedBeatmapY); if (x is GroupDefinition groupX && y is GroupDefinition groupY) return groupX.Equals(groupY); @@ -767,7 +832,7 @@ namespace osu.Game.Screens.SelectV2 case GroupDefinition: return groupPanelPool.Get(); - case BeatmapInfo: + case GroupedBeatmap: if (!grouping.BeatmapSetsGroupedTogether) return standalonePanelPool.Get(); @@ -785,8 +850,8 @@ namespace osu.Game.Screens.SelectV2 #region Random selection handling private readonly Bindable randomAlgorithm = new Bindable(); - private readonly List previouslyVisitedRandomBeatmaps = new List(); - private readonly List randomHistory = new List(); + private readonly HashSet previouslyVisitedRandomBeatmaps = new HashSet(); + private readonly List randomHistory = new List(); private Sample? spinSample; private Sample? randomSelectSample; @@ -799,7 +864,7 @@ namespace osu.Game.Screens.SelectV2 return false; var selectionBefore = CurrentSelectionItem; - var beatmapBefore = selectionBefore?.Model as BeatmapInfo; + var beatmapBefore = selectionBefore?.Model as GroupedBeatmap; bool success; @@ -809,7 +874,7 @@ namespace osu.Game.Screens.SelectV2 randomHistory.Add(beatmapBefore); // keep track of visited beatmaps for "RandomPermutation" random tracking. // note that this is reset when we run out of beatmaps, while `randomHistory` is not. - previouslyVisitedRandomBeatmaps.Add(beatmapBefore); + previouslyVisitedRandomBeatmaps.Add(beatmapBefore.Beatmap); } if (grouping.BeatmapSetsGroupedTogether) @@ -837,29 +902,29 @@ namespace osu.Game.Screens.SelectV2 private bool nextRandomBeatmap() { - ICollection visibleBeatmaps = ExpandedGroup != null + ICollection visibleBeatmaps = ExpandedGroup != null // In the case of grouping, users expect random to only operate on the expanded group. // This is going to incur some overhead as we don't have a group-beatmapset mapping currently. // // If this becomes an issue, we could either store a mapping, or run the random algorithm many times // using the `SetItems` method until we get a group HIT. - ? grouping.GroupItems[ExpandedGroup].Select(i => i.Model).OfType().ToArray() - : GetCarouselItems()!.Select(i => i.Model).OfType().ToArray(); + ? grouping.GroupItems[ExpandedGroup].Select(i => i.Model).OfType().ToArray() + : GetCarouselItems()!.Select(i => i.Model).OfType().ToArray(); - BeatmapInfo beatmap; + GroupedBeatmap beatmap; switch (randomAlgorithm.Value) { case RandomSelectAlgorithm.RandomPermutation: { - ICollection notYetVisitedBeatmaps = visibleBeatmaps.Except(previouslyVisitedRandomBeatmaps).ToList(); + ICollection notYetVisitedBeatmaps = visibleBeatmaps.ExceptBy(previouslyVisitedRandomBeatmaps, gb => gb.Beatmap).ToList(); if (!notYetVisitedBeatmaps.Any()) { - previouslyVisitedRandomBeatmaps.RemoveAll(b => visibleBeatmaps.Contains(b)); + previouslyVisitedRandomBeatmaps.ExceptWith(visibleBeatmaps.Select(b => b.Beatmap)); notYetVisitedBeatmaps = visibleBeatmaps; - if (CurrentSelection is BeatmapInfo beatmapInfo) - notYetVisitedBeatmaps = notYetVisitedBeatmaps.Except([beatmapInfo]).ToList(); + if (CurrentSelection is GroupedBeatmap groupedBeatmap) + notYetVisitedBeatmaps = notYetVisitedBeatmaps.Except([groupedBeatmap]).ToList(); } if (notYetVisitedBeatmaps.Count == 0) @@ -883,7 +948,7 @@ namespace osu.Game.Screens.SelectV2 private bool nextRandomSet() { - ICollection visibleSetsUnderGrouping = ExpandedGroup != null + ICollection visibleGroupedSets = ExpandedGroup != null // In the case of grouping, users expect random to only operate on the expanded group. // This is going to incur some overhead as we don't have a group-beatmapset mapping currently. // @@ -900,14 +965,14 @@ namespace osu.Game.Screens.SelectV2 case RandomSelectAlgorithm.RandomPermutation: { ICollection notYetVisitedSets = - visibleSetsUnderGrouping.ExceptBy(previouslyVisitedRandomBeatmaps.Select(b => b.BeatmapSet!), groupedSet => groupedSet.BeatmapSet).ToList(); + visibleGroupedSets.ExceptBy(previouslyVisitedRandomBeatmaps.Select(b => b.BeatmapSet!), groupedSet => groupedSet.BeatmapSet).ToList(); if (!notYetVisitedSets.Any()) { - previouslyVisitedRandomBeatmaps.RemoveAll(b => visibleSetsUnderGrouping.Any(groupedSet => groupedSet.BeatmapSet.Equals(b.BeatmapSet!))); - notYetVisitedSets = visibleSetsUnderGrouping; - if (CurrentSelection is BeatmapInfo beatmapInfo) - notYetVisitedSets = notYetVisitedSets.ExceptBy([beatmapInfo.BeatmapSet!], groupedSet => groupedSet.BeatmapSet).ToList(); + previouslyVisitedRandomBeatmaps.ExceptWith(visibleGroupedSets.SelectMany(setUnderGrouping => setUnderGrouping.BeatmapSet.Beatmaps)); + notYetVisitedSets = visibleGroupedSets; + if (CurrentSelection is GroupedBeatmap groupedBeatmap) + notYetVisitedSets = notYetVisitedSets.ExceptBy([groupedBeatmap.Beatmap.BeatmapSet!], groupedSet => groupedSet.BeatmapSet).ToList(); } if (notYetVisitedSets.Count == 0) @@ -918,7 +983,7 @@ namespace osu.Game.Screens.SelectV2 } case RandomSelectAlgorithm.Random: - set = visibleSetsUnderGrouping.ElementAt(RNG.Next(visibleSetsUnderGrouping.Count)); + set = visibleGroupedSets.ElementAt(RNG.Next(visibleGroupedSets.Count)); break; default: @@ -941,15 +1006,19 @@ namespace osu.Game.Screens.SelectV2 var previousBeatmap = randomHistory[^1]; randomHistory.RemoveAt(randomHistory.Count - 1); - var previousBeatmapItem = carouselItems.FirstOrDefault(i => i.Model is BeatmapInfo b && b.Equals(previousBeatmap)); + // when going back through rewind history, we may no longer be in the same grouping mode. + // the user wants to go back to the beatmap first and foremost, so the most important thing is to find a panel that corresponds to the beatmap. + // going back to the same group is a nice-to-have, but a secondary concern. + var previousBeatmapItem = carouselItems.Where(i => i.Model is GroupedBeatmap gb && gb.Beatmap.Equals(previousBeatmap.Beatmap)) + .MaxBy(i => ((GroupedBeatmap)i.Model).Group == previousBeatmap.Group); if (previousBeatmapItem == null) return false; - if (CurrentSelection is BeatmapInfo beatmapInfo) + if (CurrentSelection is GroupedBeatmap groupedBeatmap) { if (randomAlgorithm.Value == RandomSelectAlgorithm.RandomPermutation) - previouslyVisitedRandomBeatmaps.Remove(beatmapInfo); + previouslyVisitedRandomBeatmaps.Remove(groupedBeatmap.Beatmap); if (CurrentSelectionItem == null) playSpinSample(0); @@ -957,7 +1026,7 @@ namespace osu.Game.Screens.SelectV2 playSpinSample(visiblePanelCountBetweenItems(previousBeatmapItem, CurrentSelectionItem)); } - RequestSelection(previousBeatmap); + RequestSelection((GroupedBeatmap)previousBeatmapItem.Model); return true; } @@ -1021,4 +1090,11 @@ namespace osu.Game.Screens.SelectV2 /// The purpose of this model is to support splitting beatmap sets apart when the active grouping mode demands it. /// public record GroupedBeatmapSet([UsedImplicitly] GroupDefinition? Group, BeatmapSetInfo BeatmapSet); + + /// + /// Used to represent a under a . + /// The purpose of this model is to support showing multiple copies of a beatmap, which can occur if a beatmap appears in multiple groups + /// (most prominently, collections group mode). + /// + public record GroupedBeatmap(GroupDefinition? Group, BeatmapInfo Beatmap); } diff --git a/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs b/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs index 0d2489c304..69f5596578 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using osu.Framework.Extensions; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Game.Beatmaps; using osu.Game.Collections; using osu.Game.Graphics.Carousel; @@ -120,11 +121,12 @@ namespace osu.Game.Screens.SelectV2 { if (groupItem != null) groupItem.NestedItemCount++; - - item.DrawHeight = PanelBeatmapStandalone.HEIGHT; } - addItem(item); + addItem(new CarouselItem(new GroupedBeatmap(group, beatmap)) + { + DrawHeight = BeatmapSetsGroupedTogether ? PanelBeatmap.HEIGHT : PanelBeatmapStandalone.HEIGHT, + }); lastBeatmap = beatmap; displayedBeatmapsCount++; } @@ -192,7 +194,7 @@ namespace osu.Game.Screens.SelectV2 var date = b.LastPlayed; if (date == null || date == DateTimeOffset.MinValue) - return new GroupDefinition(int.MaxValue, "Never"); + return new GroupDefinition(int.MaxValue, "Never").Yield(); return defineGroupByDate(date.Value); }, items); @@ -236,184 +238,204 @@ namespace osu.Game.Screens.SelectV2 } } - private List getGroupsBy(Func getGroup, List items) + private List getGroupsBy(Func> defineGroups, List items) { - return items.GroupBy(i => getGroup((BeatmapInfo)i.Model)) - .Where(g => g.Key != null) - .OrderBy(g => g.Key!.Order) - .ThenBy(g => g.Key!.Title) - .Select(g => new GroupMapping(g.Key, g.ToList())) - .ToList(); + var groups = new Dictionary(); + + foreach (var item in items) + { + foreach (var groupDefinition in defineGroups((BeatmapInfo)item.Model)) + { + if (!groups.TryGetValue(groupDefinition, out var group)) + group = groups[groupDefinition] = new GroupMapping(groupDefinition, []); + + group.ItemsInGroup.Add(item); + } + } + + return groups.Values + .OrderBy(g => g.Group!.Order) + .ThenBy(g => g.Group!.Title) + .ToList(); } - private GroupDefinition defineGroupAlphabetically(string name) + private IEnumerable defineGroupAlphabetically(string name) { char firstChar = name.FirstOrDefault(); if (char.IsAsciiDigit(firstChar)) - return new GroupDefinition(int.MinValue, "0-9"); + return new GroupDefinition(int.MinValue, "0-9").Yield(); if (char.IsAsciiLetter(firstChar)) - return new GroupDefinition(char.ToUpperInvariant(firstChar) - 'A', char.ToUpperInvariant(firstChar).ToString()); + return new GroupDefinition(char.ToUpperInvariant(firstChar) - 'A', char.ToUpperInvariant(firstChar).ToString()).Yield(); - return new GroupDefinition(int.MaxValue, "Other"); + return new GroupDefinition(int.MaxValue, "Other").Yield(); } - private GroupDefinition defineGroupByDate(DateTimeOffset date) + private IEnumerable defineGroupByDate(DateTimeOffset date) { var now = DateTimeOffset.Now; var elapsed = now - date; if (elapsed.TotalDays < 1) - return new GroupDefinition(0, "Today"); + return new GroupDefinition(0, "Today").Yield(); if (elapsed.TotalDays < 2) - return new GroupDefinition(1, "Yesterday"); + return new GroupDefinition(1, "Yesterday").Yield(); if (elapsed.TotalDays < 7) - return new GroupDefinition(2, "Last week"); + return new GroupDefinition(2, "Last week").Yield(); if (elapsed.TotalDays < 30) - return new GroupDefinition(3, "Last month"); + return new GroupDefinition(3, "Last month").Yield(); if (elapsed.TotalDays < 60) - return new GroupDefinition(4, "1 month ago"); + return new GroupDefinition(4, "1 month ago").Yield(); for (int i = 90; i <= 150; i += 30) { if (elapsed.TotalDays < i) - return new GroupDefinition(i, $"{i / 30 - 1} months ago"); + return new GroupDefinition(i, $"{i / 30 - 1} months ago").Yield(); } - return new GroupDefinition(151, "Over 5 months ago"); + return new GroupDefinition(151, "Over 5 months ago").Yield(); } - private GroupDefinition defineGroupByRankedDate(DateTimeOffset? date) + private IEnumerable defineGroupByRankedDate(DateTimeOffset? date) { if (date == null) - return new GroupDefinition(0, "Unranked"); + return new GroupDefinition(0, "Unranked").Yield(); - return new GroupDefinition(-date.Value.Year, $"{date.Value.Year}"); + return new GroupDefinition(-date.Value.Year, $"{date.Value.Year}").Yield(); } - private GroupDefinition defineGroupByStatus(BeatmapOnlineStatus status) + private IEnumerable defineGroupByStatus(BeatmapOnlineStatus status) { switch (status) { case BeatmapOnlineStatus.Ranked: case BeatmapOnlineStatus.Approved: - return new GroupDefinition(0, BeatmapOnlineStatus.Ranked.GetDescription()); + return new GroupDefinition(0, BeatmapOnlineStatus.Ranked.GetDescription()).Yield(); case BeatmapOnlineStatus.Qualified: - return new GroupDefinition(1, status.GetDescription()); + return new GroupDefinition(1, status.GetDescription()).Yield(); case BeatmapOnlineStatus.WIP: - return new GroupDefinition(2, status.GetDescription()); + return new GroupDefinition(2, status.GetDescription()).Yield(); case BeatmapOnlineStatus.Pending: - return new GroupDefinition(3, status.GetDescription()); + return new GroupDefinition(3, status.GetDescription()).Yield(); case BeatmapOnlineStatus.Graveyard: - return new GroupDefinition(4, status.GetDescription()); + return new GroupDefinition(4, status.GetDescription()).Yield(); case BeatmapOnlineStatus.LocallyModified: - return new GroupDefinition(5, status.GetDescription()); + return new GroupDefinition(5, status.GetDescription()).Yield(); case BeatmapOnlineStatus.None: - return new GroupDefinition(6, status.GetDescription()); + return new GroupDefinition(6, status.GetDescription()).Yield(); case BeatmapOnlineStatus.Loved: - return new GroupDefinition(7, status.GetDescription()); + return new GroupDefinition(7, status.GetDescription()).Yield(); default: throw new ArgumentOutOfRangeException(nameof(status), status, null); } } - private GroupDefinition defineGroupByBPM(double bpm) + private IEnumerable defineGroupByBPM(double bpm) { if (bpm < 60) - return new GroupDefinition(60, "Under 60 BPM"); + return new GroupDefinition(60, "Under 60 BPM").Yield(); for (int i = 70; i <= 300; i += 10) { if (bpm < i) - return new GroupDefinition(i, $"{i - 10} - {i} BPM"); + return new GroupDefinition(i, $"{i - 10} - {i} BPM").Yield(); } - return new GroupDefinition(301, "Over 300 BPM"); + return new GroupDefinition(301, "Over 300 BPM").Yield(); } - private GroupDefinition defineGroupByStars(double stars) + private IEnumerable defineGroupByStars(double stars) { // truncation is intentional - compare `FormatUtils.FormatStarRating()` int starInt = (int)stars; var starDifficulty = new StarDifficulty(starInt, 0); if (starInt == 0) - return new StarDifficultyGroupDefinition(0, "Below 1 Star", starDifficulty); + return new StarDifficultyGroupDefinition(0, "Below 1 Star", starDifficulty).Yield(); if (starInt == 1) - return new StarDifficultyGroupDefinition(1, "1 Star", starDifficulty); + return new StarDifficultyGroupDefinition(1, "1 Star", starDifficulty).Yield(); - return new StarDifficultyGroupDefinition(starInt, $"{starInt} Stars", starDifficulty); + return new StarDifficultyGroupDefinition(starInt, $"{starInt} Stars", starDifficulty).Yield(); } - private GroupDefinition defineGroupByLength(double length) + private IEnumerable defineGroupByLength(double length) { for (int i = 1; i < 6; i++) { if (length <= i * 60_000) { if (i == 1) - return new GroupDefinition(1, "1 minute or less"); + return new GroupDefinition(1, "1 minute or less").Yield(); - return new GroupDefinition(i, $"{i} minutes or less"); + return new GroupDefinition(i, $"{i} minutes or less").Yield(); } } if (length <= 10 * 60_000) - return new GroupDefinition(10, "10 minutes or less"); + return new GroupDefinition(10, "10 minutes or less").Yield(); - return new GroupDefinition(11, "Over 10 minutes"); + return new GroupDefinition(11, "Over 10 minutes").Yield(); } - private GroupDefinition defineGroupBySource(string source) + private IEnumerable defineGroupBySource(string source) { if (string.IsNullOrEmpty(source)) - return new GroupDefinition(1, "Unsourced"); + return new GroupDefinition(1, "Unsourced").Yield(); - return new GroupDefinition(0, source); + return new GroupDefinition(0, source).Yield(); } - private GroupDefinition defineGroupByCollection(BeatmapInfo beatmap, IEnumerable collections) + private IEnumerable defineGroupByCollection(BeatmapInfo beatmap, IEnumerable collections) { + bool anyCollections = false; + foreach (var collection in collections) { if (collection.BeatmapMD5Hashes.Contains(beatmap.MD5Hash)) - return new GroupDefinition(0, collection.Name); + { + yield return new GroupDefinition(0, collection.Name); + + anyCollections = true; + } } - return new GroupDefinition(1, "Not in collection"); + if (anyCollections) + yield break; + + yield return new GroupDefinition(1, "Not in collection"); } - private GroupDefinition? defineGroupByOwnMaps(BeatmapInfo beatmap, int? localUserId, string? localUserUsername) + private IEnumerable defineGroupByOwnMaps(BeatmapInfo beatmap, int? localUserId, string? localUserUsername) { var author = beatmap.BeatmapSet!.Metadata.Author; if (author.OnlineID == localUserId || (author.OnlineID <= 1 && author.Username == localUserUsername)) - return new GroupDefinition(0, "My maps"); + return new GroupDefinition(0, "My maps").Yield(); // discard beatmaps not owned by the user. - return null; + return []; } - private GroupDefinition defineGroupByRankAchieved(BeatmapInfo beatmap, IReadOnlyDictionary topRankMapping) + private IEnumerable defineGroupByRankAchieved(BeatmapInfo beatmap, IReadOnlyDictionary topRankMapping) { if (topRankMapping.TryGetValue(beatmap.ID, out var rank)) - return new GroupDefinition(-(int)rank, rank.GetDescription()); + return new GroupDefinition(-(int)rank, rank.GetDescription()).Yield(); - return new GroupDefinition(int.MaxValue, "Unplayed"); + return new GroupDefinition(int.MaxValue, "Unplayed").Yield(); } private record GroupMapping(GroupDefinition? Group, List ItemsInGroup); diff --git a/osu.Game/Screens/SelectV2/BeatmapLeaderboardScore.cs b/osu.Game/Screens/SelectV2/BeatmapLeaderboardScore.cs index 67f3075e0e..80414d3f44 100644 --- a/osu.Game/Screens/SelectV2/BeatmapLeaderboardScore.cs +++ b/osu.Game/Screens/SelectV2/BeatmapLeaderboardScore.cs @@ -652,7 +652,7 @@ namespace osu.Game.Screens.SelectV2 Font = OsuFont.Style.Caption1.With(weight: FontWeight.SemiBold); } - protected override string Format() => Date.ToShortRelativeTime(TimeSpan.FromSeconds(30)); + protected override LocalisableString Format() => Date.ToShortRelativeTime(TimeSpan.FromSeconds(30)); } private partial class ScoreComponentLabel : Container diff --git a/osu.Game/Screens/SelectV2/BeatmapTitleWedge_DifficultyDisplay.cs b/osu.Game/Screens/SelectV2/BeatmapTitleWedge_DifficultyDisplay.cs index 0e880a740f..55ed488d87 100644 --- a/osu.Game/Screens/SelectV2/BeatmapTitleWedge_DifficultyDisplay.cs +++ b/osu.Game/Screens/SelectV2/BeatmapTitleWedge_DifficultyDisplay.cs @@ -249,7 +249,7 @@ namespace osu.Game.Screens.SelectV2 mapperText.Text = beatmap.Value.Metadata.Author.Username; } - starRatingDisplay.Current = (Bindable)difficultyCache.GetBindableDifficulty(beatmap.Value.BeatmapInfo, cancellationSource.Token, SongSelect.SELECTION_DEBOUNCE); + starRatingDisplay.Current = (Bindable)difficultyCache.GetBindableDifficulty(beatmap.Value.BeatmapInfo, cancellationSource.Token, SongSelect.DIFFICULTY_CALCULATION_DEBOUNCE); updateCountStatistics(cancellationSource.Token); updateDifficultyStatistics(); diff --git a/osu.Game/Screens/SelectV2/CircleSizeFilter.cs b/osu.Game/Screens/SelectV2/CircleSizeFilter.cs index bce9add224..d30c53e84a 100644 --- a/osu.Game/Screens/SelectV2/CircleSizeFilter.cs +++ b/osu.Game/Screens/SelectV2/CircleSizeFilter.cs @@ -49,7 +49,7 @@ namespace osu.Game.Screens.SelectV2 public static CsItemInfo? GetById(string id) => ALL.FirstOrDefault(m => m.Id == id); } - public class CircleSizeFilter + public class KeyModeFilter { public HashSet SelectedModeIds { get; } = new HashSet { "All" }; diff --git a/osu.Game/Screens/SelectV2/FilterControl.cs b/osu.Game/Screens/SelectV2/FilterControl.cs index d676f874b0..9e9ecd62ae 100644 --- a/osu.Game/Screens/SelectV2/FilterControl.cs +++ b/osu.Game/Screens/SelectV2/FilterControl.cs @@ -43,7 +43,7 @@ namespace osu.Game.Screens.SelectV2 private ShearedDropdown sortDropdown = null!; private ShearedDropdown groupDropdown = null!; private CollectionDropdown collectionDropdown = null!; - private CircleSizeSelector csSelector = null!; + private EzKeyModeSelector csSelector = null!; [Resolved] private IBindable ruleset { get; set; } = null!; @@ -182,7 +182,7 @@ namespace osu.Game.Screens.SelectV2 } } }, - csSelector = new CircleSizeSelector + csSelector = new EzKeyModeSelector { RelativeSizeAxes = Axes.X, }, @@ -244,7 +244,7 @@ namespace osu.Game.Screens.SelectV2 localUser.BindValueChanged(_ => updateCriteria()); csSelector.Current.BindValueChanged(_ => updateCriteria()); - csSelector.CircleSizeFilter.SelectionChanged += updateCriteria; + csSelector.KeyModeFilter.SelectionChanged += updateCriteria; updateCriteria(); } @@ -291,7 +291,7 @@ namespace osu.Game.Screens.SelectV2 private void applyCircleSizeFilter(FilterCriteria criteria) { - var selectedModeIds = csSelector.CircleSizeFilter.SelectedModeIds; + var selectedModeIds = csSelector.KeyModeFilter.SelectedModeIds; if (selectedModeIds.Count == 0 || selectedModeIds.Contains("All")) return; diff --git a/osu.Game/Screens/SelectV2/FilterControl_CircleSizeSelector.cs b/osu.Game/Screens/SelectV2/FilterControl_CircleSizeSelector.cs index 16a936179b..9701d879d0 100644 --- a/osu.Game/Screens/SelectV2/FilterControl_CircleSizeSelector.cs +++ b/osu.Game/Screens/SelectV2/FilterControl_CircleSizeSelector.cs @@ -21,7 +21,7 @@ using osu.Game.Graphics.Sprites; namespace osu.Game.Screens.SelectV2 { - public partial class CircleSizeSelector : CompositeDrawable + public partial class EzKeyModeSelector : CompositeDrawable { private readonly Bindable keyModeId = new Bindable("All"); private readonly BindableBool isMultiSelectMode = new BindableBool(); @@ -38,9 +38,9 @@ namespace osu.Game.Screens.SelectV2 public IBindable Current => tabControl.Current; - public CircleSizeFilter CircleSizeFilter { get; } = new CircleSizeFilter(); + public KeyModeFilter KeyModeFilter { get; } = new KeyModeFilter(); - public CircleSizeSelector() + public EzKeyModeSelector() { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; @@ -88,12 +88,12 @@ namespace osu.Game.Screens.SelectV2 multiSelectButton.Active.BindTo(isMultiSelectMode); - keyModeId.BindTo(config.GetBindable(OsuSetting.EzSelectMode)); + keyModeId.BindTo(config.GetBindable(OsuSetting.EzSelectCsMode)); keyModeId.BindValueChanged(onSelectorChanged, true); isMultiSelectMode.BindValueChanged(_ => updateValue(), true); ruleset.BindValueChanged(onRulesetChanged, true); - CircleSizeFilter.SelectionChanged += updateValue; + KeyModeFilter.SelectionChanged += updateValue; tabControl.Current.BindTarget = keyModeId; } @@ -102,7 +102,7 @@ namespace osu.Game.Screens.SelectV2 { base.Dispose(isDisposing); - CircleSizeFilter.SelectionChanged -= updateValue; + KeyModeFilter.SelectionChanged -= updateValue; } private void onRulesetChanged(ValueChangedEvent e) @@ -114,7 +114,7 @@ namespace osu.Game.Screens.SelectV2 private void onSelectorChanged(ValueChangedEvent e) { var modes = parseModeIds(e.NewValue); - CircleSizeFilter.SetSelection(modes); + KeyModeFilter.SetSelection(modes); tabControl.UpdateTabItemUI(modes); } @@ -129,12 +129,12 @@ namespace osu.Game.Screens.SelectV2 if (isMultiSelectMode.Value) { - selectedModes = CircleSizeFilter.SelectedModeIds; + selectedModes = KeyModeFilter.SelectedModeIds; keyModeId.Value = string.Join(",", selectedModes.OrderBy(x => x)); } else { - selectedModes = CircleSizeFilter.SelectedModeIds; + selectedModes = KeyModeFilter.SelectedModeIds; keyModeId.Value = selectedModes.Count > 0 ? selectedModes.First() : "All"; } @@ -161,8 +161,6 @@ namespace osu.Game.Screens.SelectV2 public Container LabelContainer; public bool IsMultiSelectMode { get; set; } - public float TabHeight { get; set; } = 30f; - public float TabSpacing { get; set; } = 5f; public Action>? SetCurrentSelections; @@ -181,7 +179,8 @@ namespace osu.Game.Screens.SelectV2 Depth = float.MaxValue, CornerRadius = ShearedButton.CORNER_RADIUS, Masking = true, - AutoSizeAxes = Axes.Both, + AutoSizeAxes = Axes.Y, + Width = 50, Children = new Drawable[] { labelBox = new Box @@ -195,6 +194,8 @@ namespace osu.Game.Screens.SelectV2 { Horizontal = 8f, Vertical = 7f }, Font = OsuFont.Style.Body.With(weight: FontWeight.SemiBold), Shear = -OsuGame.SHEAR, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, }, } }; @@ -210,7 +211,7 @@ namespace osu.Game.Screens.SelectV2 TabContainer.Origin = Anchor.CentreLeft; TabContainer.Shear = -OsuGame.SHEAR; TabContainer.RelativeSizeAxes = Axes.X; - TabContainer.Height = TabHeight; + TabContainer.AutoSizeAxes = Axes.Y; TabContainer.Spacing = new Vector2(0f); TabContainer.Margin = new MarginPadding { diff --git a/osu.Game/Screens/SelectV2/PanelBeatmap.cs b/osu.Game/Screens/SelectV2/PanelBeatmap.cs index dbc97f2ccc..279d339f2b 100644 --- a/osu.Game/Screens/SelectV2/PanelBeatmap.cs +++ b/osu.Game/Screens/SelectV2/PanelBeatmap.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -78,6 +77,8 @@ namespace osu.Game.Screens.SelectV2 [Resolved] private ISongSelect? songSelect { get; set; } + private BeatmapInfo beatmap => ((GroupedBeatmap)Item!.Model).Beatmap; + [Resolved] private BeatmapManager beatmapManager { get; set; } = null!; @@ -250,9 +251,6 @@ namespace osu.Game.Screens.SelectV2 { base.PrepareForUse(); - Debug.Assert(Item != null); - var beatmap = (BeatmapInfo)Item.Model; - difficultyIcon.Icon = getRulesetIcon(beatmap.Ruleset); localRank.Beatmap = beatmap; @@ -365,9 +363,7 @@ namespace osu.Game.Screens.SelectV2 if (Item == null) return; - var beatmap = (BeatmapInfo)Item.Model; - - starDifficultyBindable = difficultyCache.GetBindableDifficulty(beatmap, starDifficultyCancellationSource.Token, SongSelect.SELECTION_DEBOUNCE); + starDifficultyBindable = difficultyCache.GetBindableDifficulty(beatmap, starDifficultyCancellationSource.Token, SongSelect.DIFFICULTY_CALCULATION_DEBOUNCE); starDifficultyBindable.BindValueChanged(starDifficulty => { starRatingDisplay.Current.Value = starDifficulty.NewValue; @@ -410,8 +406,6 @@ namespace osu.Game.Screens.SelectV2 if (Item == null) return; - var beatmap = (BeatmapInfo)Item.Model; - if (ruleset.Value.OnlineID == 3) { // Account for mania differences locally for now. @@ -445,7 +439,7 @@ namespace osu.Game.Screens.SelectV2 List items = new List(); if (songSelect != null) - items.AddRange(songSelect.GetForwardActions((BeatmapInfo)Item.Model)); + items.AddRange(songSelect.GetForwardActions(beatmap)); return items.ToArray(); } diff --git a/osu.Game/Screens/SelectV2/PanelBeatmapStandalone.cs b/osu.Game/Screens/SelectV2/PanelBeatmapStandalone.cs index b443b32dbc..4ac05c0308 100644 --- a/osu.Game/Screens/SelectV2/PanelBeatmapStandalone.cs +++ b/osu.Game/Screens/SelectV2/PanelBeatmapStandalone.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Threading; using osu.Framework.Allocation; using osu.Framework.Bindables; @@ -73,6 +72,8 @@ namespace osu.Game.Screens.SelectV2 private Box backgroundBorder = null!; + private BeatmapInfo beatmap => ((GroupedBeatmap)Item!.Model).Beatmap; + public PanelBeatmapStandalone() { PanelXOffset = 20; @@ -209,17 +210,8 @@ namespace osu.Game.Screens.SelectV2 { base.LoadComplete(); - ruleset.BindValueChanged(_ => - { - computeStarRating(); - updateKeyCount(); - }); - - mods.BindValueChanged(_ => - { - computeStarRating(); - updateKeyCount(); - }, true); + ruleset.BindValueChanged(_ => updateKeyCount()); + mods.BindValueChanged(_ => updateKeyCount(), true); Selected.BindValueChanged(s => Expanded.Value = s.NewValue, true); } @@ -228,9 +220,6 @@ namespace osu.Game.Screens.SelectV2 { base.PrepareForUse(); - Debug.Assert(Item != null); - - var beatmap = (BeatmapInfo)Item.Model; var beatmapSet = beatmap.BeatmapSet!; beatmapBackground.Beatmap = beatmaps.GetWorkingBeatmap(beatmap); @@ -271,9 +260,7 @@ namespace osu.Game.Screens.SelectV2 if (Item == null) return; - var beatmap = (BeatmapInfo)Item.Model; - - starDifficultyBindable = difficultyCache.GetBindableDifficulty(beatmap, starDifficultyCancellationSource.Token, SongSelect.SELECTION_DEBOUNCE); + starDifficultyBindable = difficultyCache.GetBindableDifficulty(beatmap, starDifficultyCancellationSource.Token, SongSelect.DIFFICULTY_CALCULATION_DEBOUNCE); starDifficultyBindable.BindValueChanged(starDifficulty => { starRatingDisplay.Current.Value = starDifficulty.NewValue; @@ -309,8 +296,6 @@ namespace osu.Game.Screens.SelectV2 if (Item == null) return; - var beatmap = (BeatmapInfo)Item.Model; - if (ruleset.Value.OnlineID == 3) { // Account for mania differences locally for now. @@ -335,7 +320,7 @@ namespace osu.Game.Screens.SelectV2 List items = new List(); if (songSelect != null) - items.AddRange(songSelect.GetForwardActions((BeatmapInfo)Item.Model)); + items.AddRange(songSelect.GetForwardActions(beatmap)); return items.ToArray(); } diff --git a/osu.Game/Screens/SelectV2/PanelLocalRankDisplay.cs b/osu.Game/Screens/SelectV2/PanelLocalRankDisplay.cs index 273f995794..c72835144f 100644 --- a/osu.Game/Screens/SelectV2/PanelLocalRankDisplay.cs +++ b/osu.Game/Screens/SelectV2/PanelLocalRankDisplay.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; using osu.Game.Database; -using osu.Game.Models; using osu.Game.Online.API; using osu.Game.Online.Leaderboards; using osu.Game.Rulesets; @@ -78,12 +77,9 @@ namespace osu.Game.Screens.SelectV2 return; scoreSubscription = realm.RegisterForNotifications(r => - r.All() - .Filter($"{nameof(ScoreInfo.User)}.{nameof(RealmUser.OnlineID)} == $0" - + $" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.ID)} == $1" - + $" && {nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.Hash)} == {nameof(ScoreInfo.BeatmapHash)}" - + $" && {nameof(ScoreInfo.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $2" - + $" && {nameof(ScoreInfo.DeletePending)} == false", api.LocalUser.Value.Id, beatmap.ID, ruleset.Value.ShortName), + r.GetAllLocalScoresForUser(api.LocalUser.Value.Id) + .Filter($@"{nameof(ScoreInfo.BeatmapInfo)}.{nameof(BeatmapInfo.ID)} == $0" + + $" && {nameof(ScoreInfo.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $1", beatmap.ID, ruleset.Value.ShortName), localScoresChanged); } diff --git a/osu.Game/Screens/SelectV2/RealmPopulatingOnlineLookupSource.cs b/osu.Game/Screens/SelectV2/RealmPopulatingOnlineLookupSource.cs index 486dfbe255..832095058a 100644 --- a/osu.Game/Screens/SelectV2/RealmPopulatingOnlineLookupSource.cs +++ b/osu.Game/Screens/SelectV2/RealmPopulatingOnlineLookupSource.cs @@ -43,6 +43,8 @@ namespace osu.Game.Screens.SelectV2 var request = new GetBeatmapSetRequest(id); var tcs = new TaskCompletionSource(); + token.Register(() => request.Cancel()); + // async request success callback is a bit of a dangerous game, but there's some reasoning for it. // - don't really want to use `IAPIAccess.PerformAsync()` because we still want to respect request queueing & online status checks // - we want the realm write here to be async because it is known to be slow for some users with large beatmap collections diff --git a/osu.Game/Screens/SelectV2/SongSelect.cs b/osu.Game/Screens/SelectV2/SongSelect.cs index ef00064ced..9947ffc6bc 100644 --- a/osu.Game/Screens/SelectV2/SongSelect.cs +++ b/osu.Game/Screens/SelectV2/SongSelect.cs @@ -12,6 +12,7 @@ using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Audio.Track; using osu.Framework.Bindables; +using osu.Framework.Development; using osu.Framework.Extensions; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; @@ -20,6 +21,7 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; +using osu.Framework.Input; using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; using osu.Framework.Input.StateChanges; @@ -63,9 +65,20 @@ namespace osu.Game.Screens.SelectV2 [Cached(typeof(ISongSelect))] public abstract partial class SongSelect : ScreenWithBeatmapBackground, IKeyBindingHandler, ISongSelect { - // this is intentionally slightly higher than key repeat, but low enough to not impede user experience. - // this avoids rapid churn loading when iterating the carousel using keyboard. - public const int SELECTION_DEBOUNCE = 100; + /// + /// A debounce that governs how long after a panel is selected before the rest of song select (and the game at large) + /// updates to show that selection. + /// + /// This is intentionally slightly higher than key repeat, but low enough to not impede user experience. + /// + public const int SELECTION_DEBOUNCE = 150; + + /// + /// A general "global" debounce to be applied to anything aggressive difficulty calculation at song select, + /// either after selection or after a panel comes on screen. Value should be low enough that users don't complain, + /// but otherwise as high as possible to reduce overheads. + /// + public const int DIFFICULTY_CALCULATION_DEBOUNCE = 150; private const float logo_scale = 0.4f; private const double fade_duration = 300; @@ -137,6 +150,8 @@ namespace osu.Game.Screens.SelectV2 [Resolved] private IDialogOverlay? dialogOverlay { get; set; } + private InputManager inputManager = null!; + private readonly RealmPopulatingOnlineLookupSource onlineLookupSource = new RealmPopulatingOnlineLookupSource(); private Bindable configBackgroundBlur = null!; @@ -289,9 +304,10 @@ namespace osu.Game.Screens.SelectV2 }); } - private void requestRecommendedSelection(IEnumerable b) + private void requestRecommendedSelection(IEnumerable groupedBeatmaps) { - queueBeatmapSelection(difficultyRecommender?.GetRecommendedBeatmap(b) ?? b.First()); + var recommendedBeatmap = difficultyRecommender?.GetRecommendedBeatmap(groupedBeatmaps.Select(gb => gb.Beatmap)) ?? groupedBeatmaps.First().Beatmap; + queueBeatmapSelection(groupedBeatmaps.First(bug => bug.Beatmap.Equals(recommendedBeatmap))); } /// @@ -332,6 +348,8 @@ namespace osu.Game.Screens.SelectV2 { base.LoadComplete(); + inputManager = GetContainingInputManager()!; + filterControl.CriteriaChanged += criteriaChanged; modSelectOverlay.State.BindValueChanged(v => @@ -370,8 +388,67 @@ namespace osu.Game.Screens.SelectV2 new Dimension(), new Dimension(GridSizeMode.Relative, 0.5f, minSize: 500, maxSize: 700 + widescreenBonusWidth * 300), }; + + if (this.IsCurrentScreen()) + updateDebounce(); } + #region Selection debounce + + private BeatmapInfo? debounceQueuedSelection; + private double debounceElapsedTime; + + private void debounceQueueSelection(BeatmapInfo beatmap) + { + debounceQueuedSelection = beatmap; + debounceElapsedTime = 0; + } + + private void updateDebounce() + { + if (debounceQueuedSelection == null) return; + + double elapsed = Clock.ElapsedFrameTime; + + // When a key is being held, assume the user is traversing the carousel using key repeat. + // We want to change panels less often in this state (basically making debounce longer than initial key repeat, at least). + double debounceInterval = inputManager.CurrentState.Keyboard.Keys.HasAnyButtonPressed ? SELECTION_DEBOUNCE * 2 : SELECTION_DEBOUNCE; + + // avoid debounce running early if there's a single long frame. + if (!DebugUtils.IsNUnitRunning && Clock.FramesPerSecond > 0) + elapsed = Math.Min(1000 / Clock.FramesPerSecond, elapsed); + + debounceElapsedTime += elapsed; + + if (debounceElapsedTime >= debounceInterval) + performDebounceSelection(); + } + + private void performDebounceSelection() + { + if (debounceQueuedSelection == null) return; + + try + { + if (Beatmap.Value.BeatmapInfo.Equals(debounceQueuedSelection)) + return; + + Beatmap.Value = beatmaps.GetWorkingBeatmap(debounceQueuedSelection); + } + finally + { + cancelDebounceSelection(); + } + } + + private void cancelDebounceSelection() + { + debounceQueuedSelection = null; + debounceElapsedTime = 0; + } + + #endregion + #region Audio [Resolved] @@ -435,8 +512,6 @@ namespace osu.Game.Screens.SelectV2 #region Selection handling - private ScheduledDelegate? selectionDebounce; - /// /// Finalises selection on the given and runs the provided action if possible. /// @@ -452,7 +527,7 @@ namespace osu.Game.Screens.SelectV2 // To ensure sanity, cancel any pending selection as we are about to force a selection. // Carousel selection will update to the forced selection via a call of `ensureGlobalBeatmapValid` below, or when song select becomes current again. - selectionDebounce?.Cancel(); + cancelDebounceSelection(); // Forced refetch is important here to guarantee correct invalidation across all difficulties (editor specific). Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmap, true); @@ -472,23 +547,16 @@ namespace osu.Game.Screens.SelectV2 /// - After , update the global beatmap. This in turn causes song select visuals (title, details, leaderboard) to update. /// This debounce is intended to avoid high overheads from churning lookups while a user is changing selection via rapid keyboard operations. /// - /// The beatmap to be selected. - private void queueBeatmapSelection(BeatmapInfo beatmap) + /// The beatmap to be selected. + private void queueBeatmapSelection(GroupedBeatmap groupedBeatmap) { if (!this.IsCurrentScreen()) return; - carousel.CurrentSelection = beatmap; + carousel.CurrentGroupedBeatmap = groupedBeatmap; // Debounce consideration is to avoid beatmap churn on key repeat selection. - selectionDebounce?.Cancel(); - selectionDebounce = Scheduler.AddDelayed(() => - { - if (Beatmap.Value.BeatmapInfo.Equals(beatmap)) - return; - - Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmap); - }, SELECTION_DEBOUNCE); + debounceQueueSelection(groupedBeatmap.Beatmap); } private bool ensureGlobalBeatmapValid() @@ -496,7 +564,7 @@ namespace osu.Game.Screens.SelectV2 if (!this.IsCurrentScreen()) return false; - finaliseBeatmapSelection(); + performDebounceSelection(); // While filtering, let's not ever attempt to change selection. // This will be resolved after the filter completes, see `newItemsPresented`. @@ -509,7 +577,7 @@ namespace osu.Game.Screens.SelectV2 if (validSelection) { - carousel.CurrentSelection = currentBeatmap.BeatmapInfo; + carousel.CurrentBeatmap = currentBeatmap.BeatmapInfo; return true; } @@ -517,7 +585,7 @@ namespace osu.Game.Screens.SelectV2 if (Beatmap.IsDefault) { validSelection = carousel.NextRandom(); - finaliseBeatmapSelection(); + performDebounceSelection(); return validSelection; } @@ -532,22 +600,16 @@ namespace osu.Game.Screens.SelectV2 if (validBeatmaps.Any()) { - requestRecommendedSelection(validBeatmaps); + carousel.CurrentBeatmap = difficultyRecommender?.GetRecommendedBeatmap(validBeatmaps) ?? validBeatmaps.First(); return true; } } // If all else fails, use the default beatmap. Beatmap.SetDefault(); - finaliseBeatmapSelection(); + performDebounceSelection(); return validSelection; - - void finaliseBeatmapSelection() - { - if (selectionDebounce?.State == ScheduledDelegate.RunState.Waiting) - selectionDebounce?.RunTask(); - } } private bool checkBeatmapValidForSelection(BeatmapInfo beatmap, FilterCriteria? criteria) @@ -794,7 +856,7 @@ namespace osu.Game.Screens.SelectV2 // Interrupting could cause the debounce interval to be reduced. // // `ensureGlobalBeatmapValid` is run post-selection which will resolve any pending incompatibilities (see `Beatmap` bindable callback). - if (selectionDebounce?.State != ScheduledDelegate.RunState.Waiting) + if (debounceQueuedSelection == null) ensureGlobalBeatmapValid(); updateWedgeVisibility(); @@ -1002,6 +1064,7 @@ namespace osu.Game.Screens.SelectV2 return; onlineLookupCancellation?.Cancel(); + onlineLookupCancellation = null; if (beatmapSetInfo.OnlineID < 0) { @@ -1011,7 +1074,7 @@ namespace osu.Game.Screens.SelectV2 lastLookupResult.Value = BeatmapSetLookupResult.InProgress(); onlineLookupCancellation = new CancellationTokenSource(); - currentOnlineLookup = onlineLookupSource.GetBeatmapSetAsync(beatmapSetInfo.OnlineID); + currentOnlineLookup = onlineLookupSource.GetBeatmapSetAsync(beatmapSetInfo.OnlineID, onlineLookupCancellation.Token); currentOnlineLookup.ContinueWith(t => { if (t.IsCompletedSuccessfully) diff --git a/osu.Game/Skinning/Components/ArgonJudgementCounter.cs b/osu.Game/Skinning/Components/ArgonJudgementCounter.cs new file mode 100644 index 0000000000..84973aab3e --- /dev/null +++ b/osu.Game/Skinning/Components/ArgonJudgementCounter.cs @@ -0,0 +1,74 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Extensions.LocalisationExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Graphics; +using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.Play.HUD; +using osu.Game.Screens.Play.HUD.JudgementCounter; +using osuTK.Graphics; + +namespace osu.Game.Skinning.Components +{ + public sealed partial class ArgonJudgementCounter : VisibilityContainer + { + public readonly JudgementCount Result; + + public IBindable WireframeOpacity => textComponent.WireframeOpacity; + + public IBindable WireframeDigits { get; } = new Bindable(); + + public IBindable ShowLabel => textComponent.ShowLabel; + + private readonly ArgonCounterTextComponent textComponent; + private readonly BindableInt displayedValue = new BindableInt(); + + [Resolved] + private OsuColour colours { get; set; } = null!; + + public ArgonJudgementCounter(JudgementCount result) + { + Result = result; + + AutoSizeAxes = Axes.Both; + AddInternal(textComponent = new ArgonCounterTextComponent(Anchor.TopLeft, result.DisplayName.ToUpper())); + } + + private void updateWireframe() + { + textComponent.WireframeTemplate = new string('#', WireframeDigits.Value ?? Math.Max(2, textComponent.Text.ToString().Length)); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + WireframeDigits.BindValueChanged(_ => updateWireframe()); + + displayedValue.BindTo(Result.ResultCount); + displayedValue.BindValueChanged(v => + { + textComponent.Text = v.NewValue.ToString(); + updateWireframe(); + }, true); + + var result = Result.Types.First(); + textComponent.LabelColour.Value = getJudgementColor(result); + textComponent.ShowLabel.BindValueChanged(v => textComponent.TextColour.Value = !v.NewValue ? getJudgementColor(result) : Color4.White, true); + } + + private Color4 getJudgementColor(HitResult result) + { + return result.IsBasic() ? colours.ForHitResult(result) : !result.IsBonus() ? colours.PurpleLight : colours.PurpleLighter; + } + + protected override void PopIn() => this.FadeIn(JudgementCounterDisplay.TRANSFORM_DURATION, Easing.OutQuint); + protected override void PopOut() => this.FadeOut(); + } +} diff --git a/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs b/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs new file mode 100644 index 0000000000..885b3922f2 --- /dev/null +++ b/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs @@ -0,0 +1,170 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using JetBrains.Annotations; +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Localisation; +using osu.Game.Configuration; +using osu.Game.Localisation.HUD; +using osu.Game.Localisation.SkinComponents; +using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.Play.HUD.JudgementCounter; +using osuTK; + +namespace osu.Game.Skinning.Components +{ + [UsedImplicitly] + public partial class ArgonJudgementCounterDisplay : CompositeDrawable, ISerialisableDrawable + { + [Resolved] + private JudgementCountController judgementCountController { get; set; } = null!; + + [SettingSource("Wireframe opacity", "Controls the opacity of the wireframes behind the digits.")] + public BindableFloat WireframeOpacity { get; } = new BindableFloat(0.25f) + { + Precision = 0.01f, + MinValue = 0, + MaxValue = 1, + }; + + [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.ShowLabel))] + public Bindable ShowLabel { get; } = new BindableBool(true); + + [SettingSource(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.ShowMaxJudgement))] + public BindableBool ShowMaxJudgement { get; } = new BindableBool(true); + + [SettingSource(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayMode))] + public Bindable Mode { get; } = new Bindable(); + + [SettingSource(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.FlowDirection))] + public Bindable FlowDirection { get; } = new Bindable(); + + private readonly Bindable wireframeDigits = new Bindable(); + + protected FillFlowContainer CounterFlow = null!; + + [BackgroundDependencyLoader] + private void load() + { + AutoSizeAxes = Axes.Both; + InternalChild = CounterFlow = new FillFlowContainer + { + Direction = getFillDirection(FlowDirection.Value), + Spacing = new Vector2(16), + AutoSizeAxes = Axes.Both, + }; + + foreach (var counter in judgementCountController.Counters) + { + counter.ResultCount.BindValueChanged(_ => updateWireframeDigits()); + ArgonJudgementCounter counterComponent = new ArgonJudgementCounter(counter) + { + WireframeOpacity = { BindTarget = WireframeOpacity }, + WireframeDigits = { BindTarget = wireframeDigits }, + ShowLabel = { BindTarget = ShowLabel }, + }; + CounterFlow.Add(counterComponent); + } + } + + protected override void LoadComplete() + { + base.LoadComplete(); + Mode.BindValueChanged(_ => updateVisibility()); + ShowMaxJudgement.BindValueChanged(_ => updateVisibility(), true); + FlowDirection.BindValueChanged(_ => updateFlowDirection(), true); + } + + private void updateVisibility() + { + for (int i = 0; i < CounterFlow.Children.Count; i++) + { + ArgonJudgementCounter counter = CounterFlow.Children[i]; + + if (shouldBeVisible(i, counter)) + counter.Show(); + else + counter.Hide(); + } + + updateWireframeDigits(); + } + + private void updateFlowDirection() + { + CounterFlow.Direction = getFillDirection(FlowDirection.Value); + updateWireframeDigits(); + } + + private void updateWireframeDigits() + { + var visibleCounters = CounterFlow.Children.Where(counter => counter.State.Value == Visibility.Visible).ToArray(); + + if (visibleCounters.Length == 0) + return; + + wireframeDigits.Value = FlowDirection.Value == Direction.Vertical + ? Math.Max(2, visibleCounters.Max(counter => counter.Result.ResultCount.Value).ToString().Length) + : null; + } + + private bool shouldBeVisible(int index, ArgonJudgementCounter counter) + { + if (index == 0 && !ShowMaxJudgement.Value) + return false; + + var hitResult = counter.Result.Types.First(); + if (hitResult.IsBasic()) + return true; + + switch (Mode.Value) + { + case DisplayMode.Simple: + return false; + + case DisplayMode.Normal: + return !hitResult.IsBonus(); + + case DisplayMode.All: + return true; + + default: + throw new ArgumentOutOfRangeException(nameof(Mode), Mode.Value, null); + } + } + + private FillDirection getFillDirection(Direction flow) + { + switch (flow) + { + case Direction.Horizontal: + return FillDirection.Horizontal; + + case Direction.Vertical: + return FillDirection.Vertical; + + default: + throw new ArgumentOutOfRangeException(nameof(flow), flow, null); + } + } + + public enum DisplayMode + { + [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeSimple))] + Simple, + + [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeNormal))] + Normal, + + [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeAll))] + All + } + + public bool UsesFixedAnchor { get; set; } + } +} diff --git a/osu.Game/Skinning/LegacyRankDisplay.cs b/osu.Game/Skinning/LegacyRankDisplay.cs index 7c2f8ffdef..64376f0dbd 100644 --- a/osu.Game/Skinning/LegacyRankDisplay.cs +++ b/osu.Game/Skinning/LegacyRankDisplay.cs @@ -34,10 +34,12 @@ namespace osu.Game.Skinning private SkinnableSound rankDownSample = null!; private SkinnableSound rankUpSample = null!; - private Bindable lastSamplePlaybackTime = null!; + private Bindable lastSamplePlayback = null!; + private double lastChangeTime; - private IBindable rank = null!; - private ScoreRank lastRank; + private ScoreRank? displayedRank; + + private const int time_between_changes = 1500; public LegacyRankDisplay() { @@ -62,51 +64,69 @@ namespace osu.Game.Skinning if (skinEditor != null) PlaySamples.Value = false; - lastSamplePlaybackTime = statics.GetBindable(Static.LastRankChangeSamplePlaybackTime); + lastSamplePlayback = statics.GetBindable(Static.LastRankChangeSamplePlaybackTime); } protected override void LoadComplete() { - rank = scoreProcessor.Rank.GetBoundCopy(); - rank.BindValueChanged(r => + base.LoadComplete(); + + updateRank(scoreProcessor.Rank.Value); + } + + protected override void Update() + { + base.Update(); + + var currentRank = scoreProcessor.Rank.Value; + + if (currentRank == displayedRank) + return; + + if (Time.Current - lastChangeTime >= time_between_changes || scoreProcessor.HasCompleted.Value || currentRank == ScoreRank.F) + updateRank(currentRank); + } + + private void updateRank(ScoreRank rank) + { + var texture = source.GetTexture($"ranking-{rank}-small"); + + rankDisplay.Texture = texture; + + if (texture != null && displayedRank != null) { - var texture = source.GetTexture($"ranking-{r.NewValue}-small"); - - rankDisplay.Texture = texture; - - if (texture != null) + var transientRank = new Sprite { - var transientRank = new Sprite - { - Texture = texture, - Blending = BlendingParameters.Additive, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - BypassAutoSizeAxes = Axes.Both, - }; - AddInternal(transientRank); - transientRank.FadeOutFromOne(500, Easing.Out) - .ScaleTo(new Vector2(1.625f), 500, Easing.Out) - .Expire(); - } + Texture = texture, + Blending = BlendingParameters.Additive, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + BypassAutoSizeAxes = Axes.Both, + }; - bool enoughTimeElapsed = !lastSamplePlaybackTime.Value.HasValue || Time.Current - lastSamplePlaybackTime.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME; + AddInternal(transientRank); - // Don't play rank-down sfx on quit/retry - if (r.NewValue != r.OldValue && r.NewValue > ScoreRank.F && PlaySamples.Value && enoughTimeElapsed) - { - if (r.NewValue > lastRank) - rankUpSample.Play(); - else - rankDownSample.Play(); + transientRank.FadeOutFromOne(500, Easing.Out) + .ScaleTo(new Vector2(1.625f), 500, Easing.Out) + .Expire(); + } - lastSamplePlaybackTime.Value = Time.Current; - } + // Check sample time separately to ensure two copies of the rank display don't both play samples on a change. + bool enoughSampleTimeElapsed = !lastSamplePlayback.Value.HasValue || Time.Current - lastSamplePlayback.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME; - lastRank = r.NewValue; - }, true); + // Also don't play rank-down sfx on quit/retry/initial update. + if (displayedRank != null && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed) + { + if (rank > displayedRank) + rankUpSample.Play(); + else + rankDownSample.Play(); - FinishTransforms(true); + lastSamplePlayback.Value = Time.Current; + } + + displayedRank = rank; + lastChangeTime = Time.Current; } } } diff --git a/osu.Game/Skinning/RetroSkin.cs b/osu.Game/Skinning/RetroSkin.cs new file mode 100644 index 0000000000..abeab9ab17 --- /dev/null +++ b/osu.Game/Skinning/RetroSkin.cs @@ -0,0 +1,58 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using JetBrains.Annotations; +using osu.Framework.Graphics.Textures; +using osu.Framework.IO.Stores; +using osu.Game.Extensions; +using osu.Game.IO; + +namespace osu.Game.Skinning +{ + /// + /// A skin that looks like osu!stable as it was around 2008. + /// + /// + /// "Around 2008" was chosen as the cutoff for this skin because that's when the look of core gameplay settled into its final design (until ). Skin elements from later versions of osu! were preferred as long as they only fixed bugs or applied minor tweaks to 2008 elements. + /// + public class RetroSkin : LegacySkin + { + public static SkinInfo CreateInfo() => new SkinInfo + { + ID = Skinning.SkinInfo.RETRO_SKIN, + Name = "osu! \"retro\" (2008)", + Creator = "team osu!", + Protected = true, + InstantiationInfo = typeof(RetroSkin).GetInvariantInstantiationInfo(), + }; + + public RetroSkin(IStorageResourceProvider resources) + : this(CreateInfo(), resources) + { + } + + [UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)] + public RetroSkin(SkinInfo skin, IStorageResourceProvider resources) + : base( + skin, + resources, + new NamespacedResourceStore(resources.Resources, "Skins/Retro") + ) + { + } + + public override Texture? GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT) + { + // Retro taiko hit explosions use osu textures + if (componentName.StartsWith("taiko-hit", StringComparison.Ordinal)) + componentName = componentName.Substring(6); + + // Retro taiko slider has no fail variant, but it needs to exist to avoid displaying nothing + if (componentName == "taiko-slider-fail") + componentName = "taiko-slider"; + + return base.GetTexture(componentName, wrapModeS, wrapModeT); + } + } +} diff --git a/osu.Game/Skinning/SkinInfo.cs b/osu.Game/Skinning/SkinInfo.cs index dfb26d2dbc..f2dd45c001 100644 --- a/osu.Game/Skinning/SkinInfo.cs +++ b/osu.Game/Skinning/SkinInfo.cs @@ -20,6 +20,7 @@ namespace osu.Game.Skinning internal static readonly Guid ARGON_SKIN = new Guid("CFFA69DE-B3E3-4DEE-8563-3C4F425C05D0"); internal static readonly Guid ARGON_PRO_SKIN = new Guid("9FC9CF5D-0F16-4C71-8256-98868321AC43"); internal static readonly Guid CLASSIC_SKIN = new Guid("81F02CD3-EEC6-4865-AC23-FAE26A386187"); + internal static readonly Guid RETRO_SKIN = new Guid("0555C76A-CC6B-4BB4-9548-DF76BA72EF25"); internal static readonly Guid RANDOM_SKIN = new Guid("D39DFEFB-477C-4372-B1EA-2BCEA5FB8908"); internal static readonly Guid EZ2_SKIN = new Guid("fc372386-381d-4f8e-897a-c1d89ef39f9c"); internal static readonly Guid EZ_STYLE_PRO_SKIN = new Guid("1E70839C-C0D8-4DBF-B747-0C08C89D412B"); diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index db92f84ed6..52b98cde43 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -60,10 +60,14 @@ namespace osu.Game.Skinning private readonly IResourceStore userFiles; + private Skin ezProSkin { get; } + private Skin argonSkin { get; } private Skin trianglesSkin { get; } + private Skin retroSkin { get; } + public override bool PauseImports { get => base.PauseImports; @@ -91,12 +95,13 @@ namespace osu.Game.Skinning var defaultSkins = new[] { + retroSkin = new RetroSkin(this), DefaultClassicSkin = new DefaultLegacySkin(this), trianglesSkin = new TrianglesSkin(this), argonSkin = new ArgonSkin(this), new ArgonProSkin(this), new Ez2Skin(this), - new EzStyleProSkin(this), + ezProSkin = new EzStyleProSkin(this), new SbISkin(this), }; @@ -370,8 +375,15 @@ namespace osu.Game.Skinning if (skinInfo == null) { + if (guid == SkinInfo.EZ_STYLE_PRO_SKIN) + skinInfo = ezProSkin.SkinInfo; + if (guid == SkinInfo.CLASSIC_SKIN) skinInfo = DefaultClassicSkin.SkinInfo; + + if (guid == SkinInfo.RETRO_SKIN) + skinInfo = retroSkin.SkinInfo; + } CurrentSkinInfo.Value = skinInfo ?? trianglesSkin.SkinInfo; diff --git a/osu.Game/Skinning/SkinnableContainer.cs b/osu.Game/Skinning/SkinnableContainer.cs index aad95ca779..720699e708 100644 --- a/osu.Game/Skinning/SkinnableContainer.cs +++ b/osu.Game/Skinning/SkinnableContainer.cs @@ -21,6 +21,11 @@ namespace osu.Game.Skinning /// public partial class SkinnableContainer : SkinReloadableDrawable, ISerialisableDrawableContainer { + /// + /// Invoked when the skinnable components of this container finish loading. + /// + public event Action? OnComponentsLoaded; + private Container? content; /// @@ -67,6 +72,7 @@ namespace osu.Game.Skinning AddInternal(wrapper); components.AddRange(wrapper.Children.OfType()); ComponentsLoaded = true; + OnComponentsLoaded?.Invoke(this); }, (cancellationSource = new CancellationTokenSource()).Token); } @@ -106,5 +112,12 @@ namespace osu.Game.Skinning Reload(); } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + OnComponentsLoaded = null; + } } } diff --git a/osu.Game/Skinning/SkinnableSprite.cs b/osu.Game/Skinning/SkinnableSprite.cs index 883f9e6a6d..e3f059b91c 100644 --- a/osu.Game/Skinning/SkinnableSprite.cs +++ b/osu.Game/Skinning/SkinnableSprite.cs @@ -125,6 +125,7 @@ namespace osu.Game.Skinning || skin.GetType() == typeof(ArgonProSkin) || skin.GetType() == typeof(ArgonSkin) || skin.GetType() == typeof(DefaultLegacySkin) + || skin.GetType() == typeof(RetroSkin) || skin.GetType() == typeof(LegacySkin); } } diff --git a/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs b/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs index 3843460add..1cea38667e 100644 --- a/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs +++ b/osu.Game/Tests/Visual/Multiplayer/TestMultiplayerClient.cs @@ -14,6 +14,7 @@ using osu.Game.Beatmaps; using osu.Game.Online; using osu.Game.Online.API; using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Matchmaking; using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer.Countdown; using osu.Game.Online.Multiplayer.MatchTypes.TeamVersus; @@ -73,6 +74,8 @@ namespace osu.Game.Tests.Visual.Multiplayer private long lastPlaylistItemId; private int lastCountdownId; + private readonly Dictionary matchmakingUserPicks = new Dictionary(); + private readonly TestRoomRequestsHandler apiRequestHandler; public TestMultiplayerClient(TestRoomRequestsHandler? apiRequestHandler = null) @@ -409,22 +412,43 @@ namespace osu.Game.Tests.Visual.Multiplayer break; case StartMatchCountdownRequest startCountdown: - ServerRoom.ActiveCountdowns.Add(new MatchStartCountdown - { - ID = ++lastCountdownId, - TimeRemaining = startCountdown.Duration - }); - - await ((IMultiplayerClient)this).MatchEvent(clone(new CountdownStartedEvent(ServerRoom.ActiveCountdowns[^1]))).ConfigureAwait(false); + await StartCountdown(new MatchStartCountdown { TimeRemaining = startCountdown.Duration }).ConfigureAwait(false); break; case StopCountdownRequest stopCountdown: - ServerRoom.ActiveCountdowns.Remove(ServerRoom.ActiveCountdowns.First(c => c.ID == stopCountdown.ID)); - await ((IMultiplayerClient)this).MatchEvent(clone(new CountdownStoppedEvent(stopCountdown.ID))).ConfigureAwait(false); + await StopCountdown(ServerRoom.ActiveCountdowns.First(c => c.ID == stopCountdown.ID)).ConfigureAwait(false); break; } } + public async Task StartCountdown(MultiplayerCountdown countdown) + { + countdown.ID = ++lastCountdownId; + countdown = clone(countdown); + + Debug.Assert(ServerRoom != null); + Debug.Assert(LocalUser != null); + + if (countdown.IsExclusive) + { + MultiplayerCountdown? existingCountdown = ServerRoom.ActiveCountdowns.FirstOrDefault(c => c.GetType() == countdown.GetType()); + if (existingCountdown != null) + await StopCountdown(existingCountdown).ConfigureAwait(false); + } + + ServerRoom.ActiveCountdowns.Add(countdown); + await ((IMultiplayerClient)this).MatchEvent(clone(new CountdownStartedEvent(ServerRoom.ActiveCountdowns[^1]))).ConfigureAwait(false); + } + + public async Task StopCountdown(MultiplayerCountdown countdown) + { + Debug.Assert(ServerRoom != null); + Debug.Assert(LocalUser != null); + + ServerRoom.ActiveCountdowns.Remove(ServerRoom.ActiveCountdowns.First(c => c.ID == countdown.ID)); + await ((IMultiplayerClient)this).MatchEvent(clone(new CountdownStoppedEvent(countdown.ID))).ConfigureAwait(false); + } + public override Task StartMatch() { Debug.Assert(ServerRoom != null); @@ -508,7 +532,7 @@ namespace osu.Game.Tests.Visual.Multiplayer if (item == null) throw new InvalidOperationException("Item does not exist in the room."); - if (item == currentItem) + if (item.Equals(currentItem)) throw new InvalidOperationException("The room's current item cannot be removed."); if (item.OwnerID != userId) @@ -718,6 +742,78 @@ namespace osu.Game.Tests.Visual.Multiplayer return Task.CompletedTask; } + public async Task ChangeMatchRoomState(MatchRoomState state) + { + Debug.Assert(ServerRoom != null); + + ServerRoom.MatchState = state; + await ((IMultiplayerClient)this).MatchRoomStateChanged(clone(ServerRoom.MatchState)).ConfigureAwait(false); + } + + public override Task GetMatchmakingPools() + { + return Task.FromResult( + [ + new MatchmakingPool { Id = 0, RulesetId = 0 }, + new MatchmakingPool { Id = 1, RulesetId = 1 }, + new MatchmakingPool { Id = 2, RulesetId = 2 }, + new MatchmakingPool { Id = 3, RulesetId = 3, Variant = 4 }, + new MatchmakingPool { Id = 4, RulesetId = 3, Variant = 7 }, + ]); + } + + public override Task MatchmakingJoinLobby() + { + return Task.CompletedTask; + } + + public override Task MatchmakingLeaveLobby() + { + return Task.CompletedTask; + } + + public override async Task MatchmakingJoinQueue(int poolId) + { + await ((IMatchmakingClient)this).MatchmakingQueueJoined().ConfigureAwait(false); + await ((IMatchmakingClient)this).MatchmakingQueueStatusChanged(new MatchmakingQueueStatus.Searching()).ConfigureAwait(false); + } + + public override async Task MatchmakingLeaveQueue() + { + await ((IMatchmakingClient)this).MatchmakingQueueLeft().ConfigureAwait(false); + } + + public override Task MatchmakingAcceptInvitation() + { + return Task.CompletedTask; + } + + public override Task MatchmakingDeclineInvitation() + { + return Task.CompletedTask; + } + + public override Task MatchmakingToggleSelection(long playlistItemId) + => MatchmakingToggleUserSelection(api.LocalUser.Value.OnlineID, playlistItemId); + + public override Task MatchmakingSkipToNextStage() + => Task.CompletedTask; + + public async Task MatchmakingToggleUserSelection(int userId, long playlistItemId) + { + if (matchmakingUserPicks.TryGetValue(userId, out long existingId)) + { + if (existingId == playlistItemId) + return; + + await ((IMatchmakingClient)this).MatchmakingItemDeselected(clone(userId), clone(existingId)).ConfigureAwait(false); + } + + matchmakingUserPicks[userId] = playlistItemId; + + await ((IMatchmakingClient)this).MatchmakingItemSelected(clone(userId), clone(playlistItemId)).ConfigureAwait(false); + } + #region API Room Handling public IReadOnlyList ServerSideRooms diff --git a/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs b/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs index 914d187864..c687815270 100644 --- a/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs +++ b/osu.Game/Tests/Visual/OnlinePlay/OnlinePlayTestScene.cs @@ -95,7 +95,7 @@ namespace osu.Game.Tests.Visual.OnlinePlay /// protected virtual OnlinePlayTestSceneDependencies CreateOnlinePlayDependencies() => new OnlinePlayTestSceneDependencies(); - protected Room[] GenerateRooms(int count, RulesetInfo? ruleset = null, bool withPassword = false, bool withSpotlightRooms = false) + protected Room[] GenerateRooms(int count, RulesetInfo? ruleset = null, bool withPassword = false, bool withPinnedRooms = false) { Room[] rooms = new Room[count]; @@ -110,10 +110,10 @@ namespace osu.Game.Tests.Visual.OnlinePlay Name = $@"Room {currentRoomId}", Host = new APIUser { Username = @"Host" }, Duration = TimeSpan.FromSeconds(10), - Category = withSpotlightRooms && i % 2 == 0 ? RoomCategory.Spotlight : RoomCategory.Normal, Password = withPassword ? @"password" : null, PlaylistItemStats = new Room.RoomPlaylistItemStats { RulesetIDs = [ruleset.OnlineID] }, - Playlist = [new PlaylistItem(new BeatmapInfo { Metadata = new BeatmapMetadata() }) { RulesetID = ruleset.OnlineID }] + Playlist = [new PlaylistItem(new BeatmapInfo { Metadata = new BeatmapMetadata() }) { RulesetID = ruleset.OnlineID }], + Pinned = withPinnedRooms && i % 2 == 0, }; } diff --git a/osu.Game/Tests/Visual/ScreenTestScene.cs b/osu.Game/Tests/Visual/ScreenTestScene.cs index f780b1a8f8..42199faa4d 100644 --- a/osu.Game/Tests/Visual/ScreenTestScene.cs +++ b/osu.Game/Tests/Visual/ScreenTestScene.cs @@ -7,7 +7,9 @@ using osu.Framework.Bindables; using osu.Framework.Development; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; using osu.Framework.Logging; +using osu.Framework.Screens; using osu.Framework.Testing; using osu.Game.Graphics; using osu.Game.Overlays; @@ -32,7 +34,7 @@ namespace osu.Game.Tests.Visual protected DialogOverlay DialogOverlay { get; private set; } [Cached] - private ScreenFooter footer; + protected ScreenFooter Footer { get; private set; } protected ScreenTestScene() { @@ -43,17 +45,32 @@ namespace osu.Game.Tests.Visual Name = nameof(ScreenTestScene), RelativeSizeAxes = Axes.Both }, - content = new Container { RelativeSizeAxes = Axes.Both }, + new PopoverContainer + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + content = new Container { RelativeSizeAxes = Axes.Both }, + Footer = new ScreenFooter(), + } + }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Child = DialogOverlay = new DialogOverlay() }, - footer = new ScreenFooter(), }); - Stack.ScreenPushed += (_, newScreen) => Logger.Log($"{nameof(ScreenTestScene)} screen changed → {newScreen}"); - Stack.ScreenExited += (_, newScreen) => Logger.Log($"{nameof(ScreenTestScene)} screen changed ← {newScreen}"); + Stack.ScreenPushed += (oldScreen, newScreen) => + { + updateFooter(oldScreen, newScreen); + Logger.Log($"{nameof(ScreenTestScene)} screen changed → {newScreen}"); + }; + Stack.ScreenExited += (oldScreen, newScreen) => + { + updateFooter(oldScreen, newScreen); + Logger.Log($"{nameof(ScreenTestScene)} screen changed ← {newScreen}"); + }; } protected void LoadScreen(OsuScreen screen) => Stack.Push(screen); @@ -79,6 +96,39 @@ namespace osu.Game.Tests.Visual }); } + private void updateFooter(IScreen? _, IScreen? newScreen) + { + if (newScreen is OsuScreen osuScreen && osuScreen.ShowFooter) + { + Footer.Show(); + + if (osuScreen.IsLoaded) + updateFooterButtons(); + else + { + // ensure the current buttons are immediately disabled on screen change (so they can't be pressed). + Footer.SetButtons(Array.Empty()); + + osuScreen.OnLoadComplete += _ => updateFooterButtons(); + } + + void updateFooterButtons() + { + var buttons = osuScreen.CreateFooterButtons(); + + osuScreen.LoadComponentsAgainstScreenDependencies(buttons); + + Footer.SetButtons(buttons); + Footer.Show(); + } + } + else + { + Footer.Hide(); + Footer.SetButtons(Array.Empty()); + } + } + #region IOverlayManager IBindable IOverlayManager.OverlayActivationMode { get; } = new Bindable(OverlayActivation.All); diff --git a/osu.Game/Tests/Visual/SkinnableTestScene.cs b/osu.Game/Tests/Visual/SkinnableTestScene.cs index c9acfa0ee5..b0bfeb0719 100644 --- a/osu.Game/Tests/Visual/SkinnableTestScene.cs +++ b/osu.Game/Tests/Visual/SkinnableTestScene.cs @@ -34,7 +34,7 @@ namespace osu.Game.Tests.Visual private Skin legacySkin; private Skin argonSkin; private Skin specialSkin; - private Skin oldSkin; + private Skin retroSkin; [Resolved] private GameHost host { get; set; } @@ -54,7 +54,7 @@ namespace osu.Game.Tests.Visual metricsSkin = new TestLegacySkin(new SkinInfo { Name = "metrics-skin" }, new NamespacedResourceStore(dllStore, "Resources/metrics_skin"), this, true); legacySkin = new DefaultLegacySkin(this); specialSkin = new TestLegacySkin(new SkinInfo { Name = "special-skin" }, new NamespacedResourceStore(dllStore, "Resources/special_skin"), this, true); - oldSkin = new TestLegacySkin(new SkinInfo { Name = "old-skin" }, new NamespacedResourceStore(dllStore, "Resources/old_skin"), this, true); + retroSkin = new RetroSkin(this); } private readonly List createdDrawables = new List(); @@ -70,7 +70,7 @@ namespace osu.Game.Tests.Visual Cell(2).Child = createProvider(metricsSkin, creationFunction, beatmap); Cell(3).Child = createProvider(legacySkin, creationFunction, beatmap); Cell(4).Child = createProvider(specialSkin, creationFunction, beatmap); - Cell(5).Child = createProvider(oldSkin, creationFunction, beatmap); + Cell(5).Child = createProvider(retroSkin, creationFunction, beatmap); } protected IEnumerable CreatedDrawables => createdDrawables; diff --git a/osu.iOS.props b/osu.iOS.props index 3768550c21..4ce5be23bc 100644 --- a/osu.iOS.props +++ b/osu.iOS.props @@ -17,6 +17,6 @@ -all - +
  • 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�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