mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 17:13:06 +08:00
Merge pull request #18142 from bdach/mod-overlay/skin-editor-breakage
Fix skin editor overlay showing behind mod select overlay
This commit is contained in:
commit
834e7b4323
@ -4,6 +4,7 @@
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using osu.Framework.Extensions;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
using osu.Framework.Testing;
|
||||
using osu.Game.Overlays.Settings;
|
||||
@ -18,22 +19,23 @@ using static osu.Game.Tests.Visual.Navigation.TestSceneScreenNavigation;
|
||||
|
||||
namespace osu.Game.Tests.Visual.Navigation
|
||||
{
|
||||
public class TestSceneSkinEditorSceneLibrary : OsuGameTestScene
|
||||
public class TestSceneSkinEditorNavigation : OsuGameTestScene
|
||||
{
|
||||
private SkinEditor skinEditor;
|
||||
private TestPlaySongSelect songSelect;
|
||||
private SkinEditor skinEditor => Game.ChildrenOfType<SkinEditor>().FirstOrDefault();
|
||||
|
||||
public override void SetUpSteps()
|
||||
private void advanceToSongSelect()
|
||||
{
|
||||
base.SetUpSteps();
|
||||
|
||||
Screens.Select.SongSelect songSelect = null;
|
||||
PushAndConfirm(() => songSelect = new TestPlaySongSelect());
|
||||
AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded);
|
||||
|
||||
AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely());
|
||||
|
||||
AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault);
|
||||
}
|
||||
|
||||
private void openSkinEditor()
|
||||
{
|
||||
AddStep("open skin editor", () =>
|
||||
{
|
||||
InputManager.PressKey(Key.ControlLeft);
|
||||
@ -42,13 +44,15 @@ namespace osu.Game.Tests.Visual.Navigation
|
||||
InputManager.ReleaseKey(Key.ControlLeft);
|
||||
InputManager.ReleaseKey(Key.ShiftLeft);
|
||||
});
|
||||
|
||||
AddUntilStep("get skin editor", () => (skinEditor = Game.ChildrenOfType<SkinEditor>().FirstOrDefault()) != null);
|
||||
AddUntilStep("skin editor loaded", () => skinEditor != null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestEditComponentDuringGameplay()
|
||||
{
|
||||
advanceToSongSelect();
|
||||
openSkinEditor();
|
||||
|
||||
switchToGameplayScene();
|
||||
|
||||
BarHitErrorMeter hitErrorMeter = null;
|
||||
@ -85,6 +89,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
||||
[Test]
|
||||
public void TestAutoplayCompatibleModsRetainedOnEnteringGameplay()
|
||||
{
|
||||
advanceToSongSelect();
|
||||
openSkinEditor();
|
||||
AddStep("select DT", () => Game.SelectedMods.Value = new Mod[] { new OsuModDoubleTime() });
|
||||
|
||||
switchToGameplayScene();
|
||||
@ -95,6 +101,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
||||
[Test]
|
||||
public void TestAutoplayIncompatibleModsRemovedOnEnteringGameplay()
|
||||
{
|
||||
advanceToSongSelect();
|
||||
openSkinEditor();
|
||||
AddStep("select no fail and spun out", () => Game.SelectedMods.Value = new Mod[] { new OsuModNoFail(), new OsuModSpunOut() });
|
||||
|
||||
switchToGameplayScene();
|
||||
@ -105,6 +113,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
||||
[Test]
|
||||
public void TestDuplicateAutoplayModRemovedOnEnteringGameplay()
|
||||
{
|
||||
advanceToSongSelect();
|
||||
openSkinEditor();
|
||||
AddStep("select autoplay", () => Game.SelectedMods.Value = new Mod[] { new OsuModAutoplay() });
|
||||
|
||||
switchToGameplayScene();
|
||||
@ -115,6 +125,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
||||
[Test]
|
||||
public void TestCinemaModRemovedOnEnteringGameplay()
|
||||
{
|
||||
advanceToSongSelect();
|
||||
openSkinEditor();
|
||||
AddStep("select cinema", () => Game.SelectedMods.Value = new Mod[] { new OsuModCinema() });
|
||||
|
||||
switchToGameplayScene();
|
||||
@ -122,6 +134,16 @@ namespace osu.Game.Tests.Visual.Navigation
|
||||
AddAssert("no mod selected", () => !((Player)Game.ScreenStack.CurrentScreen).Mods.Value.Any());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestModOverlayClosesOnOpeningSkinEditor()
|
||||
{
|
||||
advanceToSongSelect();
|
||||
AddStep("open mod overlay", () => songSelect.ModSelectOverlay.Show());
|
||||
|
||||
openSkinEditor();
|
||||
AddUntilStep("mod overlay closed", () => songSelect.ModSelectOverlay.State.Value == Visibility.Hidden);
|
||||
}
|
||||
|
||||
private void switchToGameplayScene()
|
||||
{
|
||||
AddStep("Click gameplay scene button", () => skinEditor.ChildrenOfType<SkinEditorSceneLibrary.SceneButton>().First(b => b.Text == "Gameplay").TriggerClick());
|
@ -201,6 +201,10 @@ namespace osu.Game
|
||||
|
||||
externalOverlays.Add(overlayContainer);
|
||||
overlayContent.Add(overlayContainer);
|
||||
|
||||
if (overlayContainer is OsuFocusedOverlayContainer focusedOverlayContainer)
|
||||
focusedOverlays.Add(focusedOverlayContainer);
|
||||
|
||||
return new InvokeOnDisposal(() => unregisterBlockingOverlay(overlayContainer));
|
||||
}
|
||||
|
||||
@ -223,6 +227,10 @@ namespace osu.Game
|
||||
private void unregisterBlockingOverlay(OverlayContainer overlayContainer)
|
||||
{
|
||||
externalOverlays.Remove(overlayContainer);
|
||||
|
||||
if (overlayContainer is OsuFocusedOverlayContainer focusedOverlayContainer)
|
||||
focusedOverlays.Remove(focusedOverlayContainer);
|
||||
|
||||
overlayContainer.Expire();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user