diff --git a/osu.Desktop/osu.Desktop.csproj b/osu.Desktop/osu.Desktop.csproj
index 874f73da6d..66db439c82 100644
--- a/osu.Desktop/osu.Desktop.csproj
+++ b/osu.Desktop/osu.Desktop.csproj
@@ -27,8 +27,8 @@
-
-
+
+
diff --git a/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj b/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj
index feab3ed81c..3f8b3bf086 100644
--- a/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj
+++ b/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj
@@ -2,9 +2,9 @@
-
+
-
+
diff --git a/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj b/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj
index e26d2433f9..fd17285a38 100644
--- a/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj
+++ b/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj
@@ -2,9 +2,9 @@
-
+
-
+
diff --git a/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj b/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj
index 273d29c3de..8c31db9a7d 100644
--- a/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj
+++ b/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj
@@ -2,9 +2,9 @@
-
+
-
+
diff --git a/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj b/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj
index fade054382..72ce6c947b 100644
--- a/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj
+++ b/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj
@@ -2,9 +2,9 @@
-
+
-
+
diff --git a/osu.Game.Tests/Visual/TestCaseBackgroundScreenBeatmap.cs b/osu.Game.Tests/Visual/Background/TestCaseBackgroundScreenBeatmap.cs
similarity index 94%
rename from osu.Game.Tests/Visual/TestCaseBackgroundScreenBeatmap.cs
rename to osu.Game.Tests/Visual/Background/TestCaseBackgroundScreenBeatmap.cs
index de34ff822e..e56156752b 100644
--- a/osu.Game.Tests/Visual/TestCaseBackgroundScreenBeatmap.cs
+++ b/osu.Game.Tests/Visual/Background/TestCaseBackgroundScreenBeatmap.cs
@@ -9,7 +9,6 @@ using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Input.Events;
using osu.Framework.Input.States;
@@ -33,7 +32,7 @@ using osu.Game.Users;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Background
{
[TestFixture]
public class TestCaseBackgroundScreenBeatmap : ManualInputManagerTestCase
@@ -54,8 +53,6 @@ namespace osu.Game.Tests.Visual
private BeatmapManager manager;
private RulesetStore rulesets;
- private ScreenStackCacheContainer screenStackContainer;
-
[BackgroundDependencyLoader]
private void load(GameHost host)
{
@@ -82,8 +79,10 @@ namespace osu.Game.Tests.Visual
[SetUp]
public virtual void SetUp() => Schedule(() =>
{
- Child = screenStackContainer = new ScreenStackCacheContainer { RelativeSizeAxes = Axes.Both };
- screenStackContainer.ScreenStack.Push(songSelect = new DummySongSelect());
+ Child = new OsuScreenStack(songSelect = new DummySongSelect())
+ {
+ RelativeSizeAxes = Axes.Both
+ };
});
///
@@ -184,10 +183,10 @@ namespace osu.Game.Tests.Visual
public void PauseTest()
{
performFullSetup(true);
- AddStep("Pause", () => player.CurrentPausableGameplayContainer.Pause());
+ AddStep("Pause", () => player.Pause());
waitForDim();
AddAssert("Screen is dimmed and blur applied", () => songSelect.IsBackgroundDimmed() && songSelect.IsUserBlurApplied());
- AddStep("Unpause", () => player.CurrentPausableGameplayContainer.Resume());
+ AddStep("Unpause", () => player.Resume());
waitForDim();
AddAssert("Screen is dimmed and blur applied", () => songSelect.IsBackgroundDimmed() && songSelect.IsUserBlurApplied());
}
@@ -349,8 +348,6 @@ namespace osu.Game.Tests.Visual
};
}
- public PausableGameplayContainer CurrentPausableGameplayContainer => PausableGameplayContainer;
-
public UserDimContainer CurrentStoryboardContainer => StoryboardContainer;
// Whether or not the player should be allowed to load.
@@ -375,20 +372,6 @@ namespace osu.Game.Tests.Visual
}
}
- private class ScreenStackCacheContainer : Container
- {
- [Cached]
- private BackgroundScreenStack backgroundScreenStack;
-
- public readonly ScreenStack ScreenStack;
-
- public ScreenStackCacheContainer()
- {
- Add(backgroundScreenStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both });
- Add(ScreenStack = new ScreenStack { RelativeSizeAxes = Axes.Both });
- }
- }
-
private class TestPlayerLoader : PlayerLoader
{
public VisualSettings VisualSettingsPos => VisualSettings;
diff --git a/osu.Game.Tests/Visual/TestCaseIdleTracker.cs b/osu.Game.Tests/Visual/Components/TestCaseIdleTracker.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseIdleTracker.cs
rename to osu.Game.Tests/Visual/Components/TestCaseIdleTracker.cs
index a7a1831ba7..bf59c116bb 100644
--- a/osu.Game.Tests/Visual/TestCaseIdleTracker.cs
+++ b/osu.Game.Tests/Visual/Components/TestCaseIdleTracker.cs
@@ -9,7 +9,7 @@ using osu.Game.Input;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Components
{
[TestFixture]
public class TestCaseIdleTracker : ManualInputManagerTestCase
diff --git a/osu.Game.Tests/Visual/TestCasePollingComponent.cs b/osu.Game.Tests/Visual/Components/TestCasePollingComponent.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCasePollingComponent.cs
rename to osu.Game.Tests/Visual/Components/TestCasePollingComponent.cs
index 63f4f88948..6582145f6e 100644
--- a/osu.Game.Tests/Visual/TestCasePollingComponent.cs
+++ b/osu.Game.Tests/Visual/Components/TestCasePollingComponent.cs
@@ -13,7 +13,7 @@ using osu.Game.Online;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Components
{
public class TestCasePollingComponent : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCasePreviewTrackManager.cs b/osu.Game.Tests/Visual/Components/TestCasePreviewTrackManager.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCasePreviewTrackManager.cs
rename to osu.Game.Tests/Visual/Components/TestCasePreviewTrackManager.cs
index 87a1fb0faf..4b6ae696fe 100644
--- a/osu.Game.Tests/Visual/TestCasePreviewTrackManager.cs
+++ b/osu.Game.Tests/Visual/Components/TestCasePreviewTrackManager.cs
@@ -8,7 +8,7 @@ using osu.Framework.Graphics.Containers;
using osu.Game.Audio;
using osu.Game.Beatmaps;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Components
{
public class TestCasePreviewTrackManager : OsuTestCase, IPreviewTrackOwner
{
diff --git a/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs b/osu.Game.Tests/Visual/Editor/TestCaseBeatDivisorControl.cs
similarity index 95%
rename from osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseBeatDivisorControl.cs
index daf71a6447..e822e01110 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseBeatDivisorControl.cs
@@ -9,7 +9,7 @@ using osu.Game.Screens.Edit;
using osu.Game.Screens.Edit.Compose.Components;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
public class TestCaseBeatDivisorControl : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/Editor/TestCaseEditorCompose.cs
similarity index 95%
rename from osu.Game.Tests/Visual/TestCaseEditorCompose.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseEditorCompose.cs
index a52454d684..aa7c7f5cb3 100644
--- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseEditorCompose.cs
@@ -9,7 +9,7 @@ using osu.Game.Rulesets.Osu;
using osu.Game.Screens.Edit.Compose;
using osu.Game.Tests.Beatmaps;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseEditorCompose : EditorClockTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs b/osu.Game.Tests/Visual/Editor/TestCaseEditorComposeRadioButtons.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseEditorComposeRadioButtons.cs
index 5a4ac77372..499db1b69f 100644
--- a/osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseEditorComposeRadioButtons.cs
@@ -7,7 +7,7 @@ using NUnit.Framework;
using osu.Framework.Graphics;
using osu.Game.Screens.Edit.Components.RadioButtons;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseEditorComposeRadioButtons : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs b/osu.Game.Tests/Visual/Editor/TestCaseEditorComposeTimeline.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseEditorComposeTimeline.cs
index 9ae9b55546..d7712293c3 100644
--- a/osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseEditorComposeTimeline.cs
@@ -6,7 +6,6 @@ using System.Collections.Generic;
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
-using osuTK;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
@@ -14,9 +13,10 @@ using osu.Framework.Graphics.UserInterface;
using osu.Framework.Timing;
using osu.Game.Beatmaps;
using osu.Game.Screens.Edit.Compose.Components.Timeline;
+using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseEditorComposeTimeline : EditorClockTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs b/osu.Game.Tests/Visual/Editor/TestCaseEditorMenuBar.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseEditorMenuBar.cs
index 2abbf7cb80..b012d4b52d 100644
--- a/osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseEditorMenuBar.cs
@@ -10,7 +10,7 @@ using osu.Framework.Graphics.UserInterface;
using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Edit.Components.Menus;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseEditorMenuBar : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/Editor/TestCaseEditorSeekSnapping.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseEditorSeekSnapping.cs
index 0ec87e6f52..9daba54b58 100644
--- a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseEditorSeekSnapping.cs
@@ -14,7 +14,7 @@ using osu.Game.Tests.Beatmaps;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseEditorSeekSnapping : EditorClockTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs b/osu.Game.Tests/Visual/Editor/TestCaseEditorSummaryTimeline.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseEditorSummaryTimeline.cs
index 305924958b..99d6385804 100644
--- a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseEditorSummaryTimeline.cs
@@ -6,12 +6,12 @@ using System.Collections.Generic;
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
-using osuTK;
-using osu.Game.Screens.Edit.Components.Timelines.Summary;
using osu.Game.Rulesets.Osu;
+using osu.Game.Screens.Edit.Components.Timelines.Summary;
using osu.Game.Tests.Beatmaps;
+using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseEditorSummaryTimeline : EditorClockTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseHitObjectComposer.cs b/osu.Game.Tests/Visual/Editor/TestCaseHitObjectComposer.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseHitObjectComposer.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseHitObjectComposer.cs
index 988c0459d4..be335fb71f 100644
--- a/osu.Game.Tests/Visual/TestCaseHitObjectComposer.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseHitObjectComposer.cs
@@ -7,7 +7,6 @@ using JetBrains.Annotations;
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Timing;
-using osuTK;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Objects;
@@ -20,8 +19,9 @@ using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Screens.Edit.Compose;
using osu.Game.Screens.Edit.Compose.Components;
using osu.Game.Tests.Beatmaps;
+using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
[Cached(Type = typeof(IPlacementHandler))]
diff --git a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs b/osu.Game.Tests/Visual/Editor/TestCasePlaybackControl.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCasePlaybackControl.cs
rename to osu.Game.Tests/Visual/Editor/TestCasePlaybackControl.cs
index abcff24c67..7d9b43251e 100644
--- a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCasePlaybackControl.cs
@@ -10,7 +10,7 @@ using osu.Game.Screens.Edit.Components;
using osu.Game.Tests.Beatmaps;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCasePlaybackControl : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseWaveContainer.cs b/osu.Game.Tests/Visual/Editor/TestCaseWaveContainer.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseWaveContainer.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseWaveContainer.cs
index 07a282a1a7..e87304ded6 100644
--- a/osu.Game.Tests/Visual/TestCaseWaveContainer.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseWaveContainer.cs
@@ -12,7 +12,7 @@ using osu.Game.Graphics.Sprites;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseWaveContainer : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseWaveform.cs b/osu.Game.Tests/Visual/Editor/TestCaseWaveform.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseWaveform.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseWaveform.cs
index 9330070392..c35e8741c1 100644
--- a/osu.Game.Tests/Visual/TestCaseWaveform.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseWaveform.cs
@@ -2,16 +2,16 @@
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
-using osuTK;
-using osuTK.Graphics;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Audio;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Game.Graphics.Sprites;
+using osuTK;
+using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
[TestFixture]
public class TestCaseWaveform : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseZoomableScrollContainer.cs b/osu.Game.Tests/Visual/Editor/TestCaseZoomableScrollContainer.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseZoomableScrollContainer.cs
rename to osu.Game.Tests/Visual/Editor/TestCaseZoomableScrollContainer.cs
index c3e8e4e05f..e2cf1ef28a 100644
--- a/osu.Game.Tests/Visual/TestCaseZoomableScrollContainer.cs
+++ b/osu.Game.Tests/Visual/Editor/TestCaseZoomableScrollContainer.cs
@@ -14,7 +14,7 @@ using osu.Game.Screens.Edit.Compose.Components.Timeline;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Editor
{
public class TestCaseZoomableScrollContainer : ManualInputManagerTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseAutoplay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseAutoplay.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseAutoplay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseAutoplay.cs
index 4d6a0ae7b8..2b0254f232 100644
--- a/osu.Game.Tests/Visual/TestCaseAutoplay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseAutoplay.cs
@@ -7,7 +7,7 @@ using osu.Game.Rulesets;
using osu.Game.Rulesets.Scoring;
using osu.Game.Screens.Play;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[Description("Player instantiated with an autoplay mod.")]
public class TestCaseAutoplay : AllPlayersTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseBreakOverlay.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseBreakOverlay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseBreakOverlay.cs
index f45d3c98ca..dda8005f70 100644
--- a/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseBreakOverlay.cs
@@ -1,12 +1,12 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using osu.Game.Beatmaps.Timing;
using System.Collections.Generic;
using NUnit.Framework;
+using osu.Game.Beatmaps.Timing;
using osu.Game.Screens.Play;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseBreakOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseGameplayMenuOverlay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseGameplayMenuOverlay.cs
similarity index 88%
rename from osu.Game.Tests/Visual/TestCaseGameplayMenuOverlay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseGameplayMenuOverlay.cs
index 93a059d214..8e43bf6d3a 100644
--- a/osu.Game.Tests/Visual/TestCaseGameplayMenuOverlay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseGameplayMenuOverlay.cs
@@ -5,38 +5,48 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
-using osuTK.Input;
using osu.Framework.Allocation;
+using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Logging;
+using osu.Game.Input.Bindings;
using osu.Game.Screens.Play;
using osuTK;
+using osuTK.Input;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[Description("player pause/fail screens")]
public class TestCaseGameplayMenuOverlay : ManualInputManagerTestCase
{
- public override IReadOnlyList RequiredTypes => new[] { typeof(FailOverlay), typeof(PausableGameplayContainer) };
+ public override IReadOnlyList RequiredTypes => new[] { typeof(FailOverlay), typeof(PauseOverlay) };
private FailOverlay failOverlay;
- private PausableGameplayContainer.PauseOverlay pauseOverlay;
+ private PauseOverlay pauseOverlay;
+
+ private GlobalActionContainer globalActionContainer;
[BackgroundDependencyLoader]
- private void load()
+ private void load(OsuGameBase game)
{
- Add(pauseOverlay = new PausableGameplayContainer.PauseOverlay
+ Child = globalActionContainer = new GlobalActionContainer(game)
{
- OnResume = () => Logger.Log(@"Resume"),
- OnRetry = () => Logger.Log(@"Retry"),
- OnQuit = () => Logger.Log(@"Quit"),
- });
+ Children = new Drawable[]
+ {
+ pauseOverlay = new PauseOverlay
+ {
+ OnResume = () => Logger.Log(@"Resume"),
+ OnRetry = () => Logger.Log(@"Retry"),
+ OnQuit = () => Logger.Log(@"Quit"),
+ },
+ failOverlay = new FailOverlay
- Add(failOverlay = new FailOverlay
- {
- OnRetry = () => Logger.Log(@"Retry"),
- OnQuit = () => Logger.Log(@"Quit"),
- });
+ {
+ OnRetry = () => Logger.Log(@"Retry"),
+ OnQuit = () => Logger.Log(@"Quit"),
+ }
+ }
+ };
var retryCount = 0;
@@ -79,12 +89,6 @@ namespace osu.Game.Tests.Visual
AddAssert("Overlay state is reset", () => !failOverlay.Buttons.Any(b => b.Selected.Value));
}
- private void press(Key key)
- {
- InputManager.PressKey(key);
- InputManager.ReleaseKey(key);
- }
-
///
/// Tests that pressing enter after an overlay shows doesn't trigger an event because a selection hasn't occurred.
///
@@ -92,7 +96,7 @@ namespace osu.Game.Tests.Visual
{
AddStep("Show overlay", () => pauseOverlay.Show());
- AddStep("Press enter", () => press(Key.Enter));
+ AddStep("Press select", () => press(GlobalAction.Select));
AddAssert("Overlay still open", () => pauseOverlay.State == Visibility.Visible);
AddStep("Hide overlay", () => pauseOverlay.Hide());
@@ -270,5 +274,17 @@ namespace osu.Game.Tests.Visual
});
AddAssert("Overlay is closed", () => pauseOverlay.State == Visibility.Hidden);
}
+
+ private void press(Key key)
+ {
+ InputManager.PressKey(key);
+ InputManager.ReleaseKey(key);
+ }
+
+ private void press(GlobalAction action)
+ {
+ globalActionContainer.TriggerPressed(action);
+ globalActionContainer.TriggerReleased(action);
+ }
}
}
diff --git a/osu.Game.Tests/Visual/TestCaseHoldForMenuButton.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseHoldForMenuButton.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseHoldForMenuButton.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseHoldForMenuButton.cs
index a4fadbd3db..14e9c7cdb6 100644
--- a/osu.Game.Tests/Visual/TestCaseHoldForMenuButton.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseHoldForMenuButton.cs
@@ -10,7 +10,7 @@ using osu.Game.Screens.Play.HUD;
using osuTK;
using osuTK.Input;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[Description("'Hold to Quit' UI element")]
public class TestCaseHoldForMenuButton : ManualInputManagerTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseKeyCounter.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseKeyCounter.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseKeyCounter.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseKeyCounter.cs
index 52caffc29f..f616ffe4ed 100644
--- a/osu.Game.Tests/Visual/TestCaseKeyCounter.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseKeyCounter.cs
@@ -11,7 +11,7 @@ using osu.Framework.Timing;
using osu.Game.Screens.Play;
using osuTK.Input;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseKeyCounter : ManualInputManagerTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseMedalOverlay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseMedalOverlay.cs
similarity index 95%
rename from osu.Game.Tests/Visual/TestCaseMedalOverlay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseMedalOverlay.cs
index c7c85fc412..dd686c36e6 100644
--- a/osu.Game.Tests/Visual/TestCaseMedalOverlay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseMedalOverlay.cs
@@ -8,7 +8,7 @@ using osu.Game.Overlays;
using osu.Game.Overlays.MedalSplash;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseMedalOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/Gameplay/TestCasePause.cs b/osu.Game.Tests/Visual/Gameplay/TestCasePause.cs
new file mode 100644
index 0000000000..1ed61c9fe1
--- /dev/null
+++ b/osu.Game.Tests/Visual/Gameplay/TestCasePause.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 NUnit.Framework;
+using osu.Framework.Graphics.Containers;
+using osu.Framework.Screens;
+using osu.Game.Rulesets;
+using osu.Game.Rulesets.Osu;
+using osu.Game.Rulesets.Scoring;
+using osu.Game.Screens.Play;
+
+namespace osu.Game.Tests.Visual.Gameplay
+{
+ public class TestCasePause : PlayerTestCase
+ {
+ protected new PausePlayer Player => (PausePlayer)base.Player;
+
+ public TestCasePause()
+ : base(new OsuRuleset())
+ {
+ }
+
+ [Test]
+ public void TestPauseResume()
+ {
+ pauseAndConfirm();
+ resumeAndConfirm();
+ }
+
+ [Test]
+ public void TestPauseTooSoon()
+ {
+ pauseAndConfirm();
+ resumeAndConfirm();
+
+ pause();
+
+ confirmClockRunning(true);
+ confirmPauseOverlayShown(false);
+ }
+
+ [Test]
+ public void TestExitTooSoon()
+ {
+ pauseAndConfirm();
+
+ resume();
+
+ AddStep("exit too soon", () => Player.Exit());
+
+ confirmClockRunning(true);
+ confirmPauseOverlayShown(false);
+
+ AddAssert("not exited", () => Player.IsCurrentScreen());
+ }
+
+ [Test]
+ public void TestPauseAfterFail()
+ {
+ AddUntilStep("wait for fail", () => Player.HasFailed);
+ AddAssert("fail overlay shown", () => Player.FailOverlayVisible);
+
+ confirmClockRunning(false);
+
+ pause();
+
+ confirmClockRunning(false);
+ confirmPauseOverlayShown(false);
+
+ AddAssert("fail overlay still shown", () => Player.FailOverlayVisible);
+
+ exitAndConfirm();
+ }
+
+ [Test]
+ public void TestExitFromGameplay()
+ {
+ AddStep("exit", () => Player.Exit());
+
+ confirmPaused();
+
+ exitAndConfirm();
+ }
+
+ [Test]
+ public void TestExitFromPause()
+ {
+ pauseAndConfirm();
+ exitAndConfirm();
+ }
+
+ private void pauseAndConfirm()
+ {
+ pause();
+ confirmPaused();
+ }
+
+ private void resumeAndConfirm()
+ {
+ resume();
+ confirmResumed();
+ }
+
+ private void exitAndConfirm()
+ {
+ AddUntilStep("player not exited", () => Player.IsCurrentScreen());
+ AddStep("exit", () => Player.Exit());
+ confirmExited();
+ }
+
+ private void confirmPaused()
+ {
+ confirmClockRunning(false);
+ AddAssert("pause overlay shown", () => Player.PauseOverlayVisible);
+ }
+
+ private void confirmResumed()
+ {
+ confirmClockRunning(true);
+ confirmPauseOverlayShown(false);
+ }
+
+ private void confirmExited()
+ {
+ AddUntilStep("player exited", () => !Player.IsCurrentScreen());
+ }
+
+ private void pause() => AddStep("pause", () => Player.Pause());
+ private void resume() => AddStep("resume", () => Player.Resume());
+
+ private void confirmPauseOverlayShown(bool isShown) =>
+ AddAssert("pause overlay " + (isShown ? "shown" : "hidden"), () => Player.PauseOverlayVisible == isShown);
+
+ private void confirmClockRunning(bool isRunning) =>
+ AddAssert("clock " + (isRunning ? "running" : "stopped"), () => Player.GameplayClockContainer.GameplayClock.IsRunning == isRunning);
+
+ protected override bool AllowFail => true;
+
+ protected override Player CreatePlayer(Ruleset ruleset) => new PausePlayer();
+
+ protected class PausePlayer : Player
+ {
+ public new GameplayClockContainer GameplayClockContainer => base.GameplayClockContainer;
+
+ public new ScoreProcessor ScoreProcessor => base.ScoreProcessor;
+
+ public bool FailOverlayVisible => FailOverlay.State == Visibility.Visible;
+
+ public bool PauseOverlayVisible => PauseOverlay.State == Visibility.Visible;
+ }
+ }
+}
diff --git a/osu.Game.Tests/Visual/TestCasePlayerLoader.cs b/osu.Game.Tests/Visual/Gameplay/TestCasePlayerLoader.cs
similarity index 83%
rename from osu.Game.Tests/Visual/TestCasePlayerLoader.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCasePlayerLoader.cs
index ad0965b4d6..67dba71d45 100644
--- a/osu.Game.Tests/Visual/TestCasePlayerLoader.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCasePlayerLoader.cs
@@ -11,24 +11,17 @@ using osu.Game.Screens.Menu;
using osu.Game.Screens.Play;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
public class TestCasePlayerLoader : ManualInputManagerTestCase
{
private PlayerLoader loader;
- private readonly ScreenStack stack;
- [Cached]
- private OsuLogo logo;
-
- [Cached]
- private BackgroundScreenStack backgroundStack;
+ private readonly OsuScreenStack stack;
public TestCasePlayerLoader()
{
- InputManager.Add(backgroundStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both });
- InputManager.Add(stack = new ScreenStack { RelativeSizeAxes = Axes.Both });
- InputManager.Add(logo = new OsuLogo());
+ InputManager.Add(stack = new OsuScreenStack { RelativeSizeAxes = Axes.Both });
}
[BackgroundDependencyLoader]
diff --git a/osu.Game.Tests/Visual/TestCasePlayerReferenceLeaking.cs b/osu.Game.Tests/Visual/Gameplay/TestCasePlayerReferenceLeaking.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCasePlayerReferenceLeaking.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCasePlayerReferenceLeaking.cs
index 3e009ae080..5937d489f2 100644
--- a/osu.Game.Tests/Visual/TestCasePlayerReferenceLeaking.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCasePlayerReferenceLeaking.cs
@@ -8,7 +8,7 @@ using osu.Game.Beatmaps;
using osu.Game.Rulesets;
using osu.Game.Screens.Play;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
public class TestCasePlayerReferenceLeaking : AllPlayersTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseReplay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseReplay.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseReplay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseReplay.cs
index 3a7e2352f8..b98ce96fbb 100644
--- a/osu.Game.Tests/Visual/TestCaseReplay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseReplay.cs
@@ -8,7 +8,7 @@ using osu.Game.Rulesets.Scoring;
using osu.Game.Scoring;
using osu.Game.Screens.Play;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[Description("Player instantiated with a replay.")]
public class TestCaseReplay : AllPlayersTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseReplaySettingsOverlay.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseReplaySettingsOverlay.cs
index af71efb9e7..2fdfda0d80 100644
--- a/osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseReplaySettingsOverlay.cs
@@ -7,7 +7,7 @@ using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Play.HUD;
using osu.Game.Screens.Play.PlayerSettings;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseReplaySettingsOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseResults.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseResults.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseResults.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseResults.cs
index c2880c1ea2..d9da45f39a 100644
--- a/osu.Game.Tests/Visual/TestCaseResults.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseResults.cs
@@ -13,7 +13,7 @@ using osu.Game.Screens.Ranking;
using osu.Game.Screens.Ranking.Pages;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseResults : ScreenTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseScoreCounter.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseScoreCounter.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseScoreCounter.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseScoreCounter.cs
index 3519ea67a6..3dd5c99e45 100644
--- a/osu.Game.Tests/Visual/TestCaseScoreCounter.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseScoreCounter.cs
@@ -9,7 +9,7 @@ using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Play.HUD;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseScoreCounter : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseScrollingHitObjects.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseScrollingHitObjects.cs
index 5ebb9b270f..a1cec1e18f 100644
--- a/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseScrollingHitObjects.cs
@@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using NUnit.Framework;
using osu.Framework.Extensions.IEnumerableExtensions;
-using osuTK;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
@@ -15,8 +14,9 @@ using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Timing;
using osu.Game.Rulesets.UI;
using osu.Game.Rulesets.UI.Scrolling;
+using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseScrollingHitObjects : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseSkinReloadable.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseSkinReloadable.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseSkinReloadable.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseSkinReloadable.cs
index 94f01e9d32..a9fbf35d37 100644
--- a/osu.Game.Tests/Visual/TestCaseSkinReloadable.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseSkinReloadable.cs
@@ -13,7 +13,7 @@ using osu.Game.Graphics;
using osu.Game.Skinning;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
public class TestCaseSkinReloadable : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseSkipOverlay.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseSkipOverlay.cs
similarity index 91%
rename from osu.Game.Tests/Visual/TestCaseSkipOverlay.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseSkipOverlay.cs
index b51ba9c563..b46d79ac04 100644
--- a/osu.Game.Tests/Visual/TestCaseSkipOverlay.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseSkipOverlay.cs
@@ -4,7 +4,7 @@
using NUnit.Framework;
using osu.Game.Screens.Play;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseSkipOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseSongProgress.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseSongProgress.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseSongProgress.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseSongProgress.cs
index 511272a5ae..e17dcef19c 100644
--- a/osu.Game.Tests/Visual/TestCaseSongProgress.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseSongProgress.cs
@@ -10,7 +10,7 @@ using osu.Framework.Timing;
using osu.Game.Rulesets.Objects;
using osu.Game.Screens.Play;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseSongProgress : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseStoryboard.cs b/osu.Game.Tests/Visual/Gameplay/TestCaseStoryboard.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseStoryboard.cs
rename to osu.Game.Tests/Visual/Gameplay/TestCaseStoryboard.cs
index c4b41e40f4..651683a671 100644
--- a/osu.Game.Tests/Visual/TestCaseStoryboard.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestCaseStoryboard.cs
@@ -13,7 +13,7 @@ using osu.Game.Overlays;
using osu.Game.Storyboards.Drawables;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Gameplay
{
[TestFixture]
public class TestCaseStoryboard : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseDisclaimer.cs b/osu.Game.Tests/Visual/Menus/TestCaseDisclaimer.cs
similarity index 93%
rename from osu.Game.Tests/Visual/TestCaseDisclaimer.cs
rename to osu.Game.Tests/Visual/Menus/TestCaseDisclaimer.cs
index f08a2a54ca..68a1ceec16 100644
--- a/osu.Game.Tests/Visual/TestCaseDisclaimer.cs
+++ b/osu.Game.Tests/Visual/Menus/TestCaseDisclaimer.cs
@@ -6,7 +6,7 @@ using osu.Game.Online.API;
using osu.Game.Screens.Menu;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Menus
{
public class TestCaseDisclaimer : ScreenTestCase
{
@@ -16,6 +16,8 @@ namespace osu.Game.Tests.Visual
[BackgroundDependencyLoader]
private void load()
{
+ Add(api);
+
AddStep("load disclaimer", () => LoadScreen(new Disclaimer()));
AddStep("toggle support", () =>
diff --git a/osu.Game.Tests/Visual/TestCaseIntroSequence.cs b/osu.Game.Tests/Visual/Menus/TestCaseIntroSequence.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseIntroSequence.cs
rename to osu.Game.Tests/Visual/Menus/TestCaseIntroSequence.cs
index 0e57a76167..0b924e56f5 100644
--- a/osu.Game.Tests/Visual/TestCaseIntroSequence.cs
+++ b/osu.Game.Tests/Visual/Menus/TestCaseIntroSequence.cs
@@ -4,14 +4,14 @@
using System;
using System.Collections.Generic;
using NUnit.Framework;
-using osuTK.Graphics;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Timing;
using osu.Game.Screens.Menu;
+using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Menus
{
[TestFixture]
public class TestCaseIntroSequence : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseLoaderAnimation.cs b/osu.Game.Tests/Visual/Menus/TestCaseLoaderAnimation.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseLoaderAnimation.cs
rename to osu.Game.Tests/Visual/Menus/TestCaseLoaderAnimation.cs
index 3803764194..899f9d431b 100644
--- a/osu.Game.Tests/Visual/TestCaseLoaderAnimation.cs
+++ b/osu.Game.Tests/Visual/Menus/TestCaseLoaderAnimation.cs
@@ -9,7 +9,7 @@ using osu.Game.Screens;
using osu.Game.Screens.Menu;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Menus
{
[TestFixture]
public class TestCaseLoaderAnimation : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseToolbar.cs b/osu.Game.Tests/Visual/Menus/TestCaseToolbar.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseToolbar.cs
rename to osu.Game.Tests/Visual/Menus/TestCaseToolbar.cs
index cb5f33911b..4da17f9944 100644
--- a/osu.Game.Tests/Visual/TestCaseToolbar.cs
+++ b/osu.Game.Tests/Visual/Menus/TestCaseToolbar.cs
@@ -8,7 +8,7 @@ using NUnit.Framework;
using osu.Framework.Graphics.Containers;
using osu.Game.Overlays.Toolbar;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Menus
{
[TestFixture]
public class TestCaseToolbar : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseLoungeRoomsContainer.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseLoungeRoomsContainer.cs
index 13bc5e24d9..34de61cb5b 100644
--- a/osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseLoungeRoomsContainer.cs
@@ -14,7 +14,7 @@ using osu.Game.Screens.Multi.Lounge.Components;
using osu.Game.Users;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseLoungeRoomsContainer : MultiplayerTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMatchHeader.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchHeader.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseMatchHeader.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchHeader.cs
index 296e5f24ac..81cb90c7cd 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchHeader.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchHeader.cs
@@ -10,7 +10,7 @@ using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Screens.Multi.Match.Components;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseMatchHeader : MultiplayerTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMatchHostInfo.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchHostInfo.cs
similarity index 95%
rename from osu.Game.Tests/Visual/TestCaseMatchHostInfo.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchHostInfo.cs
index 45092c5b93..d2dc417100 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchHostInfo.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchHostInfo.cs
@@ -8,7 +8,7 @@ using osu.Framework.Graphics;
using osu.Game.Screens.Multi.Match.Components;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseMatchHostInfo : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMatchInfo.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchInfo.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseMatchInfo.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchInfo.cs
index 901c4f1644..6b04b71da4 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchInfo.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchInfo.cs
@@ -11,7 +11,7 @@ using osu.Game.Online.Multiplayer.RoomStatuses;
using osu.Game.Rulesets;
using osu.Game.Screens.Multi.Match.Components;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
[TestFixture]
public class TestCaseMatchInfo : MultiplayerTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseMatchLeaderboard.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchLeaderboard.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseMatchLeaderboard.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchLeaderboard.cs
index 484a212a38..8ec323dbc3 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchLeaderboard.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchLeaderboard.cs
@@ -10,7 +10,7 @@ using osu.Game.Screens.Multi.Match.Components;
using osu.Game.Users;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseMatchLeaderboard : MultiplayerTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMatchParticipants.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchParticipants.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseMatchParticipants.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchParticipants.cs
index 716523c23c..5382726516 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchParticipants.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchParticipants.cs
@@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Game.Screens.Multi.Match.Components;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
[TestFixture]
public class TestCaseMatchParticipants : MultiplayerTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseMatchResults.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchResults.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseMatchResults.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchResults.cs
index 582c035e82..69606c9ba7 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchResults.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchResults.cs
@@ -16,7 +16,7 @@ using osu.Game.Screens.Multi.Ranking.Types;
using osu.Game.Screens.Ranking;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseMatchResults : MultiplayerTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchSettingsOverlay.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMatchSettingsOverlay.cs
index 11c7d3ef70..51854800e3 100644
--- a/osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMatchSettingsOverlay.cs
@@ -15,7 +15,7 @@ using osu.Game.Online.Multiplayer;
using osu.Game.Screens.Multi;
using osu.Game.Screens.Multi.Match.Components;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseMatchSettingsOverlay : MultiplayerTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMultiHeader.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMultiHeader.cs
similarity index 86%
rename from osu.Game.Tests/Visual/TestCaseMultiHeader.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMultiHeader.cs
index f7802e2d08..b49bb7fd84 100644
--- a/osu.Game.Tests/Visual/TestCaseMultiHeader.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMultiHeader.cs
@@ -7,7 +7,7 @@ using osu.Framework.Screens;
using osu.Game.Screens;
using osu.Game.Screens.Multi;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
[TestFixture]
public class TestCaseMultiHeader : OsuTestCase
@@ -16,7 +16,7 @@ namespace osu.Game.Tests.Visual
{
int index = 0;
- ScreenStack screenStack = new ScreenStack(new TestMultiplayerSubScreen(index)) { RelativeSizeAxes = Axes.Both };
+ OsuScreenStack screenStack = new OsuScreenStack(new TestMultiplayerSubScreen(index)) { RelativeSizeAxes = Axes.Both };
Children = new Drawable[]
{
diff --git a/osu.Game.Tests/Visual/TestCaseMultiScreen.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseMultiScreen.cs
similarity index 79%
rename from osu.Game.Tests/Visual/TestCaseMultiScreen.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseMultiScreen.cs
index 804e3c5b1f..ef381efd67 100644
--- a/osu.Game.Tests/Visual/TestCaseMultiScreen.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseMultiScreen.cs
@@ -4,25 +4,24 @@
using System;
using System.Collections.Generic;
using NUnit.Framework;
-using osu.Game.Screens.Multi;
using osu.Game.Screens.Multi.Lounge;
using osu.Game.Screens.Multi.Lounge.Components;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
[TestFixture]
public class TestCaseMultiScreen : ScreenTestCase
{
public override IReadOnlyList RequiredTypes => new[]
{
- typeof(Multiplayer),
+ typeof(Screens.Multi.Multiplayer),
typeof(LoungeSubScreen),
typeof(FilterControl)
};
public TestCaseMultiScreen()
{
- Multiplayer multi = new Multiplayer();
+ Screens.Multi.Multiplayer multi = new Screens.Multi.Multiplayer();
AddStep(@"show", () => LoadScreen(multi));
}
diff --git a/osu.Game.Tests/Visual/TestCaseRoomStatus.cs b/osu.Game.Tests/Visual/Multiplayer/TestCaseRoomStatus.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseRoomStatus.cs
rename to osu.Game.Tests/Visual/Multiplayer/TestCaseRoomStatus.cs
index 7d175c3c49..a7c7d41ed4 100644
--- a/osu.Game.Tests/Visual/TestCaseRoomStatus.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestCaseRoomStatus.cs
@@ -9,7 +9,7 @@ using osu.Game.Online.Multiplayer;
using osu.Game.Online.Multiplayer.RoomStatuses;
using osu.Game.Screens.Multi.Lounge.Components;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Multiplayer
{
public class TestCaseRoomStatus : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/Online/TestCaseAccountCreationOverlay.cs b/osu.Game.Tests/Visual/Online/TestCaseAccountCreationOverlay.cs
new file mode 100644
index 0000000000..5cdb90b61f
--- /dev/null
+++ b/osu.Game.Tests/Visual/Online/TestCaseAccountCreationOverlay.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 System.Collections.Generic;
+using osu.Framework.Allocation;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
+using osu.Game.Online.API;
+using osu.Game.Overlays;
+using osu.Game.Overlays.AccountCreation;
+using osu.Game.Users;
+
+namespace osu.Game.Tests.Visual.Online
+{
+ public class TestCaseAccountCreationOverlay : OsuTestCase
+ {
+ public override IReadOnlyList RequiredTypes => new[]
+ {
+ typeof(ErrorTextFlowContainer),
+ typeof(AccountCreationBackground),
+ typeof(ScreenEntry),
+ typeof(ScreenWarning),
+ typeof(ScreenWelcome),
+ typeof(AccountCreationScreen),
+ };
+
+ [Cached(typeof(IAPIProvider))]
+ private DummyAPIAccess api = new DummyAPIAccess();
+
+ public TestCaseAccountCreationOverlay()
+ {
+ Container userPanelArea;
+ AccountCreationOverlay accountCreation;
+
+ Children = new Drawable[]
+ {
+ api,
+ accountCreation = new AccountCreationOverlay(),
+ userPanelArea = new Container
+ {
+ Padding = new MarginPadding(10),
+ AutoSizeAxes = Axes.Both,
+ Anchor = Anchor.TopRight,
+ Origin = Anchor.TopRight,
+ },
+ };
+
+ api.Logout();
+ api.LocalUser.BindValueChanged(user => { userPanelArea.Child = new UserPanel(user.NewValue) { Width = 200 }; }, true);
+
+ AddStep("show", () => accountCreation.State = Visibility.Visible);
+ AddStep("logout", () => api.Logout());
+ }
+ }
+}
diff --git a/osu.Game.Tests/Visual/TestCaseBadgeContainer.cs b/osu.Game.Tests/Visual/Online/TestCaseBadgeContainer.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseBadgeContainer.cs
rename to osu.Game.Tests/Visual/Online/TestCaseBadgeContainer.cs
index 892c87653d..631cb190d2 100644
--- a/osu.Game.Tests/Visual/TestCaseBadgeContainer.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseBadgeContainer.cs
@@ -9,7 +9,7 @@ using osu.Framework.Graphics;
using osu.Game.Overlays.Profile.Header;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseBadgeContainer : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/Online/TestCaseBeatmapSetOverlay.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs
rename to osu.Game.Tests/Visual/Online/TestCaseBeatmapSetOverlay.cs
index b98014b866..e2985623fc 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseBeatmapSetOverlay.cs
@@ -14,7 +14,7 @@ using osu.Game.Overlays.BeatmapSet.Scores;
using osu.Game.Rulesets;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseBeatmapSetOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseChannelTabControl.cs b/osu.Game.Tests/Visual/Online/TestCaseChannelTabControl.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseChannelTabControl.cs
rename to osu.Game.Tests/Visual/Online/TestCaseChannelTabControl.cs
index e90b5f5372..fdc3d5394f 100644
--- a/osu.Game.Tests/Visual/TestCaseChannelTabControl.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseChannelTabControl.cs
@@ -15,7 +15,7 @@ using osu.Game.Overlays.Chat.Tabs;
using osu.Game.Users;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
public class TestCaseChannelTabControl : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseChatDisplay.cs b/osu.Game.Tests/Visual/Online/TestCaseChatDisplay.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseChatDisplay.cs
rename to osu.Game.Tests/Visual/Online/TestCaseChatDisplay.cs
index 57e4850f84..6e20165c1b 100644
--- a/osu.Game.Tests/Visual/TestCaseChatDisplay.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseChatDisplay.cs
@@ -12,7 +12,7 @@ using osu.Game.Overlays;
using osu.Game.Overlays.Chat;
using osu.Game.Overlays.Chat.Tabs;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[Description("Testing chat api and overlay")]
public class TestCaseChatDisplay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseChatLink.cs b/osu.Game.Tests/Visual/Online/TestCaseChatLink.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseChatLink.cs
rename to osu.Game.Tests/Visual/Online/TestCaseChatLink.cs
index ecab64ccf3..8843f136a1 100644
--- a/osu.Game.Tests/Visual/TestCaseChatLink.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseChatLink.cs
@@ -1,24 +1,24 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using osuTK.Graphics;
-using osu.Framework.Allocation;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Game.Graphics;
-using osu.Game.Online.Chat;
-using osu.Game.Overlays.Chat;
-using osu.Game.Users;
using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
+using osu.Framework.Allocation;
using osu.Framework.Bindables;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
+using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
+using osu.Game.Online.Chat;
using osu.Game.Overlays;
+using osu.Game.Overlays.Chat;
+using osu.Game.Users;
+using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseChatLink : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseDirect.cs b/osu.Game.Tests/Visual/Online/TestCaseDirect.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseDirect.cs
rename to osu.Game.Tests/Visual/Online/TestCaseDirect.cs
index 24ac38c128..ff57104d8a 100644
--- a/osu.Game.Tests/Visual/TestCaseDirect.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseDirect.cs
@@ -8,7 +8,7 @@ using osu.Game.Beatmaps;
using osu.Game.Overlays;
using osu.Game.Rulesets;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseDirect : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseDirectPanel.cs b/osu.Game.Tests/Visual/Online/TestCaseDirectPanel.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseDirectPanel.cs
rename to osu.Game.Tests/Visual/Online/TestCaseDirectPanel.cs
index beb88ac56c..fbda531792 100644
--- a/osu.Game.Tests/Visual/TestCaseDirectPanel.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseDirectPanel.cs
@@ -11,7 +11,7 @@ using osu.Game.Rulesets.Osu;
using osu.Game.Tests.Beatmaps;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
public class TestCaseDirectPanel : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseExternalLinkButton.cs b/osu.Game.Tests/Visual/Online/TestCaseExternalLinkButton.cs
similarity index 94%
rename from osu.Game.Tests/Visual/TestCaseExternalLinkButton.cs
rename to osu.Game.Tests/Visual/Online/TestCaseExternalLinkButton.cs
index 6f807e96f1..a73cbd86d0 100644
--- a/osu.Game.Tests/Visual/TestCaseExternalLinkButton.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseExternalLinkButton.cs
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using osu.Game.Graphics.UserInterface;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
public class TestCaseExternalLinkButton : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseGraph.cs b/osu.Game.Tests/Visual/Online/TestCaseGraph.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseGraph.cs
rename to osu.Game.Tests/Visual/Online/TestCaseGraph.cs
index 6a5865b752..77e850fc92 100644
--- a/osu.Game.Tests/Visual/TestCaseGraph.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseGraph.cs
@@ -7,7 +7,7 @@ using osu.Framework.Graphics;
using osu.Game.Graphics.UserInterface;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseGraph : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseHistoricalSection.cs b/osu.Game.Tests/Visual/Online/TestCaseHistoricalSection.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseHistoricalSection.cs
rename to osu.Game.Tests/Visual/Online/TestCaseHistoricalSection.cs
index 60e6148c49..92aa9320c8 100644
--- a/osu.Game.Tests/Visual/TestCaseHistoricalSection.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseHistoricalSection.cs
@@ -12,7 +12,7 @@ using osu.Game.Overlays.Profile.Sections;
using osu.Game.Overlays.Profile.Sections.Historical;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseHistoricalSection : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseRankGraph.cs b/osu.Game.Tests/Visual/Online/TestCaseRankGraph.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseRankGraph.cs
rename to osu.Game.Tests/Visual/Online/TestCaseRankGraph.cs
index f41033c0be..dff018bf91 100644
--- a/osu.Game.Tests/Visual/TestCaseRankGraph.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseRankGraph.cs
@@ -1,19 +1,19 @@
// 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 NUnit.Framework;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
-using osuTK;
using osu.Framework.Graphics.Shapes;
using osu.Game.Graphics;
-using System.Collections.Generic;
-using System;
-using NUnit.Framework;
using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays.Profile.Header;
using osu.Game.Users;
+using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseRankGraph : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseSocial.cs b/osu.Game.Tests/Visual/Online/TestCaseSocial.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseSocial.cs
rename to osu.Game.Tests/Visual/Online/TestCaseSocial.cs
index d621bc600d..48325713df 100644
--- a/osu.Game.Tests/Visual/TestCaseSocial.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseSocial.cs
@@ -8,7 +8,7 @@ using osu.Game.Overlays;
using osu.Game.Overlays.Social;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseSocial : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseStandAloneChatDisplay.cs b/osu.Game.Tests/Visual/Online/TestCaseStandAloneChatDisplay.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseStandAloneChatDisplay.cs
rename to osu.Game.Tests/Visual/Online/TestCaseStandAloneChatDisplay.cs
index 65ae70168e..4c4b3b2612 100644
--- a/osu.Game.Tests/Visual/TestCaseStandAloneChatDisplay.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseStandAloneChatDisplay.cs
@@ -7,7 +7,7 @@ using osu.Game.Online.Chat;
using osu.Game.Users;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
public class TestCaseStandAloneChatDisplay : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseUserPanel.cs b/osu.Game.Tests/Visual/Online/TestCaseUserPanel.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseUserPanel.cs
rename to osu.Game.Tests/Visual/Online/TestCaseUserPanel.cs
index 8caa608d5e..b2877f7bd7 100644
--- a/osu.Game.Tests/Visual/TestCaseUserPanel.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseUserPanel.cs
@@ -7,7 +7,7 @@ using osu.Framework.Graphics.Containers;
using osu.Game.Users;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseUserPanel : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseUserProfile.cs b/osu.Game.Tests/Visual/Online/TestCaseUserProfile.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseUserProfile.cs
rename to osu.Game.Tests/Visual/Online/TestCaseUserProfile.cs
index aa0bd37449..5b86de28f9 100644
--- a/osu.Game.Tests/Visual/TestCaseUserProfile.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseUserProfile.cs
@@ -13,7 +13,7 @@ using osu.Game.Overlays.Profile;
using osu.Game.Overlays.Profile.Header;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseUserProfile : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs b/osu.Game.Tests/Visual/Online/TestCaseUserProfileRecentSection.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs
rename to osu.Game.Tests/Visual/Online/TestCaseUserProfileRecentSection.cs
index da50653831..6b29ed1e85 100644
--- a/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseUserProfileRecentSection.cs
@@ -1,20 +1,20 @@
// 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.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Game.Graphics;
using osu.Game.Online.API.Requests;
+using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays.Profile.Sections;
using osu.Game.Overlays.Profile.Sections.Recent;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using osu.Game.Online.API.Requests.Responses;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseUserProfileRecentSection : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseUserRanks.cs b/osu.Game.Tests/Visual/Online/TestCaseUserRanks.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseUserRanks.cs
rename to osu.Game.Tests/Visual/Online/TestCaseUserRanks.cs
index 96638ef703..64257f8877 100644
--- a/osu.Game.Tests/Visual/TestCaseUserRanks.cs
+++ b/osu.Game.Tests/Visual/Online/TestCaseUserRanks.cs
@@ -1,6 +1,9 @@
// 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 NUnit.Framework;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
@@ -8,11 +11,8 @@ using osu.Game.Graphics;
using osu.Game.Overlays.Profile.Sections;
using osu.Game.Overlays.Profile.Sections.Ranks;
using osu.Game.Users;
-using System;
-using System.Collections.Generic;
-using NUnit.Framework;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Online
{
[TestFixture]
public class TestCaseUserRanks : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs b/osu.Game.Tests/Visual/Settings/TestCaseKeyConfiguration.cs
similarity index 93%
rename from osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs
rename to osu.Game.Tests/Visual/Settings/TestCaseKeyConfiguration.cs
index cd299be1e9..ce179c21ba 100644
--- a/osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs
+++ b/osu.Game.Tests/Visual/Settings/TestCaseKeyConfiguration.cs
@@ -4,7 +4,7 @@
using NUnit.Framework;
using osu.Game.Overlays;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Settings
{
[TestFixture]
public class TestCaseKeyConfiguration : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseSettings.cs b/osu.Game.Tests/Visual/Settings/TestCaseSettings.cs
similarity index 95%
rename from osu.Game.Tests/Visual/TestCaseSettings.cs
rename to osu.Game.Tests/Visual/Settings/TestCaseSettings.cs
index 67f32a8335..e846d5c020 100644
--- a/osu.Game.Tests/Visual/TestCaseSettings.cs
+++ b/osu.Game.Tests/Visual/Settings/TestCaseSettings.cs
@@ -6,7 +6,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics.Containers;
using osu.Game.Overlays;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Settings
{
[TestFixture]
public class TestCaseSettings : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapCarousel.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapCarousel.cs
index 956d84618c..1500605896 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapCarousel.cs
@@ -17,7 +17,7 @@ using osu.Game.Screens.Select;
using osu.Game.Screens.Select.Carousel;
using osu.Game.Screens.Select.Filter;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[TestFixture]
public class TestCaseBeatmapCarousel : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapDetailArea.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapDetailArea.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatmapDetailArea.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapDetailArea.cs
index 6cc3982f9c..722a63f2b0 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapDetailArea.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapDetailArea.cs
@@ -10,7 +10,7 @@ using osu.Game.Beatmaps;
using osu.Game.Screens.Select;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[TestFixture]
[System.ComponentModel.Description("PlaySongSelect leaderboard/details area")]
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapDetails.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapDetails.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatmapDetails.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapDetails.cs
index 84af6453f5..37987b8884 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapDetails.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapDetails.cs
@@ -7,7 +7,7 @@ using osu.Framework.Graphics;
using osu.Game.Beatmaps;
using osu.Game.Screens.Select;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[Description("PlaySongSelect beatmap details")]
public class TestCaseBeatmapDetails : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapInfoWedge.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapInfoWedge.cs
index 0d77ac666b..f3e44bd808 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapInfoWedge.cs
@@ -5,7 +5,6 @@ using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
using NUnit.Framework;
-using osuTK;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@@ -20,8 +19,9 @@ using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Taiko;
using osu.Game.Screens.Select;
using osu.Game.Tests.Beatmaps;
+using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[TestFixture]
public class TestCaseBeatmapInfoWedge : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapOptionsOverlay.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapOptionsOverlay.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseBeatmapOptionsOverlay.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapOptionsOverlay.cs
index fdab57193b..49038dc2cf 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapOptionsOverlay.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapOptionsOverlay.cs
@@ -7,7 +7,7 @@ using osu.Game.Screens.Select.Options;
using osuTK.Graphics;
using osuTK.Input;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[Description("bottom beatmap details")]
public class TestCaseBeatmapOptionsOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapScoresContainer.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapScoresContainer.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatmapScoresContainer.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapScoresContainer.cs
index bb55c0b1e8..c7970b6ebb 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapScoresContainer.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseBeatmapScoresContainer.cs
@@ -1,24 +1,24 @@
// 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.Shapes;
using osu.Framework.MathUtils;
+using osu.Game.Beatmaps;
using osu.Game.Graphics;
+using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays.BeatmapSet.Scores;
using osu.Game.Rulesets.Mods;
+using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Rulesets.Scoring;
-using osu.Game.Users;
-using System.Collections.Generic;
-using osu.Framework.Graphics.Containers;
-using osu.Game.Beatmaps;
-using osu.Game.Online.API.Requests.Responses;
-using osu.Game.Rulesets.Osu;
using osu.Game.Scoring;
+using osu.Game.Users;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[System.ComponentModel.Description("in BeatmapOverlay")]
public class TestCaseBeatmapScoresContainer : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseLeaderboard.cs b/osu.Game.Tests/Visual/SongSelect/TestCaseLeaderboard.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseLeaderboard.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCaseLeaderboard.cs
index eb1a2c0249..13ae6f228a 100644
--- a/osu.Game.Tests/Visual/TestCaseLeaderboard.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCaseLeaderboard.cs
@@ -4,18 +4,18 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
-using osu.Framework.Graphics;
-using osu.Game.Screens.Select.Leaderboards;
-using osu.Game.Users;
-using osu.Framework.Allocation;
-using osuTK;
using System.Linq;
+using osu.Framework.Allocation;
+using osu.Framework.Graphics;
using osu.Game.Beatmaps;
using osu.Game.Online.Leaderboards;
using osu.Game.Rulesets;
using osu.Game.Scoring;
+using osu.Game.Screens.Select.Leaderboards;
+using osu.Game.Users;
+using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[Description("PlaySongSelect leaderboard")]
public class TestCaseLeaderboard : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestCasePlaySongSelect.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCasePlaySongSelect.cs
rename to osu.Game.Tests/Visual/SongSelect/TestCasePlaySongSelect.cs
index 4a2cf24c6d..d5bc452d75 100644
--- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestCasePlaySongSelect.cs
@@ -23,7 +23,7 @@ using osu.Game.Screens.Select;
using osu.Game.Screens.Select.Carousel;
using osu.Game.Screens.Select.Filter;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.SongSelect
{
[TestFixture]
public class TestCasePlaySongSelect : ScreenTestCase
@@ -41,7 +41,7 @@ namespace osu.Game.Tests.Visual
public override IReadOnlyList RequiredTypes => new[]
{
- typeof(SongSelect),
+ typeof(Screens.Select.SongSelect),
typeof(BeatmapCarousel),
typeof(CarouselItem),
diff --git a/osu.Game.Tests/Visual/TestCaseAccountCreationOverlay.cs b/osu.Game.Tests/Visual/TestCaseAccountCreationOverlay.cs
deleted file mode 100644
index 543a43b439..0000000000
--- a/osu.Game.Tests/Visual/TestCaseAccountCreationOverlay.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// 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 osu.Framework.Graphics.Containers;
-using osu.Game.Overlays;
-using osu.Game.Overlays.AccountCreation;
-
-namespace osu.Game.Tests.Visual
-{
- public class TestCaseAccountCreationOverlay : OsuTestCase
- {
- public override IReadOnlyList RequiredTypes => new[]
- {
- typeof(ErrorTextFlowContainer),
- typeof(AccountCreationBackground),
- typeof(ScreenEntry),
- typeof(ScreenWarning),
- typeof(ScreenWelcome),
- typeof(AccountCreationScreen),
- };
-
- public TestCaseAccountCreationOverlay()
- {
- var accountCreation = new AccountCreationOverlay();
- Child = accountCreation;
-
- accountCreation.State = Visibility.Visible;
- }
- }
-}
diff --git a/osu.Game.Tests/Visual/TestCaseOsuScreenStack.cs b/osu.Game.Tests/Visual/TestCaseOsuScreenStack.cs
new file mode 100644
index 0000000000..0831228681
--- /dev/null
+++ b/osu.Game.Tests/Visual/TestCaseOsuScreenStack.cs
@@ -0,0 +1,82 @@
+// 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.Framework.Graphics.Sprites;
+using osu.Framework.Screens;
+using osu.Framework.Testing;
+using osu.Game.Screens;
+using osu.Game.Screens.Play;
+using osuTK.Graphics;
+
+namespace osu.Game.Tests.Visual
+{
+ [TestFixture]
+ public class TestCaseOsuScreenStack : OsuTestCase
+ {
+ private TestOsuScreenStack stack;
+
+ [SetUpSteps]
+ public void SetUpSteps()
+ {
+ AddStep("Create new screen stack", () => { Child = stack = new TestOsuScreenStack { RelativeSizeAxes = Axes.Both }; });
+ }
+
+ [Test]
+ public void ParallaxAssignmentTest()
+ {
+ NoParallaxTestScreen noParallaxScreen = null;
+ TestScreen parallaxScreen = null;
+
+ AddStep("Push no parallax", () => stack.Push(noParallaxScreen = new NoParallaxTestScreen("NO PARALLAX")));
+ AddUntilStep("Wait for current", () => noParallaxScreen.IsLoaded);
+ AddAssert("Parallax is off", () => stack.ParallaxAmount == 0);
+
+ AddStep("Push parallax", () => noParallaxScreen.Push(parallaxScreen = new TestScreen("PARALLAX")));
+ AddUntilStep("Wait for current", () => parallaxScreen.IsLoaded);
+ AddAssert("Parallax is on", () => stack.ParallaxAmount > 0);
+
+ AddStep("Exit from new screen", () => { noParallaxScreen.MakeCurrent(); });
+ AddAssert("Parallax is off", () => stack.ParallaxAmount == 0);
+ }
+
+ private class TestScreen : ScreenWithBeatmapBackground
+ {
+ private readonly string screenText;
+
+ public TestScreen(string screenText)
+ {
+ this.screenText = screenText;
+ }
+
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ AddInternal(new SpriteText
+ {
+ Text = screenText,
+ Colour = Color4.White,
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
+ });
+ }
+ }
+
+ private class NoParallaxTestScreen : TestScreen
+ {
+ public NoParallaxTestScreen(string screenText)
+ : base(screenText)
+ {
+ }
+
+ public override float BackgroundParallaxAmount => 0.0f;
+ }
+
+ private class TestOsuScreenStack : OsuScreenStack
+ {
+ public new float ParallaxAmount => base.ParallaxAmount;
+ }
+ }
+}
diff --git a/osu.Game.Tests/Visual/TestCaseDrawings.cs b/osu.Game.Tests/Visual/Tournament/TestCaseDrawings.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseDrawings.cs
rename to osu.Game.Tests/Visual/Tournament/TestCaseDrawings.cs
index aad135b71f..9453d0a5b2 100644
--- a/osu.Game.Tests/Visual/TestCaseDrawings.cs
+++ b/osu.Game.Tests/Visual/Tournament/TestCaseDrawings.cs
@@ -6,7 +6,7 @@ using System.ComponentModel;
using osu.Game.Screens.Tournament;
using osu.Game.Screens.Tournament.Teams;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.Tournament
{
[Description("for tournament use")]
public class TestCaseDrawings : ScreenTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseBeatSyncedContainer.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseBeatSyncedContainer.cs
index 2fd8d467f6..dcd194e050 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseBeatSyncedContainer.cs
@@ -8,16 +8,16 @@ using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
+using osu.Framework.Lists;
using osu.Framework.Timing;
using osu.Game.Beatmaps.ControlPoints;
+using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
using osu.Game.Overlays;
using osuTK.Graphics;
-using osu.Framework.Lists;
-using osu.Game.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseBeatSyncedContainer : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseBreadcrumbs.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseBreadcrumbs.cs
index 98ab884ead..5e09e0a5b9 100644
--- a/osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseBreadcrumbs.cs
@@ -7,7 +7,7 @@ using osu.Framework.Graphics;
using osu.Game.Graphics;
using osu.Game.Graphics.UserInterface;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseBreadcrumbs : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseButtonSystem.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs
index 8ea2ab9dde..261e87ff07 100644
--- a/osu.Game.Tests/Visual/TestCaseButtonSystem.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs
@@ -11,7 +11,7 @@ using osu.Framework.Graphics.Shapes;
using osu.Game.Screens.Menu;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseButtonSystem : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseContextMenu.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseContextMenu.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseContextMenu.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseContextMenu.cs
index 5cbe97e21d..71cde787f9 100644
--- a/osu.Game.Tests/Visual/TestCaseContextMenu.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseContextMenu.cs
@@ -7,12 +7,12 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.UserInterface;
+using osu.Game.Graphics.Cursor;
using osu.Game.Graphics.UserInterface;
using osuTK;
using osuTK.Graphics;
-using osu.Game.Graphics.Cursor;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseContextMenu : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseCursors.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseCursors.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseCursors.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseCursors.cs
index 7d38a76c7d..5f45d9ba4d 100644
--- a/osu.Game.Tests/Visual/TestCaseCursors.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseCursors.cs
@@ -14,7 +14,7 @@ using osu.Game.Graphics.Sprites;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseCursors : ManualInputManagerTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseDialogOverlay.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseDialogOverlay.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseDialogOverlay.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseDialogOverlay.cs
index e832793fc2..6b32f711e9 100644
--- a/osu.Game.Tests/Visual/TestCaseDialogOverlay.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseDialogOverlay.cs
@@ -6,7 +6,7 @@ using osu.Game.Graphics;
using osu.Game.Overlays;
using osu.Game.Overlays.Dialog;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseDialogOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseDrawableDate.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseDrawableDate.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseDrawableDate.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseDrawableDate.cs
index 8d2182dd78..e8662ce965 100644
--- a/osu.Game.Tests/Visual/TestCaseDrawableDate.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseDrawableDate.cs
@@ -9,7 +9,7 @@ using osu.Game.Graphics;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
public class TestCaseDrawableDate : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseHoldToConfirmOverlay.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseHoldToConfirmOverlay.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseHoldToConfirmOverlay.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseHoldToConfirmOverlay.cs
index c9a7e9c39f..38dc4a11dc 100644
--- a/osu.Game.Tests/Visual/TestCaseHoldToConfirmOverlay.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseHoldToConfirmOverlay.cs
@@ -8,7 +8,7 @@ using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Screens.Menu;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
public class TestCaseHoldToConfirmOverlay : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseIconButton.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseIconButton.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseIconButton.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseIconButton.cs
index 63e10b6ecc..2898d1a1cc 100644
--- a/osu.Game.Tests/Visual/TestCaseIconButton.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseIconButton.cs
@@ -2,16 +2,16 @@
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
-using osuTK;
-using osuTK.Graphics;
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 osuTK;
+using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseIconButton : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseLabelledTextBox.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseLabelledTextBox.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseLabelledTextBox.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseLabelledTextBox.cs
index 4b424f9875..781dfbdcc1 100644
--- a/osu.Game.Tests/Visual/TestCaseLabelledTextBox.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseLabelledTextBox.cs
@@ -1,15 +1,15 @@
// 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 NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
-using System;
-using System.Collections.Generic;
using osu.Game.Screens.Edit.Setup.Components.LabelledComponents;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseLabelledTextBox : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseLoadingAnimation.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseLoadingAnimation.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseLoadingAnimation.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseLoadingAnimation.cs
index f5dc1d449a..43f6f0e4db 100644
--- a/osu.Game.Tests/Visual/TestCaseLoadingAnimation.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseLoadingAnimation.cs
@@ -7,7 +7,7 @@ using osu.Framework.Testing;
using osu.Game.Graphics.UserInterface;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
public class TestCaseLoadingAnimation : GridTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseMods.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseMods.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseMods.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseMods.cs
index cb7e783bee..aab44f7d92 100644
--- a/osu.Game.Tests/Visual/TestCaseMods.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseMods.cs
@@ -2,26 +2,26 @@
// 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.Allocation;
+using osu.Framework.Bindables;
using osu.Framework.Graphics;
+using osu.Game.Graphics.Sprites;
+using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays.Mods;
+using osu.Game.Overlays.Mods.Sections;
using osu.Game.Rulesets;
-using osu.Game.Screens.Play.HUD;
-using osuTK;
+using osu.Game.Rulesets.Mania.Mods;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Mods;
-using System.Linq;
-using System.Collections.Generic;
-using NUnit.Framework;
-using osu.Framework.Bindables;
-using osu.Game.Graphics.UserInterface;
-using osu.Game.Graphics.Sprites;
-using osu.Game.Overlays.Mods.Sections;
-using osu.Game.Rulesets.Mania.Mods;
using osu.Game.Rulesets.UI;
+using osu.Game.Screens.Play.HUD;
+using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[Description("mod select and icon display")]
public class TestCaseMods : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseMusicController.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseMusicController.cs
similarity index 95%
rename from osu.Game.Tests/Visual/TestCaseMusicController.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseMusicController.cs
index b4a1c11b1a..644c7eb4fc 100644
--- a/osu.Game.Tests/Visual/TestCaseMusicController.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseMusicController.cs
@@ -7,7 +7,7 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Timing;
using osu.Game.Overlays;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseMusicController : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseNotificationOverlay.cs
similarity index 99%
rename from osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseNotificationOverlay.cs
index 9e70df91b6..4819597d22 100644
--- a/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseNotificationOverlay.cs
@@ -12,7 +12,7 @@ using osu.Framework.MathUtils;
using osu.Game.Overlays;
using osu.Game.Overlays.Notifications;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseNotificationOverlay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseOnScreenDisplay.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseOnScreenDisplay.cs
index 8b5ae0b208..7ad42cb926 100644
--- a/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseOnScreenDisplay.cs
@@ -8,7 +8,7 @@ using osu.Framework.Configuration.Tracking;
using osu.Framework.Graphics;
using osu.Game.Overlays;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseOnScreenDisplay : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseParallaxContainer.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseParallaxContainer.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseParallaxContainer.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseParallaxContainer.cs
index 41b029d69e..5de4c3f41f 100644
--- a/osu.Game.Tests/Visual/TestCaseParallaxContainer.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseParallaxContainer.cs
@@ -6,7 +6,7 @@ using osu.Framework.Screens;
using osu.Game.Graphics.Containers;
using osu.Game.Screens.Backgrounds;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
public class TestCaseParallaxContainer : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCasePopupDialog.cs b/osu.Game.Tests/Visual/UserInterface/TestCasePopupDialog.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCasePopupDialog.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCasePopupDialog.cs
index 51b5c41e0d..490903a906 100644
--- a/osu.Game.Tests/Visual/TestCasePopupDialog.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCasePopupDialog.cs
@@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Game.Graphics;
using osu.Game.Overlays.Dialog;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCasePopupDialog : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseScreenBreadcrumbControl.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseScreenBreadcrumbControl.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseScreenBreadcrumbControl.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseScreenBreadcrumbControl.cs
index dad684689e..c92072eb71 100644
--- a/osu.Game.Tests/Visual/TestCaseScreenBreadcrumbControl.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseScreenBreadcrumbControl.cs
@@ -13,20 +13,20 @@ using osu.Game.Graphics.UserInterface;
using osu.Game.Screens;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseScreenBreadcrumbControl : OsuTestCase
{
private readonly ScreenBreadcrumbControl breadcrumbs;
- private readonly ScreenStack screenStack;
+ private readonly OsuScreenStack screenStack;
public TestCaseScreenBreadcrumbControl()
{
OsuSpriteText titleText;
IScreen startScreen = new TestScreenOne();
- screenStack = new ScreenStack(startScreen) { RelativeSizeAxes = Axes.Both };
+ screenStack = new OsuScreenStack(startScreen) { RelativeSizeAxes = Axes.Both };
Children = new Drawable[]
{
diff --git a/osu.Game.Tests/Visual/TestCaseTabControl.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseTabControl.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseTabControl.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseTabControl.cs
index ebf8f3bb30..480dc73dde 100644
--- a/osu.Game.Tests/Visual/TestCaseTabControl.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseTabControl.cs
@@ -8,7 +8,7 @@ using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Select.Filter;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[Description("SongSelect filter control")]
public class TestCaseTabControl : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseTextAwesome.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseTextAwesome.cs
similarity index 97%
rename from osu.Game.Tests/Visual/TestCaseTextAwesome.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseTextAwesome.cs
index 6ab9a46e8d..40179387e2 100644
--- a/osu.Game.Tests/Visual/TestCaseTextAwesome.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseTextAwesome.cs
@@ -9,7 +9,7 @@ using osu.Framework.Graphics.Cursor;
using osu.Game.Graphics;
using osuTK;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[TestFixture]
public class TestCaseTextAwesome : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseTwoLayerButton.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseTwoLayerButton.cs
similarity index 90%
rename from osu.Game.Tests/Visual/TestCaseTwoLayerButton.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseTwoLayerButton.cs
index 9141aaa580..8d3cc7a0f2 100644
--- a/osu.Game.Tests/Visual/TestCaseTwoLayerButton.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseTwoLayerButton.cs
@@ -4,7 +4,7 @@
using System.ComponentModel;
using osu.Game.Graphics.UserInterface;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
[Description("mostly back button")]
public class TestCaseTwoLayerButton : OsuTestCase
diff --git a/osu.Game.Tests/Visual/TestCaseUpdateableBeatmapBackgroundSprite.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseUpdateableBeatmapBackgroundSprite.cs
similarity index 98%
rename from osu.Game.Tests/Visual/TestCaseUpdateableBeatmapBackgroundSprite.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseUpdateableBeatmapBackgroundSprite.cs
index 0981b482a1..74114b2e53 100644
--- a/osu.Game.Tests/Visual/TestCaseUpdateableBeatmapBackgroundSprite.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseUpdateableBeatmapBackgroundSprite.cs
@@ -12,7 +12,7 @@ using osu.Game.Online.API.Requests;
using osu.Game.Rulesets;
using osu.Game.Tests.Beatmaps.IO;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
public class TestCaseUpdateableBeatmapBackgroundSprite : OsuTestCase
{
diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseVolumePieces.cs
similarity index 96%
rename from osu.Game.Tests/Visual/TestCaseVolumePieces.cs
rename to osu.Game.Tests/Visual/UserInterface/TestCaseVolumePieces.cs
index 6dee047ae6..3ad1c922e4 100644
--- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestCaseVolumePieces.cs
@@ -8,7 +8,7 @@ using osu.Game.Overlays.Volume;
using osuTK;
using osuTK.Graphics;
-namespace osu.Game.Tests.Visual
+namespace osu.Game.Tests.Visual.UserInterface
{
public class TestCaseVolumePieces : OsuTestCase
{
diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj
index b22c1aed99..938e1ae0f8 100644
--- a/osu.Game.Tests/osu.Game.Tests.csproj
+++ b/osu.Game.Tests/osu.Game.Tests.csproj
@@ -3,9 +3,9 @@
-
+
-
+
diff --git a/osu.Game/Graphics/Containers/ScalingContainer.cs b/osu.Game/Graphics/Containers/ScalingContainer.cs
index 51f068d920..8f07c3a656 100644
--- a/osu.Game/Graphics/Containers/ScalingContainer.cs
+++ b/osu.Game/Graphics/Containers/ScalingContainer.cs
@@ -5,8 +5,10 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
+using osu.Framework.Screens;
using osu.Game.Configuration;
-using osu.Game.Graphics.Backgrounds;
+using osu.Game.Screens;
+using osu.Game.Screens.Backgrounds;
using osuTK;
namespace osu.Game.Graphics.Containers
@@ -32,7 +34,7 @@ namespace osu.Game.Graphics.Containers
private readonly Container sizableContainer;
- private Drawable backgroundLayer;
+ private BackgroundScreenStack backgroundStack;
///
/// Create a new instance.
@@ -112,27 +114,29 @@ namespace osu.Game.Graphics.Containers
private void updateSize()
{
+ const float fade_time = 500;
+
if (targetMode == ScalingMode.Everything)
{
// the top level scaling container manages the background to be displayed while scaling.
if (requiresBackgroundVisible)
{
- if (backgroundLayer == null)
- LoadComponentAsync(backgroundLayer = new Background("Menu/menu-background-1")
+ if (backgroundStack == null)
+ {
+ AddInternal(backgroundStack = new BackgroundScreenStack
{
Colour = OsuColour.Gray(0.1f),
Alpha = 0,
Depth = float.MaxValue
- }, d =>
- {
- AddInternal(d);
- d.FadeTo(requiresBackgroundVisible ? 1 : 0, 4000, Easing.OutQuint);
});
- else
- backgroundLayer.FadeIn(500);
+
+ backgroundStack.Push(new ScalingBackgroundScreen());
+ }
+
+ backgroundStack.FadeIn(fade_time);
}
else
- backgroundLayer?.FadeOut(500);
+ backgroundStack?.FadeOut(fade_time);
}
bool scaling = targetMode == null || scalingMode.Value == targetMode;
@@ -148,6 +152,14 @@ namespace osu.Game.Graphics.Containers
sizableContainer.ResizeTo(targetSize, 500, Easing.OutQuart).OnComplete(_ => { sizableContainer.Masking = requiresMasking; });
}
+ private class ScalingBackgroundScreen : BackgroundScreenDefault
+ {
+ public override void OnEntering(IScreen last)
+ {
+ this.FadeInFromZero(4000, Easing.OutQuint);
+ }
+ }
+
private class AlwaysInputContainer : Container
{
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => true;
diff --git a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs
index 73c9c0dd0e..f873db0dcb 100644
--- a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs
+++ b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs
@@ -16,9 +16,6 @@ namespace osu.Game.Graphics.UserInterface
///
public class FocusedTextBox : OsuTextBox
{
- protected override Color4 BackgroundUnfocused => new Color4(10, 10, 10, 255);
- protected override Color4 BackgroundFocused => new Color4(10, 10, 10, 255);
-
public Action Exit;
private bool focus;
@@ -47,6 +44,9 @@ namespace osu.Game.Graphics.UserInterface
private void load(GameHost host)
{
this.host = host;
+
+ BackgroundUnfocused = new Color4(10, 10, 10, 255);
+ BackgroundFocused = new Color4(10, 10, 10, 255);
}
// We may not be focused yet, but we need to handle keyboard input to be able to request focus
diff --git a/osu.Game/Graphics/UserInterface/OsuTextBox.cs b/osu.Game/Graphics/UserInterface/OsuTextBox.cs
index 21cdfbf5af..ebe38db60a 100644
--- a/osu.Game/Graphics/UserInterface/OsuTextBox.cs
+++ b/osu.Game/Graphics/UserInterface/OsuTextBox.cs
@@ -16,10 +16,6 @@ namespace osu.Game.Graphics.UserInterface
{
public class OsuTextBox : TextBox, IKeyBindingHandler
{
- protected override Color4 BackgroundUnfocused => Color4.Black.Opacity(0.5f);
- protected override Color4 BackgroundFocused => OsuColour.Gray(0.3f).Opacity(0.8f);
- protected override Color4 BackgroundCommit => BorderColour;
-
protected override float LeftRightPadding => 10;
protected override SpriteText CreatePlaceholder() => new OsuSpriteText
@@ -41,7 +37,9 @@ namespace osu.Game.Graphics.UserInterface
[BackgroundDependencyLoader]
private void load(OsuColour colour)
{
- BorderColour = colour.Yellow;
+ BackgroundUnfocused = Color4.Black.Opacity(0.5f);
+ BackgroundFocused = OsuColour.Gray(0.3f).Opacity(0.8f);
+ BackgroundCommit = BorderColour = colour.Yellow;
}
protected override void OnFocus(FocusEvent e)
diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs
index 3d861e44bf..c5f6ef41c2 100644
--- a/osu.Game/Online/API/APIAccess.cs
+++ b/osu.Game/Online/API/APIAccess.cs
@@ -266,20 +266,18 @@ namespace osu.Game.Online.API
get => state;
private set
{
- APIState oldState = state;
- APIState newState = value;
+ if (state == value)
+ return;
+ APIState oldState = state;
state = value;
- if (oldState != newState)
+ log.Add($@"We just went {state}!");
+ Scheduler.Add(delegate
{
- log.Add($@"We just went {newState}!");
- Scheduler.Add(delegate
- {
- components.ForEach(c => c.APIStateChanged(this, newState));
- OnStateChange?.Invoke(oldState, newState);
- });
- }
+ components.ForEach(c => c.APIStateChanged(this, state));
+ OnStateChange?.Invoke(oldState, state);
+ });
}
}
diff --git a/osu.Game/Online/API/DummyAPIAccess.cs b/osu.Game/Online/API/DummyAPIAccess.cs
index 0cb49951f7..99fde10309 100644
--- a/osu.Game/Online/API/DummyAPIAccess.cs
+++ b/osu.Game/Online/API/DummyAPIAccess.cs
@@ -1,12 +1,15 @@
// 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.Threading;
using osu.Framework.Bindables;
+using osu.Framework.Graphics;
using osu.Game.Users;
namespace osu.Game.Online.API
{
- public class DummyAPIAccess : IAPIProvider
+ public class DummyAPIAccess : Component, IAPIProvider
{
public Bindable LocalUser { get; } = new Bindable(new User
{
@@ -20,7 +23,23 @@ namespace osu.Game.Online.API
public string Endpoint => "http://localhost";
- public APIState State => LocalUser.Value.Id == 1 ? APIState.Offline : APIState.Online;
+ private APIState state = APIState.Online;
+
+ private readonly List components = new List();
+
+ public APIState State
+ {
+ get => state;
+ private set
+ {
+ if (state == value)
+ return;
+
+ state = value;
+
+ Scheduler.Add(() => components.ForEach(c => c.APIStateChanged(this, value)));
+ }
+ }
public virtual void Queue(APIRequest request)
{
@@ -28,28 +47,36 @@ namespace osu.Game.Online.API
public void Register(IOnlineComponent component)
{
- // todo: add support
+ Scheduler.Add(delegate { components.Add(component); });
+ component.APIStateChanged(this, state);
}
public void Unregister(IOnlineComponent component)
{
- // todo: add support
+ Scheduler.Add(delegate { components.Remove(component); });
}
public void Login(string username, string password)
{
LocalUser.Value = new User
{
- Username = @"Dummy",
+ Username = username,
Id = 1001,
};
+
+ State = APIState.Online;
}
public void Logout()
{
LocalUser.Value = new GuestUser();
+ State = APIState.Offline;
}
- public RegistrationRequest.RegistrationRequestErrors CreateAccount(string email, string username, string password) => null;
+ public RegistrationRequest.RegistrationRequestErrors CreateAccount(string email, string username, string password)
+ {
+ Thread.Sleep(200);
+ return null;
+ }
}
}
diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index cf231f19ce..7277990987 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -87,11 +87,7 @@ namespace osu.Game
public readonly Bindable OverlayActivationMode = new Bindable();
- private BackgroundScreenStack backgroundStack;
-
- private ParallaxContainer backgroundParallax;
-
- private ScreenStack screenStack;
+ private OsuScreenStack screenStack;
private VolumeOverlay volume;
private OnScreenDisplay onscreenDisplay;
private OsuLogo osuLogo;
@@ -390,12 +386,7 @@ namespace osu.Game
RelativeSizeAxes = Axes.Both,
Children = new Drawable[]
{
- backgroundParallax = new ParallaxContainer
- {
- RelativeSizeAxes = Axes.Both,
- Child = backgroundStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both },
- },
- screenStack = new ScreenStack { RelativeSizeAxes = Axes.Both },
+ screenStack = new OsuScreenStack { RelativeSizeAxes = Axes.Both },
logoContainer = new Container { RelativeSizeAxes = Axes.Both },
}
},
@@ -407,17 +398,19 @@ namespace osu.Game
idleTracker = new GameIdleTracker(6000)
});
- dependencies.Cache(backgroundStack);
-
screenStack.ScreenPushed += screenPushed;
screenStack.ScreenExited += screenExited;
- loadComponentSingleFile(osuLogo, logoContainer.Add);
-
- loadComponentSingleFile(new Loader
+ loadComponentSingleFile(osuLogo, logo =>
{
- RelativeSizeAxes = Axes.Both
- }, screenStack.Push);
+ logoContainer.Add(logo);
+
+ // Loader has to be created after the logo has finished loading as Loader performs logo transformations on entering.
+ screenStack.Push(new Loader
+ {
+ RelativeSizeAxes = Axes.Both
+ });
+ });
loadComponentSingleFile(Toolbar = new Toolbar
{
@@ -777,8 +770,6 @@ namespace osu.Game
if (newScreen is IOsuScreen newOsuScreen)
{
- backgroundParallax.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * newOsuScreen.BackgroundParallaxAmount;
-
OverlayActivationMode.Value = newOsuScreen.InitialOverlayActivationMode;
if (newOsuScreen.HideOverlaysOnEnter)
diff --git a/osu.Game/Overlays/Chat/Selection/ChannelSelectionOverlay.cs b/osu.Game/Overlays/Chat/Selection/ChannelSelectionOverlay.cs
index feb47b9e8e..71e9e4bdf3 100644
--- a/osu.Game/Overlays/Chat/Selection/ChannelSelectionOverlay.cs
+++ b/osu.Game/Overlays/Chat/Selection/ChannelSelectionOverlay.cs
@@ -190,8 +190,12 @@ namespace osu.Game.Overlays.Chat.Selection
private class HeaderSearchTextBox : SearchTextBox
{
- protected override Color4 BackgroundFocused => Color4.Black.Opacity(0.2f);
- protected override Color4 BackgroundUnfocused => Color4.Black.Opacity(0.2f);
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ BackgroundFocused = Color4.Black.Opacity(0.2f);
+ BackgroundUnfocused = Color4.Black.Opacity(0.2f);
+ }
}
}
}
diff --git a/osu.Game/Overlays/Music/FilterControl.cs b/osu.Game/Overlays/Music/FilterControl.cs
index 6bceade271..99017579a2 100644
--- a/osu.Game/Overlays/Music/FilterControl.cs
+++ b/osu.Game/Overlays/Music/FilterControl.cs
@@ -6,8 +6,8 @@ using osu.Framework.Graphics.Containers;
using osu.Game.Graphics;
using osu.Game.Graphics.UserInterface;
using osuTK;
-using osuTK.Graphics;
using System;
+using osu.Framework.Allocation;
using osu.Framework.Bindables;
namespace osu.Game.Overlays.Music
@@ -53,15 +53,16 @@ namespace osu.Game.Overlays.Music
public class FilterTextBox : SearchTextBox
{
- protected override Color4 BackgroundUnfocused => OsuColour.Gray(0.06f);
- protected override Color4 BackgroundFocused => OsuColour.Gray(0.12f);
-
protected override bool AllowCommit => true;
- public FilterTextBox()
+ [BackgroundDependencyLoader]
+ private void load()
{
Masking = true;
CornerRadius = 5;
+
+ BackgroundUnfocused = OsuColour.Gray(0.06f);
+ BackgroundFocused = OsuColour.Gray(0.12f);
}
}
}
diff --git a/osu.Game/Overlays/SearchableList/SearchableListFilterControl.cs b/osu.Game/Overlays/SearchableList/SearchableListFilterControl.cs
index 478e3d4c95..b0a8a0e77d 100644
--- a/osu.Game/Overlays/SearchableList/SearchableListFilterControl.cs
+++ b/osu.Game/Overlays/SearchableList/SearchableListFilterControl.cs
@@ -127,10 +127,14 @@ namespace osu.Game.Overlays.SearchableList
private class FilterSearchTextBox : SearchTextBox
{
- protected override Color4 BackgroundUnfocused => OsuColour.Gray(0.06f);
- protected override Color4 BackgroundFocused => OsuColour.Gray(0.12f);
-
protected override bool AllowCommit => true;
+
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ BackgroundUnfocused = OsuColour.Gray(0.06f);
+ BackgroundFocused = OsuColour.Gray(0.12f);
+ }
}
}
}
diff --git a/osu.Game/Rulesets/UI/DrawableRuleset.cs b/osu.Game/Rulesets/UI/DrawableRuleset.cs
index abf0fb2696..31c0afd743 100644
--- a/osu.Game/Rulesets/UI/DrawableRuleset.cs
+++ b/osu.Game/Rulesets/UI/DrawableRuleset.cs
@@ -169,6 +169,8 @@ namespace osu.Game.Rulesets.UI
mod.ApplyToDrawableHitObjects(Playfield.HitObjectContainer.Objects);
}
+ public override void RequestResume(Action continueResume) => continueResume();
+
///
/// Creates and adds the visual representation of a to this .
///
@@ -339,6 +341,13 @@ namespace osu.Game.Rulesets.UI
/// The replay, null for local input.
public abstract void SetReplayScore(Score replayScore);
+ ///
+ /// Invoked when the interactive user requests resuming from a paused state.
+ /// Allows potentially delaying the resume process until an interaction is performed.
+ ///
+ /// The action to run when resuming is to be completed.
+ public abstract void RequestResume(Action continueResume);
+
///
/// Create a for the associated ruleset and link with this
/// .
diff --git a/osu.Game/Screens/Multi/Match/Components/MatchSettingsOverlay.cs b/osu.Game/Screens/Multi/Match/Components/MatchSettingsOverlay.cs
index b310e62d7c..586a986111 100644
--- a/osu.Game/Screens/Multi/Match/Components/MatchSettingsOverlay.cs
+++ b/osu.Game/Screens/Multi/Match/Components/MatchSettingsOverlay.cs
@@ -316,8 +316,12 @@ namespace osu.Game.Screens.Multi.Match.Components
private class SettingsTextBox : OsuTextBox
{
- protected override Color4 BackgroundUnfocused => Color4.Black;
- protected override Color4 BackgroundFocused => Color4.Black;
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ BackgroundUnfocused = Color4.Black;
+ BackgroundFocused = Color4.Black;
+ }
}
private class SettingsNumberTextBox : SettingsTextBox
@@ -327,8 +331,12 @@ namespace osu.Game.Screens.Multi.Match.Components
private class SettingsPasswordTextBox : OsuPasswordTextBox
{
- protected override Color4 BackgroundUnfocused => Color4.Black;
- protected override Color4 BackgroundFocused => Color4.Black;
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ BackgroundUnfocused = Color4.Black;
+ BackgroundFocused = Color4.Black;
+ }
}
private class SectionContainer : FillFlowContainer
diff --git a/osu.Game/Screens/Multi/Multiplayer.cs b/osu.Game/Screens/Multi/Multiplayer.cs
index f38fc4e3ff..5e019a7b3a 100644
--- a/osu.Game/Screens/Multi/Multiplayer.cs
+++ b/osu.Game/Screens/Multi/Multiplayer.cs
@@ -95,7 +95,7 @@ namespace osu.Game.Screens.Multi
{
RelativeSizeAxes = Axes.Both,
Padding = new MarginPadding { Top = Header.HEIGHT },
- Child = screenStack = new ScreenStack(loungeSubScreen = new LoungeSubScreen()) { RelativeSizeAxes = Axes.Both }
+ Child = screenStack = new OsuScreenStack(loungeSubScreen = new LoungeSubScreen()) { RelativeSizeAxes = Axes.Both }
},
new Header(screenStack),
createButton = new HeaderButton
diff --git a/osu.Game/Screens/OsuScreenStack.cs b/osu.Game/Screens/OsuScreenStack.cs
new file mode 100644
index 0000000000..0844e32d46
--- /dev/null
+++ b/osu.Game/Screens/OsuScreenStack.cs
@@ -0,0 +1,48 @@
+// 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;
+using osu.Game.Graphics.Containers;
+
+namespace osu.Game.Screens
+{
+ public class OsuScreenStack : ScreenStack
+ {
+ [Cached]
+ private BackgroundScreenStack backgroundScreenStack;
+
+ private ParallaxContainer parallaxContainer;
+
+ protected float ParallaxAmount => parallaxContainer.ParallaxAmount;
+
+ public OsuScreenStack()
+ {
+ initializeStack();
+ }
+
+ public OsuScreenStack(IScreen baseScreen)
+ : base(baseScreen)
+ {
+ initializeStack();
+ }
+
+ private void initializeStack()
+ {
+ InternalChild = parallaxContainer = new ParallaxContainer
+ {
+ RelativeSizeAxes = Axes.Both,
+ Child = backgroundScreenStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both },
+ };
+
+ ScreenPushed += onScreenChange;
+ ScreenExited += onScreenChange;
+ }
+
+ private void onScreenChange(IScreen prev, IScreen next)
+ {
+ parallaxContainer.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * ((IOsuScreen)next)?.BackgroundParallaxAmount ?? 1.0f;
+ }
+ }
+}
diff --git a/osu.Game/Screens/Play/GameplayClockContainer.cs b/osu.Game/Screens/Play/GameplayClockContainer.cs
index 3c2cec1d94..deac5e02bf 100644
--- a/osu.Game/Screens/Play/GameplayClockContainer.cs
+++ b/osu.Game/Screens/Play/GameplayClockContainer.cs
@@ -18,7 +18,7 @@ using osu.Game.Rulesets.Mods;
namespace osu.Game.Screens.Play
{
///
- /// Encapsulates gameplay timing logic and provides a for children.
+ /// Encapsulates gameplay timing logic and provides a for children.
///
public class GameplayClockContainer : Container
{
@@ -48,7 +48,7 @@ namespace osu.Game.Screens.Play
/// The final clock which is exposed to underlying components.
///
[Cached]
- private readonly GameplayClock gameplayClock;
+ public readonly GameplayClock GameplayClock;
private Bindable userAudioOffset;
@@ -78,7 +78,7 @@ namespace osu.Game.Screens.Play
offsetClock = new FramedOffsetClock(platformOffsetClock);
// the clock to be exposed via DI to children.
- gameplayClock = new GameplayClock(offsetClock);
+ GameplayClock = new GameplayClock(offsetClock);
}
[BackgroundDependencyLoader]
@@ -118,11 +118,16 @@ namespace osu.Game.Screens.Play
// This accounts for the audio clock source potentially taking time to enter a completely stopped state
adjustableClock.Seek(adjustableClock.CurrentTime);
adjustableClock.Start();
+ IsPaused.Value = false;
}
public void Seek(double time) => adjustableClock.Seek(time);
- public void Stop() => adjustableClock.Stop();
+ public void Stop()
+ {
+ adjustableClock.Stop();
+ IsPaused.Value = true;
+ }
public void ResetLocalAdjustments()
{
diff --git a/osu.Game/Screens/Play/GameplayMenuOverlay.cs b/osu.Game/Screens/Play/GameplayMenuOverlay.cs
index 5d210446c3..2fac8de799 100644
--- a/osu.Game/Screens/Play/GameplayMenuOverlay.cs
+++ b/osu.Game/Screens/Play/GameplayMenuOverlay.cs
@@ -38,9 +38,15 @@ namespace osu.Game.Screens.Play
///
/// Action that is invoked when is triggered.
///
- protected virtual Action BackAction => () => InternalButtons.Children.Last().Click();
+ protected virtual Action BackAction => () => InternalButtons.Children.LastOrDefault()?.Click();
+
+ ///
+ /// Action that is invoked when is triggered.
+ ///
+ protected virtual Action SelectAction => () => InternalButtons.Children.FirstOrDefault(f => f.Selected.Value)?.Click();
public abstract string Header { get; }
+
public abstract string Description { get; }
protected internal FillFlowContainer InternalButtons;
@@ -229,16 +235,30 @@ namespace osu.Game.Screens.Play
public bool OnPressed(GlobalAction action)
{
- if (action == GlobalAction.Back)
+ switch (action)
{
- BackAction.Invoke();
- return true;
+ case GlobalAction.Back:
+ BackAction.Invoke();
+ return true;
+ case GlobalAction.Select:
+ SelectAction.Invoke();
+ return true;
}
return false;
}
- public bool OnReleased(GlobalAction action) => action == GlobalAction.Back;
+ public bool OnReleased(GlobalAction action)
+ {
+ switch (action)
+ {
+ case GlobalAction.Back:
+ case GlobalAction.Select:
+ return true;
+ }
+
+ return false;
+ }
private void buttonSelectionChanged(DialogButton button, bool isSelected)
{
@@ -288,15 +308,6 @@ namespace osu.Game.Screens.Play
Selected.Value = true;
return base.OnMouseMove(e);
}
-
- protected override bool OnKeyDown(KeyDownEvent e)
- {
- if (e.Repeat || e.Key != Key.Enter || !Selected.Value)
- return false;
-
- Click();
- return true;
- }
}
}
}
diff --git a/osu.Game/Screens/Play/PausableGameplayContainer.cs b/osu.Game/Screens/Play/PausableGameplayContainer.cs
deleted file mode 100644
index 99f0083b55..0000000000
--- a/osu.Game/Screens/Play/PausableGameplayContainer.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-// 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.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Game.Graphics;
-using osuTK.Graphics;
-
-namespace osu.Game.Screens.Play
-{
- ///
- /// A container which handles pausing children, displaying an overlay blocking its children during paused state.
- ///
- public class PausableGameplayContainer : Container
- {
- public readonly BindableBool IsPaused = new BindableBool();
-
- public Func CheckCanPause;
-
- private const double pause_cooldown = 1000;
- private double lastPauseActionTime;
-
- private readonly PauseOverlay pauseOverlay;
-
- private readonly Container content;
-
- protected override Container Content => content;
-
- public int Retries
- {
- set => pauseOverlay.Retries = value;
- }
-
- public bool CanPause => (CheckCanPause?.Invoke() ?? true) && Time.Current >= lastPauseActionTime + pause_cooldown;
- public bool IsResuming { get; private set; }
-
- public Action OnRetry;
- public Action OnQuit;
-
- public Action Stop;
- public Action Start;
-
- ///
- /// Creates a new .
- ///
- public PausableGameplayContainer()
- {
- RelativeSizeAxes = Axes.Both;
-
- InternalChildren = new[]
- {
- content = new Container
- {
- RelativeSizeAxes = Axes.Both
- },
- pauseOverlay = new PauseOverlay
- {
- OnResume = () =>
- {
- IsResuming = true;
- this.Delay(400).Schedule(Resume);
- },
- OnRetry = () => OnRetry(),
- OnQuit = () => OnQuit(),
- }
- };
- }
-
- public void Pause(bool force = false) => Schedule(() => // Scheduled to ensure a stable position in execution order, no matter how it was called.
- {
- if (!CanPause && !force) return;
-
- if (IsPaused.Value) return;
-
- // stop the seekable clock (stops the audio eventually)
- Stop?.Invoke();
- IsPaused.Value = true;
-
- pauseOverlay.Show();
-
- lastPauseActionTime = Time.Current;
- });
-
- public void Resume()
- {
- if (!IsPaused.Value) return;
-
- IsResuming = false;
- lastPauseActionTime = Time.Current;
-
- IsPaused.Value = false;
-
- Start?.Invoke();
-
- pauseOverlay.Hide();
- }
-
- private OsuGameBase game;
-
- [BackgroundDependencyLoader]
- private void load(OsuGameBase game)
- {
- this.game = game;
- }
-
- protected override void Update()
- {
- // eagerly pause when we lose window focus (if we are locally playing).
- if (!game.IsActive.Value && CanPause)
- Pause();
-
- base.Update();
- }
-
- public class PauseOverlay : GameplayMenuOverlay
- {
- public Action OnResume;
-
- public override string Header => "paused";
- public override string Description => "you're not going to do what i think you're going to do, are ya?";
-
- protected override Action BackAction => () => InternalButtons.Children.First().Click();
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- AddButton("Continue", colours.Green, () => OnResume?.Invoke());
- AddButton("Retry", colours.YellowDark, () => OnRetry?.Invoke());
- AddButton("Quit", new Color4(170, 27, 39, 255), () => OnQuit?.Invoke());
- }
- }
- }
-}
diff --git a/osu.Game/Screens/Play/PauseOverlay.cs b/osu.Game/Screens/Play/PauseOverlay.cs
new file mode 100644
index 0000000000..6cc6027a03
--- /dev/null
+++ b/osu.Game/Screens/Play/PauseOverlay.cs
@@ -0,0 +1,29 @@
+// 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.Game.Graphics;
+using osuTK.Graphics;
+
+namespace osu.Game.Screens.Play
+{
+ public class PauseOverlay : GameplayMenuOverlay
+ {
+ public Action OnResume;
+
+ public override string Header => "paused";
+ public override string Description => "you're not going to do what i think you're going to do, are ya?";
+
+ protected override Action BackAction => () => InternalButtons.Children.First().Click();
+
+ [BackgroundDependencyLoader]
+ private void load(OsuColour colours)
+ {
+ AddButton("Continue", colours.Green, () => OnResume?.Invoke());
+ AddButton("Retry", colours.YellowDark, () => OnRetry?.Invoke());
+ AddButton("Quit", new Color4(170, 27, 39, 255), () => OnQuit?.Invoke());
+ }
+ }
+}
diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index 194d09f4b3..7b1cdd21a6 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -56,8 +56,6 @@ namespace osu.Game.Screens.Play
[Resolved]
private ScoreManager scoreManager { get; set; }
- protected PausableGameplayContainer PausableGameplayContainer { get; private set; }
-
private RulesetInfo ruleset;
private IAPIProvider api;
@@ -68,23 +66,10 @@ namespace osu.Game.Screens.Play
protected DrawableRuleset DrawableRuleset { get; private set; }
protected HUDOverlay HUDOverlay { get; private set; }
- private FailOverlay failOverlay;
-
- private DrawableStoryboard storyboard;
- protected UserDimContainer StoryboardContainer { get; private set; }
-
- private Bindable showStoryboard;
-
- protected virtual UserDimContainer CreateStoryboardContainer() => new UserDimContainer(true)
- {
- RelativeSizeAxes = Axes.Both,
- Alpha = 1,
- EnableUserDim = { Value = true }
- };
public bool LoadedBeatmapSuccessfully => DrawableRuleset?.Objects.Any() == true;
- private GameplayClockContainer gameplayClockContainer;
+ protected GameplayClockContainer GameplayClockContainer { get; private set; }
[BackgroundDependencyLoader]
private void load(AudioManager audio, IAPIProvider api, OsuConfigManager config)
@@ -105,55 +90,49 @@ namespace osu.Game.Screens.Play
if (!ScoreProcessor.Mode.Disabled)
config.BindWith(OsuSetting.ScoreDisplayMode, ScoreProcessor.Mode);
- InternalChild = gameplayClockContainer = new GameplayClockContainer(working, AllowLeadIn, DrawableRuleset.GameplayStartTime);
+ InternalChild = GameplayClockContainer = new GameplayClockContainer(working, AllowLeadIn, DrawableRuleset.GameplayStartTime);
- gameplayClockContainer.Children = new Drawable[]
+ GameplayClockContainer.Children = new[]
{
- PausableGameplayContainer = new PausableGameplayContainer
+ StoryboardContainer = CreateStoryboardContainer(),
+ new ScalingContainer(ScalingMode.Gameplay)
{
- Retries = RestartCount,
- OnRetry = Restart,
- OnQuit = performUserRequestedExit,
- Start = gameplayClockContainer.Start,
- Stop = gameplayClockContainer.Stop,
- IsPaused = { BindTarget = gameplayClockContainer.IsPaused },
- CheckCanPause = () => AllowPause && ValidForResume && !HasFailed && !DrawableRuleset.HasReplayLoaded.Value,
- Children = new[]
+ Child = new LocalSkinOverrideContainer(working.Skin)
{
- StoryboardContainer = CreateStoryboardContainer(),
- new ScalingContainer(ScalingMode.Gameplay)
- {
- Child = new LocalSkinOverrideContainer(working.Skin)
- {
- RelativeSizeAxes = Axes.Both,
- Child = DrawableRuleset
- }
- },
- new BreakOverlay(working.Beatmap.BeatmapInfo.LetterboxInBreaks, ScoreProcessor)
- {
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Breaks = working.Beatmap.Breaks
- },
- // display the cursor above some HUD elements.
- DrawableRuleset.Cursor?.CreateProxy() ?? new Container(),
- HUDOverlay = new HUDOverlay(ScoreProcessor, DrawableRuleset, working)
- {
- HoldToQuit = { Action = performUserRequestedExit },
- PlayerSettingsOverlay = { PlaybackSettings = { UserPlaybackRate = { BindTarget = gameplayClockContainer.UserPlaybackRate } } },
- KeyCounter = { Visible = { BindTarget = DrawableRuleset.HasReplayLoaded } },
- RequestSeek = gameplayClockContainer.Seek,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre
- },
- new SkipOverlay(DrawableRuleset.GameplayStartTime)
- {
- RequestSeek = gameplayClockContainer.Seek
- },
+ RelativeSizeAxes = Axes.Both,
+ Child = DrawableRuleset
}
},
- failOverlay = new FailOverlay
+ new BreakOverlay(working.Beatmap.BeatmapInfo.LetterboxInBreaks, ScoreProcessor)
{
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
+ Breaks = working.Beatmap.Breaks
+ },
+ // display the cursor above some HUD elements.
+ DrawableRuleset.Cursor?.CreateProxy() ?? new Container(),
+ HUDOverlay = new HUDOverlay(ScoreProcessor, DrawableRuleset, working)
+ {
+ HoldToQuit = { Action = performUserRequestedExit },
+ PlayerSettingsOverlay = { PlaybackSettings = { UserPlaybackRate = { BindTarget = GameplayClockContainer.UserPlaybackRate } } },
+ KeyCounter = { Visible = { BindTarget = DrawableRuleset.HasReplayLoaded } },
+ RequestSeek = GameplayClockContainer.Seek,
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre
+ },
+ new SkipOverlay(DrawableRuleset.GameplayStartTime)
+ {
+ RequestSeek = GameplayClockContainer.Seek
+ },
+ FailOverlay = new FailOverlay
+ {
+ OnRetry = Restart,
+ OnQuit = performUserRequestedExit,
+ },
+ PauseOverlay = new PauseOverlay
+ {
+ OnResume = Resume,
+ Retries = RestartCount,
OnRetry = Restart,
OnQuit = performUserRequestedExit,
},
@@ -170,10 +149,10 @@ namespace osu.Game.Screens.Play
};
// bind clock into components that require it
- DrawableRuleset.IsPaused.BindTo(gameplayClockContainer.IsPaused);
+ DrawableRuleset.IsPaused.BindTo(GameplayClockContainer.IsPaused);
- if (showStoryboard.Value)
- initializeStoryboard(false);
+ // load storyboard as part of player's load if we can
+ initializeStoryboard(false);
// Bind ScoreProcessor to ourselves
ScoreProcessor.AllJudged += onCompletion;
@@ -289,19 +268,148 @@ namespace osu.Game.Screens.Play
return score;
}
+ protected override bool OnScroll(ScrollEvent e) => mouseWheelDisabled.Value && !GameplayClockContainer.IsPaused.Value;
+
+ protected virtual Results CreateResults(ScoreInfo score) => new SoloResults(score);
+
+ #region Storyboard
+
+ private DrawableStoryboard storyboard;
+ protected UserDimContainer StoryboardContainer { get; private set; }
+
+ protected virtual UserDimContainer CreateStoryboardContainer() => new UserDimContainer(true)
+ {
+ RelativeSizeAxes = Axes.Both,
+ Alpha = 1,
+ EnableUserDim = { Value = true }
+ };
+
+ private Bindable showStoryboard;
+
+ private void initializeStoryboard(bool asyncLoad)
+ {
+ if (StoryboardContainer == null || storyboard != null)
+ return;
+
+ if (!showStoryboard.Value)
+ return;
+
+ var beatmap = Beatmap.Value;
+
+ storyboard = beatmap.Storyboard.CreateDrawable();
+ storyboard.Masking = true;
+
+ if (asyncLoad)
+ LoadComponentAsync(storyboard, StoryboardContainer.Add);
+ else
+ StoryboardContainer.Add(storyboard);
+ }
+
+ #endregion
+
+ #region Fail Logic
+
+ protected FailOverlay FailOverlay { get; private set; }
+
private bool onFail()
{
if (Beatmap.Value.Mods.Value.OfType().Any(m => !m.AllowFail))
return false;
- gameplayClockContainer.Stop();
+ GameplayClockContainer.Stop();
HasFailed = true;
- failOverlay.Retries = RestartCount;
- failOverlay.Show();
+
+ // There is a chance that we could be in a paused state as the ruleset's internal clock (see FrameStabilityContainer)
+ // could process an extra frame after the GameplayClock is stopped.
+ // In such cases we want the fail state to precede a user triggered pause.
+ if (PauseOverlay.State == Visibility.Visible)
+ PauseOverlay.Hide();
+
+ FailOverlay.Retries = RestartCount;
+ FailOverlay.Show();
return true;
}
+ #endregion
+
+ #region Pause Logic
+
+ public bool IsResuming { get; private set; }
+
+ ///
+ /// The amount of gameplay time after which a second pause is allowed.
+ ///
+ private const double pause_cooldown = 1000;
+
+ protected PauseOverlay PauseOverlay { get; private set; }
+
+ private double? lastPauseActionTime;
+
+ private bool canPause =>
+ // must pass basic screen conditions (beatmap loaded, instance allows pause)
+ LoadedBeatmapSuccessfully && AllowPause && ValidForResume
+ // replays cannot be paused and exit immediately
+ && !DrawableRuleset.HasReplayLoaded.Value
+ // cannot pause if we are already in a fail state
+ && !HasFailed
+ // cannot pause if already paused (or in a cooldown state) unless we are in a resuming state.
+ && (IsResuming || (GameplayClockContainer.IsPaused.Value == false && !pauseCooldownActive));
+
+ private bool pauseCooldownActive =>
+ lastPauseActionTime.HasValue && GameplayClockContainer.GameplayClock.CurrentTime < lastPauseActionTime + pause_cooldown;
+
+ private bool canResume =>
+ // cannot resume from a non-paused state
+ GameplayClockContainer.IsPaused.Value
+ // cannot resume if we are already in a fail state
+ && !HasFailed
+ // already resuming
+ && !IsResuming;
+
+ protected override void Update()
+ {
+ base.Update();
+
+ // eagerly pause when we lose window focus (if we are locally playing).
+ if (!Game.IsActive.Value)
+ Pause();
+ }
+
+ public void Pause()
+ {
+ if (!canPause) return;
+
+ IsResuming = false;
+ GameplayClockContainer.Stop();
+ PauseOverlay.Show();
+ lastPauseActionTime = GameplayClockContainer.GameplayClock.CurrentTime;
+ }
+
+ public void Resume()
+ {
+ if (!canResume) return;
+
+ IsResuming = true;
+ PauseOverlay.Hide();
+
+ // time-based conditions may allow instant resume.
+ if (GameplayClockContainer.GameplayClock.CurrentTime < Beatmap.Value.Beatmap.HitObjects.First().StartTime)
+ completeResume();
+ else
+ DrawableRuleset.RequestResume(completeResume);
+
+ void completeResume()
+ {
+ GameplayClockContainer.Start();
+ IsResuming = false;
+ }
+ }
+
+ #endregion
+
+ #region Screen Logic
+
public override void OnEntering(IScreen last)
{
base.OnEntering(last);
@@ -316,10 +424,7 @@ namespace osu.Game.Screens.Play
.Delay(250)
.FadeIn(250);
- showStoryboard.ValueChanged += enabled =>
- {
- if (enabled.NewValue) initializeStoryboard(true);
- };
+ showStoryboard.ValueChanged += _ => initializeStoryboard(true);
Background.EnableUserDim.Value = true;
Background.BlurAmount.Value = 0;
@@ -329,10 +434,8 @@ namespace osu.Game.Screens.Play
storyboardReplacesBackground.Value = Beatmap.Value.Storyboard.ReplacesBackground && Beatmap.Value.Storyboard.HasDrawable;
- gameplayClockContainer.Restart();
-
- PausableGameplayContainer.Alpha = 0;
- PausableGameplayContainer.FadeIn(750, Easing.OutQuint);
+ GameplayClockContainer.Restart();
+ GameplayClockContainer.FadeInFromZero(750, Easing.OutQuint);
}
public override void OnSuspending(IScreen next)
@@ -350,18 +453,20 @@ namespace osu.Game.Screens.Play
return true;
}
- if ((!AllowPause || HasFailed || !ValidForResume || PausableGameplayContainer?.IsPaused.Value != false || DrawableRuleset?.HasReplayLoaded.Value != false) && (!PausableGameplayContainer?.IsResuming ?? true))
+ if (canPause)
{
- gameplayClockContainer.ResetLocalAdjustments();
-
- fadeOut();
- return base.OnExiting(next);
+ Pause();
+ return true;
}
- if (LoadedBeatmapSuccessfully)
- PausableGameplayContainer?.Pause();
+ if (pauseCooldownActive && !GameplayClockContainer.IsPaused.Value)
+ // still want to block if we are within the cooldown period and not already paused.
+ return true;
- return true;
+ GameplayClockContainer.ResetLocalAdjustments();
+
+ fadeOut();
+ return base.OnExiting(next);
}
private void fadeOut(bool instant = false)
@@ -373,24 +478,6 @@ namespace osu.Game.Screens.Play
storyboardReplacesBackground.Value = false;
}
- protected override bool OnScroll(ScrollEvent e) => mouseWheelDisabled.Value && !PausableGameplayContainer.IsPaused.Value;
-
- private void initializeStoryboard(bool asyncLoad)
- {
- if (StoryboardContainer == null || storyboard != null)
- return;
-
- var beatmap = Beatmap.Value;
-
- storyboard = beatmap.Storyboard.CreateDrawable();
- storyboard.Masking = true;
-
- if (asyncLoad)
- LoadComponentAsync(storyboard, StoryboardContainer.Add);
- else
- StoryboardContainer.Add(storyboard);
- }
-
- protected virtual Results CreateResults(ScoreInfo score) => new SoloResults(score);
+ #endregion
}
}
diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs
index bfd1d3d236..d7240a40ad 100644
--- a/osu.Game/Screens/Select/BeatmapCarousel.cs
+++ b/osu.Game/Screens/Select/BeatmapCarousel.cs
@@ -55,9 +55,9 @@ namespace osu.Game.Screens.Select
public override bool HandlePositionalInput => AllowSelection;
///
- /// Used to avoid firing null selections before the initial beatmaps have been loaded via .
+ /// Whether carousel items have completed asynchronously loaded.
///
- private bool initialLoadComplete;
+ public bool BeatmapSetsLoaded { get; private set; }
private IEnumerable beatmapSets => root.Children.OfType();
@@ -90,7 +90,7 @@ namespace osu.Game.Screens.Select
Schedule(() =>
{
BeatmapSetsChanged?.Invoke();
- initialLoadComplete = true;
+ BeatmapSetsLoaded = true;
});
}));
}
@@ -327,6 +327,9 @@ namespace osu.Game.Screens.Select
private void select(CarouselItem item)
{
+ if (!AllowSelection)
+ return;
+
if (item == null) return;
item.State.Value = CarouselItemState.Selected;
@@ -593,7 +596,7 @@ namespace osu.Game.Screens.Select
currentY += DrawHeight / 2;
scrollableContent.Height = currentY;
- if (initialLoadComplete && (selectedBeatmapSet == null || selectedBeatmap == null || selectedBeatmapSet.State.Value != CarouselItemState.Selected))
+ if (BeatmapSetsLoaded && (selectedBeatmapSet == null || selectedBeatmap == null || selectedBeatmapSet.State.Value != CarouselItemState.Selected))
{
selectedBeatmapSet = null;
SelectionChanged?.Invoke(null);
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index a86d0beb39..8758df5151 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -300,6 +300,10 @@ namespace osu.Game.Screens.Select
/// Whether to trigger .
public void FinaliseSelection(BeatmapInfo beatmap = null, bool performStartAction = true)
{
+ // This is very important as we have not yet bound to screen-level bindables before the carousel load is completed.
+ if (!Carousel.BeatmapSetsLoaded)
+ return;
+
// if we have a pending filter operation, we want to run it now.
// it could change selection (ie. if the ruleset has been changed).
Carousel.FlushPendingFilterOperations();
@@ -373,6 +377,13 @@ namespace osu.Game.Screens.Select
var beatmap = beatmapNoDebounce;
var ruleset = rulesetNoDebounce;
+ selectionChangedDebounce?.Cancel();
+
+ if (beatmap == null)
+ run();
+ else
+ selectionChangedDebounce = Scheduler.AddDelayed(run, 200);
+
void run()
{
Logger.Log($"updating selection with beatmap:{beatmap?.ID.ToString() ?? "null"} ruleset:{ruleset?.ID.ToString() ?? "null"}");
@@ -417,13 +428,6 @@ namespace osu.Game.Screens.Select
if (this.IsCurrentScreen()) ensurePlayingSelected(preview);
UpdateBeatmap(Beatmap.Value);
}
-
- selectionChangedDebounce?.Cancel();
-
- if (beatmap == null)
- run();
- else
- selectionChangedDebounce = Scheduler.AddDelayed(run, 200);
}
private void triggerRandom()
@@ -593,18 +597,7 @@ namespace osu.Game.Screens.Select
private void carouselBeatmapsLoaded()
{
- if (rulesetNoDebounce == null)
- {
- // manual binding to parent ruleset to allow for delayed load in the incoming direction.
- rulesetNoDebounce = decoupledRuleset.Value = Ruleset.Value;
- Ruleset.ValueChanged += r => updateSelectedRuleset(r.NewValue);
-
- decoupledRuleset.ValueChanged += r => Ruleset.Value = r.NewValue;
- decoupledRuleset.DisabledChanged += r => Ruleset.Disabled = r;
-
- Beatmap.BindDisabledChanged(disabled => Carousel.AllowSelection = !disabled, true);
- Beatmap.BindValueChanged(workingBeatmapChanged);
- }
+ bindBindables();
if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false
&& Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false))
@@ -618,6 +611,26 @@ namespace osu.Game.Screens.Select
}
}
+ private bool boundLocalBindables;
+
+ private void bindBindables()
+ {
+ if (boundLocalBindables)
+ return;
+
+ // manual binding to parent ruleset to allow for delayed load in the incoming direction.
+ rulesetNoDebounce = decoupledRuleset.Value = Ruleset.Value;
+ Ruleset.ValueChanged += r => updateSelectedRuleset(r.NewValue);
+
+ decoupledRuleset.ValueChanged += r => Ruleset.Value = r.NewValue;
+ decoupledRuleset.DisabledChanged += r => Ruleset.Disabled = r;
+
+ Beatmap.BindDisabledChanged(disabled => Carousel.AllowSelection = !disabled, true);
+ Beatmap.BindValueChanged(workingBeatmapChanged);
+
+ boundLocalBindables = true;
+ }
+
private void delete(BeatmapSetInfo beatmap)
{
if (beatmap == null || beatmap.ID <= 0) return;
diff --git a/osu.Game/Tests/Visual/AllPlayersTestCase.cs b/osu.Game/Tests/Visual/AllPlayersTestCase.cs
index 507848730f..03bd7b218a 100644
--- a/osu.Game/Tests/Visual/AllPlayersTestCase.cs
+++ b/osu.Game/Tests/Visual/AllPlayersTestCase.cs
@@ -73,15 +73,11 @@ namespace osu.Game.Tests.Visual
Player?.Exit();
Player = null;
- var player = CreatePlayer(r);
+ Player = CreatePlayer(r);
- LoadComponentAsync(player, p =>
- {
- Player = p;
- LoadScreen(p);
- });
+ LoadScreen(Player);
- return player;
+ return Player;
}
protected virtual Player CreatePlayer(Ruleset ruleset) => new Player
diff --git a/osu.Game/Tests/Visual/EditorTestCase.cs b/osu.Game/Tests/Visual/EditorTestCase.cs
index 67a1cb6de3..96e70e018e 100644
--- a/osu.Game/Tests/Visual/EditorTestCase.cs
+++ b/osu.Game/Tests/Visual/EditorTestCase.cs
@@ -26,7 +26,7 @@ namespace osu.Game.Tests.Visual
{
Beatmap.Value = new TestWorkingBeatmap(ruleset.RulesetInfo, null);
- LoadComponentAsync(new Editor(), LoadScreen);
+ LoadScreen(new Editor());
}
}
}
diff --git a/osu.Game/Tests/Visual/PlayerTestCase.cs b/osu.Game/Tests/Visual/PlayerTestCase.cs
index ad01d82281..50cb839ed9 100644
--- a/osu.Game/Tests/Visual/PlayerTestCase.cs
+++ b/osu.Game/Tests/Visual/PlayerTestCase.cs
@@ -52,11 +52,8 @@ namespace osu.Game.Tests.Visual
if (!AllowFail)
Beatmap.Value.Mods.Value = new[] { ruleset.GetAllMods().First(m => m is ModNoFail) };
- LoadComponentAsync(Player = CreatePlayer(ruleset), p =>
- {
- Player = p;
- LoadScreen(p);
- });
+ Player = CreatePlayer(ruleset);
+ LoadScreen(Player);
}
protected virtual Player CreatePlayer(Ruleset ruleset) => new Player
diff --git a/osu.Game/Tests/Visual/ScreenTestCase.cs b/osu.Game/Tests/Visual/ScreenTestCase.cs
index 79c57ad9f4..eec60d01c5 100644
--- a/osu.Game/Tests/Visual/ScreenTestCase.cs
+++ b/osu.Game/Tests/Visual/ScreenTestCase.cs
@@ -1,9 +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 osu.Framework.Allocation;
using osu.Framework.Graphics;
-using osu.Framework.Screens;
using osu.Game.Screens;
namespace osu.Game.Tests.Visual
@@ -13,18 +11,11 @@ namespace osu.Game.Tests.Visual
///
public abstract class ScreenTestCase : OsuTestCase
{
- private readonly ScreenStack stack;
-
- [Cached]
- private BackgroundScreenStack backgroundStack;
+ private readonly OsuScreenStack stack;
protected ScreenTestCase()
{
- Children = new Drawable[]
- {
- backgroundStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both },
- stack = new ScreenStack { RelativeSizeAxes = Axes.Both }
- };
+ Child = stack = new OsuScreenStack { RelativeSizeAxes = Axes.Both };
}
protected void LoadScreen(OsuScreen screen)
diff --git a/osu.Game/Tests/Visual/TestCasePlayer.cs b/osu.Game/Tests/Visual/TestCasePlayer.cs
deleted file mode 100644
index fed56ba4d1..0000000000
--- a/osu.Game/Tests/Visual/TestCasePlayer.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-// 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.Graphics.Shapes;
-using osu.Framework.Lists;
-using osu.Framework.Screens;
-using osu.Game.Beatmaps;
-using osu.Game.Rulesets;
-using osu.Game.Rulesets.Mods;
-using osu.Game.Screens.Play;
-using osu.Game.Tests.Beatmaps;
-using osuTK.Graphics;
-
-namespace osu.Game.Tests.Visual
-{
- public abstract class TestCasePlayer : RateAdjustedBeatmapTestCase
- {
- private readonly Ruleset ruleset;
-
- protected Player Player;
-
- protected TestCasePlayer(Ruleset ruleset)
- {
- this.ruleset = ruleset;
- }
-
- protected TestCasePlayer()
- {
- }
-
- [BackgroundDependencyLoader]
- private void load(RulesetStore rulesets)
- {
- Add(new Box
- {
- RelativeSizeAxes = Framework.Graphics.Axes.Both,
- Colour = Color4.Black,
- Depth = int.MaxValue
- });
-
- if (ruleset != null)
- {
- Player p = null;
- AddStep(ruleset.RulesetInfo.Name, () => p = loadPlayerFor(ruleset));
- AddCheckSteps(() => p);
- }
- else
- {
- foreach (var r in rulesets.AvailableRulesets)
- {
- Player p = null;
- AddStep(r.Name, () => p = loadPlayerFor(r));
- AddCheckSteps(() => p);
-
- AddUntilStep("no leaked beatmaps", () =>
- {
- p = null;
-
- GC.Collect();
- GC.WaitForPendingFinalizers();
- int count = 0;
-
- workingWeakReferences.ForEachAlive(_ => count++);
- return count == 1;
- });
-
- AddUntilStep("no leaked players", () =>
- {
- GC.Collect();
- GC.WaitForPendingFinalizers();
- int count = 0;
-
- playerWeakReferences.ForEachAlive(_ => count++);
- return count == 1;
- });
- }
- }
- }
-
- protected virtual void AddCheckSteps(Func player)
- {
- AddUntilStep("player loaded", () => player().IsLoaded);
- }
-
- protected virtual IBeatmap CreateBeatmap(Ruleset ruleset) => new TestBeatmap(ruleset.RulesetInfo);
-
- private readonly WeakList workingWeakReferences = new WeakList();
- private readonly WeakList playerWeakReferences = new WeakList();
-
- private Player loadPlayerFor(RulesetInfo ri)
- {
- Ruleset.Value = ri;
- return loadPlayerFor(ri.CreateInstance());
- }
-
- private Player loadPlayerFor(Ruleset r)
- {
- var beatmap = CreateBeatmap(r);
- var working = new TestWorkingBeatmap(beatmap, Clock);
-
- workingWeakReferences.Add(working);
-
- Beatmap.Value = working;
- Beatmap.Value.Mods.Value = new[] { r.GetAllMods().First(m => m is ModNoFail) };
-
- Player?.Exit();
-
- var player = CreatePlayer(r);
-
- playerWeakReferences.Add(player);
-
- LoadComponentAsync(player, p =>
- {
- Player = p;
- LoadScreen(p);
- });
-
- return player;
- }
-
- protected virtual Player CreatePlayer(Ruleset ruleset) => new Player
- {
- AllowPause = false,
- AllowLeadIn = false,
- AllowResults = false,
- };
- }
-}
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index d8561770fd..71324ea0f0 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -11,13 +11,13 @@
-
-
-
+
+
+
-
-
+
+
diff --git a/osu.iOS.props b/osu.iOS.props
index 3dcb647cd2..02099a59bb 100644
--- a/osu.iOS.props
+++ b/osu.iOS.props
@@ -105,8 +105,8 @@
-
-
+
+