mirror of
https://github.com/ppy/osu.git
synced 2025-01-21 07:33:12 +08:00
Merge pull request #7836 from peppy/fix-player-loader-focused-overlay-interaction
Fix player loading sequence continuing even when a priority overlay is visible
This commit is contained in:
commit
9c5e3942ad
@ -91,9 +91,44 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
{
|
{
|
||||||
AddStep("load dummy beatmap", () => ResetPlayer(false));
|
AddStep("load dummy beatmap", () => ResetPlayer(false));
|
||||||
AddUntilStep("wait for current", () => loader.IsCurrentScreen());
|
AddUntilStep("wait for current", () => loader.IsCurrentScreen());
|
||||||
AddRepeatStep("move mouse", () => InputManager.MoveMouseTo(loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft + (loader.VisualSettings.ScreenSpaceDrawQuad.BottomRight - loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft) * RNG.NextSingle()), 20);
|
|
||||||
|
AddUntilStep("wait for load ready", () =>
|
||||||
|
{
|
||||||
|
moveMouse();
|
||||||
|
return player.LoadState == LoadState.Ready;
|
||||||
|
});
|
||||||
|
AddRepeatStep("move mouse", moveMouse, 20);
|
||||||
|
|
||||||
AddAssert("loader still active", () => loader.IsCurrentScreen());
|
AddAssert("loader still active", () => loader.IsCurrentScreen());
|
||||||
AddUntilStep("loads after idle", () => !loader.IsCurrentScreen());
|
AddUntilStep("loads after idle", () => !loader.IsCurrentScreen());
|
||||||
|
|
||||||
|
void moveMouse()
|
||||||
|
{
|
||||||
|
InputManager.MoveMouseTo(
|
||||||
|
loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft
|
||||||
|
+ (loader.VisualSettings.ScreenSpaceDrawQuad.BottomRight - loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft)
|
||||||
|
* RNG.NextSingle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestBlockLoadViaFocus()
|
||||||
|
{
|
||||||
|
OsuFocusedOverlayContainer overlay = null;
|
||||||
|
|
||||||
|
AddStep("load dummy beatmap", () => ResetPlayer(false));
|
||||||
|
AddUntilStep("wait for current", () => loader.IsCurrentScreen());
|
||||||
|
|
||||||
|
AddStep("show focused overlay", () => { container.Add(overlay = new ChangelogOverlay { State = { Value = Visibility.Visible } }); });
|
||||||
|
AddUntilStep("overlay visible", () => overlay.IsPresent);
|
||||||
|
|
||||||
|
AddUntilStep("wait for load ready", () => player.LoadState == LoadState.Ready);
|
||||||
|
AddRepeatStep("twiddle thumbs", () => { }, 20);
|
||||||
|
|
||||||
|
AddAssert("loader still active", () => loader.IsCurrentScreen());
|
||||||
|
|
||||||
|
AddStep("hide overlay", () => overlay.Hide());
|
||||||
|
AddUntilStep("loads after idle", () => !loader.IsCurrentScreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -159,13 +194,22 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestMutedNotificationMasterVolume() => addVolumeSteps("master volume", () => audioManager.Volume.Value = 0, null, () => audioManager.Volume.IsDefault);
|
public void TestMutedNotificationMasterVolume()
|
||||||
|
{
|
||||||
|
addVolumeSteps("master volume", () => audioManager.Volume.Value = 0, null, () => audioManager.Volume.IsDefault);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestMutedNotificationTrackVolume() => addVolumeSteps("music volume", () => audioManager.VolumeTrack.Value = 0, null, () => audioManager.VolumeTrack.IsDefault);
|
public void TestMutedNotificationTrackVolume()
|
||||||
|
{
|
||||||
|
addVolumeSteps("music volume", () => audioManager.VolumeTrack.Value = 0, null, () => audioManager.VolumeTrack.IsDefault);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestMutedNotificationMuteButton() => addVolumeSteps("mute button", null, () => container.VolumeOverlay.IsMuted.Value = true, () => !container.VolumeOverlay.IsMuted.Value);
|
public void TestMutedNotificationMuteButton()
|
||||||
|
{
|
||||||
|
addVolumeSteps("mute button", null, () => container.VolumeOverlay.IsMuted.Value = true, () => !container.VolumeOverlay.IsMuted.Value);
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Created for avoiding copy pasting code for the same steps.
|
/// Created for avoiding copy pasting code for the same steps.
|
||||||
@ -179,7 +223,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("reset notification lock", () => sessionStatics.GetBindable<bool>(Static.MutedAudioNotificationShownOnce).Value = false);
|
AddStep("reset notification lock", () => sessionStatics.GetBindable<bool>(Static.MutedAudioNotificationShownOnce).Value = false);
|
||||||
|
|
||||||
AddStep("load player", () => ResetPlayer(false, beforeLoad, afterLoad));
|
AddStep("load player", () => ResetPlayer(false, beforeLoad, afterLoad));
|
||||||
AddUntilStep("wait for player", () => player.IsLoaded);
|
AddUntilStep("wait for player", () => player.LoadState == LoadState.Ready);
|
||||||
|
|
||||||
AddAssert("check for notification", () => container.NotificationOverlay.UnreadCount.Value == 1);
|
AddAssert("check for notification", () => container.NotificationOverlay.UnreadCount.Value == 1);
|
||||||
AddStep("click notification", () =>
|
AddStep("click notification", () =>
|
||||||
@ -193,6 +237,8 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
});
|
});
|
||||||
|
|
||||||
AddAssert("check " + volumeName, assert);
|
AddAssert("check " + volumeName, assert);
|
||||||
|
|
||||||
|
AddUntilStep("wait for player load", () => player.IsLoaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestPlayerLoaderContainer : Container
|
private class TestPlayerLoaderContainer : Container
|
||||||
|
@ -117,6 +117,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
API.Login("Rhythm Champion", "osu!");
|
API.Login("Rhythm Champion", "osu!");
|
||||||
|
|
||||||
|
Dependencies.Get<SessionStatics>().Set(Static.MutedAudioNotificationShownOnce, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,14 @@ namespace osu.Game.Screens.Play
|
|||||||
}
|
}
|
||||||
|
|
||||||
private bool readyForPush =>
|
private bool readyForPush =>
|
||||||
player.LoadState == LoadState.Ready && (IsHovered || idleTracker.IsIdle.Value) && inputManager?.DraggedDrawable == null;
|
// don't push unless the player is completely loaded
|
||||||
|
player.LoadState == LoadState.Ready
|
||||||
|
// don't push if the user is hovering one of the panes, unless they are idle.
|
||||||
|
&& (IsHovered || idleTracker.IsIdle.Value)
|
||||||
|
// don't push if the user is dragging a slider or otherwise.
|
||||||
|
&& inputManager?.DraggedDrawable == null
|
||||||
|
// don't push if a focused overlay is visible, like settings.
|
||||||
|
&& inputManager?.FocusedDrawable == null;
|
||||||
|
|
||||||
private readonly Func<Player> createPlayer;
|
private readonly Func<Player> createPlayer;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user