diff --git a/.idea/.idea.osu/.idea/runConfigurations/VisualTests__netcoreapp2_0_.xml b/.idea/.idea.osu/.idea/runConfigurations/VisualTests__netcoreapp2_1_.xml
similarity index 83%
rename from .idea/.idea.osu/.idea/runConfigurations/VisualTests__netcoreapp2_0_.xml
rename to .idea/.idea.osu/.idea/runConfigurations/VisualTests__netcoreapp2_1_.xml
index 08b4e38667..2d3a848922 100644
--- a/.idea/.idea.osu/.idea/runConfigurations/VisualTests__netcoreapp2_0_.xml
+++ b/.idea/.idea.osu/.idea/runConfigurations/VisualTests__netcoreapp2_1_.xml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -12,7 +12,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/.idea.osu/.idea/runConfigurations/osu___netcoreapp2_0_.xml b/.idea/.idea.osu/.idea/runConfigurations/osu___netcoreapp2_1_.xml
similarity index 83%
rename from .idea/.idea.osu/.idea/runConfigurations/osu___netcoreapp2_0_.xml
rename to .idea/.idea.osu/.idea/runConfigurations/osu___netcoreapp2_1_.xml
index 2f5c137631..36efe211c6 100644
--- a/.idea/.idea.osu/.idea/runConfigurations/osu___netcoreapp2_0_.xml
+++ b/.idea/.idea.osu/.idea/runConfigurations/osu___netcoreapp2_1_.xml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -12,7 +12,7 @@
-
+
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 32c82685c0..b9bb75d5bb 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -58,12 +58,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Debug, netcoreapp2.0)",
+ "name": "VisualTests (Debug, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/osu.Game.Tests/bin/Debug/netcoreapp2.0/osu.Game.Tests.dll"
+ "${workspaceRoot}/osu.Game.Tests/bin/Debug/netcoreapp2.1/osu.Game.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build tests (Debug, dotnet)",
@@ -71,12 +71,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Release, netcoreapp2.0)",
+ "name": "VisualTests (Release, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/osu.Game.Tests/bin/Release/netcoreapp2.0/osu.Game.Tests.dll"
+ "${workspaceRoot}/osu.Game.Tests/bin/Release/netcoreapp2.1/osu.Game.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build tests (Release, dotnet)",
@@ -84,12 +84,12 @@
"console": "internalConsole"
},
{
- "name": "osu! (Debug, netcoreapp2.0)",
+ "name": "osu! (Debug, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/osu.Desktop/bin/Debug/netcoreapp2.0/osu!.dll",
+ "${workspaceRoot}/osu.Desktop/bin/Debug/netcoreapp2.1/osu!.dll",
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build osu! (Debug, dotnet)",
@@ -97,12 +97,12 @@
"console": "internalConsole"
},
{
- "name": "osu! (Release, netcoreapp2.0)",
+ "name": "osu! (Release, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/osu.Desktop/bin/Release/netcoreapp2.0/osu!.dll",
+ "${workspaceRoot}/osu.Desktop/bin/Release/netcoreapp2.1/osu!.dll",
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build osu! (Release, dotnet)",
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 0908ff6108..bebad750ca 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -38,7 +38,7 @@
"build",
"--no-restore",
"osu.Desktop",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:GenerateFullPaths=true",
"/m",
"/verbosity:m"
@@ -54,7 +54,7 @@
"build",
"--no-restore",
"osu.Desktop",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:Configuration=Release",
"/p:GenerateFullPaths=true",
"/m",
@@ -71,7 +71,7 @@
"build",
"--no-restore",
"osu.Game.Tests",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:GenerateFullPaths=true",
"/m",
"/verbosity:m"
@@ -87,7 +87,7 @@
"build",
"--no-restore",
"osu.Game.Tests",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:Configuration=Release",
"/p:GenerateFullPaths=true",
"/m",
@@ -106,7 +106,7 @@
"problemMatcher": []
},
{
- "label": "Restore (netcoreapp2.0)",
+ "label": "Restore (netcoreapp2.1)",
"type": "shell",
"command": "dotnet",
"args": [
diff --git a/appveyor.yml b/appveyor.yml
index 69bc762f4c..314faa617a 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,6 +1,6 @@
clone_depth: 1
version: '{branch}-{build}'
-image: Visual Studio 2017
+image: Visual Studio 2017 preview
configuration: Debug
cache:
- C:\ProgramData\chocolatey\bin -> appveyor.yml
diff --git a/osu-framework b/osu-framework
index aebfa5bc5c..b963ce8250 160000
--- a/osu-framework
+++ b/osu-framework
@@ -1 +1 @@
-Subproject commit aebfa5bc5c634c1fd0c103e0c17518e5111a67c7
+Subproject commit b963ce82505bc953db0a0763679e1ec80a060811
diff --git a/osu.Desktop/osu.Desktop.csproj b/osu.Desktop/osu.Desktop.csproj
index af027da2fc..b8efd76506 100644
--- a/osu.Desktop/osu.Desktop.csproj
+++ b/osu.Desktop/osu.Desktop.csproj
@@ -1,7 +1,7 @@
- net471;netcoreapp2.0
+ net471;netcoreapp2.1
WinExe
AnyCPU
true
@@ -20,8 +20,6 @@
osu.Desktop.Program
-
-
@@ -38,8 +36,4 @@
-
-
-
-
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Catch.Tests/.vscode/launch.json b/osu.Game.Rulesets.Catch.Tests/.vscode/launch.json
index eb80f4474c..2a82d65014 100644
--- a/osu.Game.Rulesets.Catch.Tests/.vscode/launch.json
+++ b/osu.Game.Rulesets.Catch.Tests/.vscode/launch.json
@@ -22,7 +22,7 @@
},
"type": "mono",
"request": "launch",
- "program": "${workspaceRoot}/bin/Debug/net471/osu.Game.Rulesets.Catch.Tests.exe",
+ "program": "${workspaceRoot}/bin/Release/net471/osu.Game.Rulesets.Catch.Tests.exe",
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, msbuild)",
"runtimeExecutable": null,
@@ -30,12 +30,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Debug, netcoreapp2.0)",
+ "name": "VisualTests (Debug, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Catch.Tests.dll"
+ "${workspaceRoot}/bin/Debug/netcoreapp2.1/osu.Game.Rulesets.Catch.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Debug, dotnet)",
@@ -43,12 +43,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Release, netcoreapp2.0)",
+ "name": "VisualTests (Release, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Catch.Tests.dll"
+ "${workspaceRoot}/bin/Release/netcoreapp2.1/osu.Game.Rulesets.Catch.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, dotnet)",
diff --git a/osu.Game.Rulesets.Catch.Tests/.vscode/tasks.json b/osu.Game.Rulesets.Catch.Tests/.vscode/tasks.json
index 41ae88f425..6c6d562512 100644
--- a/osu.Game.Rulesets.Catch.Tests/.vscode/tasks.json
+++ b/osu.Game.Rulesets.Catch.Tests/.vscode/tasks.json
@@ -40,7 +40,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Catch.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:GenerateFullPaths=true",
"/m",
"/verbosity:m"
@@ -56,7 +56,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Catch.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:Configuration=Release",
"/p:GenerateFullPaths=true",
"/m",
@@ -75,7 +75,7 @@
"problemMatcher": []
},
{
- "label": "Restore (netcoreapp2.0)",
+ "label": "Restore (netcoreapp2.1)",
"type": "shell",
"command": "dotnet",
"args": [
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 3797edde61..93fa2c4d67 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,7 +2,7 @@
WinExe
- netcoreapp2.0;net471
+ netcoreapp2.1;net471
diff --git a/osu.Game.Rulesets.Mania.Tests/.vscode/launch.json b/osu.Game.Rulesets.Mania.Tests/.vscode/launch.json
index fceb403f30..bc41d4ccf9 100644
--- a/osu.Game.Rulesets.Mania.Tests/.vscode/launch.json
+++ b/osu.Game.Rulesets.Mania.Tests/.vscode/launch.json
@@ -22,7 +22,7 @@
},
"type": "mono",
"request": "launch",
- "program": "${workspaceRoot}/bin/Debug/net471/osu.Game.Rulesets.Mania.Tests.exe",
+ "program": "${workspaceRoot}/bin/Release/net471/osu.Game.Rulesets.Mania.Tests.exe",
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, msbuild)",
"runtimeExecutable": null,
@@ -30,12 +30,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Debug, netcoreapp2.0)",
+ "name": "VisualTests (Debug, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Mania.Tests.dll"
+ "${workspaceRoot}/bin/Debug/netcoreapp2.1/osu.Game.Rulesets.Mania.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Debug, dotnet)",
@@ -43,12 +43,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Release, netcoreapp2.0)",
+ "name": "VisualTests (Release, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Mania.Tests.dll"
+ "${workspaceRoot}/bin/Release/netcoreapp2.1/osu.Game.Rulesets.Mania.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, dotnet)",
diff --git a/osu.Game.Rulesets.Mania.Tests/.vscode/tasks.json b/osu.Game.Rulesets.Mania.Tests/.vscode/tasks.json
index b04b068b0d..7fc2f7b2ef 100644
--- a/osu.Game.Rulesets.Mania.Tests/.vscode/tasks.json
+++ b/osu.Game.Rulesets.Mania.Tests/.vscode/tasks.json
@@ -40,7 +40,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Mania.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:GenerateFullPaths=true",
"/m",
"/verbosity:m"
@@ -56,7 +56,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Mania.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:Configuration=Release",
"/p:GenerateFullPaths=true",
"/m",
@@ -75,7 +75,7 @@
"problemMatcher": []
},
{
- "label": "Restore (netcoreapp2.0)",
+ "label": "Restore (netcoreapp2.1)",
"type": "shell",
"command": "dotnet",
"args": [
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 e90155568e..77504fdc3c 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,7 +2,7 @@
WinExe
- netcoreapp2.0;net471
+ netcoreapp2.1;net471
diff --git a/osu.Game.Rulesets.Osu.Tests/.vscode/launch.json b/osu.Game.Rulesets.Osu.Tests/.vscode/launch.json
index 714fb6db6f..13aba025fd 100644
--- a/osu.Game.Rulesets.Osu.Tests/.vscode/launch.json
+++ b/osu.Game.Rulesets.Osu.Tests/.vscode/launch.json
@@ -22,7 +22,7 @@
},
"type": "mono",
"request": "launch",
- "program": "${workspaceRoot}/bin/Debug/net471/osu.Game.Rulesets.Osu.Tests.exe",
+ "program": "${workspaceRoot}/bin/Release/net471/osu.Game.Rulesets.Osu.Tests.exe",
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, msbuild)",
"runtimeExecutable": null,
@@ -30,12 +30,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Debug, netcoreapp2.0)",
+ "name": "VisualTests (Debug, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Osu.Tests.dll"
+ "${workspaceRoot}/bin/Debug/netcoreapp2.1/osu.Game.Rulesets.Osu.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Debug, dotnet)",
@@ -43,12 +43,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Release, netcoreapp2.0)",
+ "name": "VisualTests (Release, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Osu.Tests.dll"
+ "${workspaceRoot}/bin/Release/netcoreapp2.1/osu.Game.Rulesets.Osu.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, dotnet)",
diff --git a/osu.Game.Rulesets.Osu.Tests/.vscode/tasks.json b/osu.Game.Rulesets.Osu.Tests/.vscode/tasks.json
index 657fe07e1a..62cf51382f 100644
--- a/osu.Game.Rulesets.Osu.Tests/.vscode/tasks.json
+++ b/osu.Game.Rulesets.Osu.Tests/.vscode/tasks.json
@@ -40,7 +40,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Osu.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:GenerateFullPaths=true",
"/m",
"/verbosity:m"
@@ -56,7 +56,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Osu.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:Configuration=Release",
"/p:GenerateFullPaths=true",
"/m",
@@ -75,7 +75,7 @@
"problemMatcher": []
},
{
- "label": "Restore (netcoreapp2.0)",
+ "label": "Restore (netcoreapp2.1)",
"type": "shell",
"command": "dotnet",
"args": [
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 1695ceacee..c5d9b26145 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,7 +2,7 @@
WinExe
- netcoreapp2.0;net471
+ netcoreapp2.1;net471
diff --git a/osu.Game.Rulesets.Taiko.Tests/.vscode/launch.json b/osu.Game.Rulesets.Taiko.Tests/.vscode/launch.json
index e1df54e99b..df49e177dc 100644
--- a/osu.Game.Rulesets.Taiko.Tests/.vscode/launch.json
+++ b/osu.Game.Rulesets.Taiko.Tests/.vscode/launch.json
@@ -22,7 +22,7 @@
},
"type": "mono",
"request": "launch",
- "program": "${workspaceRoot}/bin/Debug/net471/osu.Game.Rulesets.Taiko.Tests.exe",
+ "program": "${workspaceRoot}/bin/Release/net471/osu.Game.Rulesets.Taiko.Tests.exe",
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, msbuild)",
"runtimeExecutable": null,
@@ -30,12 +30,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Debug, netcoreapp2.0)",
+ "name": "VisualTests (Debug, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Taiko.Tests.dll"
+ "${workspaceRoot}/bin/Debug/netcoreapp2.1/osu.Game.Rulesets.Taiko.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Debug, dotnet)",
@@ -43,12 +43,12 @@
"console": "internalConsole"
},
{
- "name": "VisualTests (Release, netcoreapp2.0)",
+ "name": "VisualTests (Release, netcoreapp2.1)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/bin/Debug/netcoreapp2.0/osu.Game.Rulesets.Taiko.Tests.dll"
+ "${workspaceRoot}/bin/Release/netcoreapp2.1/osu.Game.Rulesets.Taiko.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build (Release, dotnet)",
diff --git a/osu.Game.Rulesets.Taiko.Tests/.vscode/tasks.json b/osu.Game.Rulesets.Taiko.Tests/.vscode/tasks.json
index 8bdbcd8e8e..7c8beed00f 100644
--- a/osu.Game.Rulesets.Taiko.Tests/.vscode/tasks.json
+++ b/osu.Game.Rulesets.Taiko.Tests/.vscode/tasks.json
@@ -40,7 +40,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Taiko.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:GenerateFullPaths=true",
"/m",
"/verbosity:m"
@@ -56,7 +56,7 @@
"build",
"--no-restore",
"osu.Game.Rulesets.Taiko.Tests.csproj",
- "/p:TargetFramework=netcoreapp2.0",
+ "/p:TargetFramework=netcoreapp2.1",
"/p:Configuration=Release",
"/p:GenerateFullPaths=true",
"/m",
@@ -75,7 +75,7 @@
"problemMatcher": []
},
{
- "label": "Restore (netcoreapp2.0)",
+ "label": "Restore (netcoreapp2.1)",
"type": "shell",
"command": "dotnet",
"args": [
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 1221584a2b..dea34d25e7 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,7 +2,7 @@
WinExe
- netcoreapp2.0;net471
+ netcoreapp2.1;net471
diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs
index f819e882d9..4679fca855 100644
--- a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs
+++ b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs
@@ -65,11 +65,7 @@ namespace osu.Game.Tests.Visual
carousel.SelectionChanged = s => currentSelection = s;
- AddStep("Load Beatmaps", () => { carousel.BeatmapSets = beatmapSets; });
-
- bool changed = false;
- carousel.BeatmapSetsChanged = () => changed = true;
- AddUntilStep(() => changed, "Wait for load");
+ loadBeatmaps(beatmapSets);
testTraversal();
testFiltering();
@@ -84,6 +80,17 @@ namespace osu.Game.Tests.Visual
testCarouselRootIsRandom();
}
+ private void loadBeatmaps(List beatmapSets)
+ {
+ bool changed = false;
+ AddStep($"Load {beatmapSets.Count} Beatmaps", () =>
+ {
+ carousel.BeatmapSetsChanged = () => changed = true;
+ carousel.BeatmapSets = beatmapSets;
+ });
+ AddUntilStep(() => changed, "Wait for load");
+ }
+
private void ensureRandomFetchSuccess() =>
AddAssert("ensure prev random fetch worked", () => selectedSets.Peek() == carousel.SelectedBeatmapSet);
@@ -423,7 +430,7 @@ namespace osu.Game.Tests.Visual
for (int i = 1; i <= 50; i++)
beatmapSets.Add(createTestBeatmapSet(i));
- AddStep("Load 50 Beatmaps", () => { carousel.BeatmapSets = beatmapSets; });
+ loadBeatmaps(beatmapSets);
advanceSelection(direction: 1, diff: false);
checkNonmatchingFilter();
checkNonmatchingFilter();
diff --git a/osu.Game.Tests/Visual/TestCaseLoaderAnimation.cs b/osu.Game.Tests/Visual/TestCaseLoaderAnimation.cs
new file mode 100644
index 0000000000..600784f8db
--- /dev/null
+++ b/osu.Game.Tests/Visual/TestCaseLoaderAnimation.cs
@@ -0,0 +1,115 @@
+// Copyright (c) 2007-2018 ppy Pty Ltd .
+// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
+
+using NUnit.Framework;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Shapes;
+using osu.Game.Screens;
+using osu.Game.Screens.Menu;
+using OpenTK.Graphics;
+
+namespace osu.Game.Tests.Visual
+{
+ [TestFixture]
+ public class TestCaseLoaderAnimation : OsuTestCase
+ {
+ private TestLoader loader;
+
+ protected override void LoadComplete()
+ {
+ base.LoadComplete();
+
+ // required to preload the logo in a headless run (so it doesn't delay the loading itself).
+ Add(new OsuLogo());
+
+ bool logoVisible = false;
+ AddStep("almost instant display", () => Child = loader = new TestLoader(250));
+ AddUntilStep(() =>
+ {
+ logoVisible = loader.Logo?.Alpha > 0;
+ return loader.Logo != null && loader.ScreenLoaded;
+ }, "loaded");
+ AddAssert("logo not visible", () => !logoVisible);
+
+ AddStep("short load", () => Child = loader = new TestLoader(800));
+ AddUntilStep(() =>
+ {
+ logoVisible = loader.Logo?.Alpha > 0;
+ return loader.Logo != null && loader.ScreenLoaded;
+ }, "loaded");
+ AddAssert("logo visible", () => logoVisible);
+ AddUntilStep(() => loader.Logo?.Alpha == 0, "logo gone");
+
+ AddStep("longer load", () => Child = loader = new TestLoader(1400));
+ AddUntilStep(() =>
+ {
+ logoVisible = loader.Logo?.Alpha > 0;
+ return loader.Logo != null && loader.ScreenLoaded;
+ }, "loaded");
+ AddAssert("logo visible", () => logoVisible);
+ AddUntilStep(() => loader.Logo?.Alpha == 0, "logo gone");
+ }
+
+ private class TestLoader : Loader
+ {
+ private readonly double delay;
+
+ public OsuLogo Logo;
+ private TestScreen screen;
+
+ public bool ScreenLoaded => screen.IsCurrentScreen;
+
+ public TestLoader(double delay)
+ {
+ this.delay = delay;
+ }
+
+ protected override void LogoArriving(OsuLogo logo, bool resuming)
+ {
+ Logo = logo;
+ base.LogoArriving(logo, resuming);
+ }
+
+ protected override OsuScreen CreateLoadableScreen() => screen = new TestScreen();
+ protected override ShaderPrecompiler CreateShaderPrecompiler() => new TestShaderPrecompiler(delay);
+
+ private class TestShaderPrecompiler : ShaderPrecompiler
+ {
+ private readonly double delay;
+ private double startTime;
+
+ public TestShaderPrecompiler(double delay)
+ {
+ this.delay = delay;
+ }
+
+ protected override void LoadComplete()
+ {
+ base.LoadComplete();
+ startTime = Time.Current;
+ }
+
+ protected override bool AllLoaded => Time.Current > startTime + delay;
+ }
+
+ private class TestScreen : OsuScreen
+ {
+ public TestScreen()
+ {
+ Child = new Box
+ {
+ RelativeSizeAxes = Axes.Both,
+ Colour = Color4.DarkSlateGray,
+ Alpha = 0,
+ };
+ }
+
+ protected override void LogoArriving(OsuLogo logo, bool resuming)
+ {
+ base.LogoArriving(logo, resuming);
+ Child.FadeInFromZero(200);
+ }
+ }
+ }
+ }
+}
diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj
index 057c2c2de1..532915100b 100644
--- a/osu.Game.Tests/osu.Game.Tests.csproj
+++ b/osu.Game.Tests/osu.Game.Tests.csproj
@@ -2,7 +2,7 @@
WinExe
- netcoreapp2.0;net471
+ netcoreapp2.1;net471
diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs
index efc0279aa0..806bcc4132 100644
--- a/osu.Game/Beatmaps/BeatmapManager.cs
+++ b/osu.Game/Beatmaps/BeatmapManager.cs
@@ -170,7 +170,7 @@ namespace osu.Game.Beatmaps
{
if (error is OperationCanceledException) return;
- downloadNotification.State = ProgressNotificationState.Completed;
+ downloadNotification.State = ProgressNotificationState.Cancelled;
Logger.Error(error, "Beatmap download failed!");
currentDownloads.Remove(request);
};
diff --git a/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs b/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs
index a70caf0207..8f985306e3 100644
--- a/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs
+++ b/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs
@@ -36,6 +36,11 @@ namespace osu.Game.Beatmaps
///
public bool HasVideo { get; set; }
+ ///
+ /// Whether or not this beatmap set has a storyboard.
+ ///
+ public bool HasStoryboard { get; set; }
+
///
/// The different sizes of cover art for this beatmap set.
///
diff --git a/osu.Game/Online/API/APIRequest.cs b/osu.Game/Online/API/APIRequest.cs
index 9af142b9e8..dfd181b98a 100644
--- a/osu.Game/Online/API/APIRequest.cs
+++ b/osu.Game/Online/API/APIRequest.cs
@@ -73,6 +73,7 @@ namespace osu.Game.Online.API
throw new TimeoutException(@"API request timeout hit");
WebRequest = CreateWebRequest();
+ WebRequest.Failed += Fail;
WebRequest.AllowRetryOnTimeout = false;
WebRequest.AddHeader("Authorization", $"Bearer {api.AccessToken}");
diff --git a/osu.Game/Online/API/Requests/APIResponseBeatmapSet.cs b/osu.Game/Online/API/Requests/APIResponseBeatmapSet.cs
index 2661303652..44c1216959 100644
--- a/osu.Game/Online/API/Requests/APIResponseBeatmapSet.cs
+++ b/osu.Game/Online/API/Requests/APIResponseBeatmapSet.cs
@@ -30,6 +30,9 @@ namespace osu.Game.Online.API.Requests
[JsonProperty(@"video")]
private bool hasVideo { get; set; }
+ [JsonProperty(@"storyboard")]
+ private bool hasStoryboard { get; set; }
+
[JsonProperty(@"status")]
private BeatmapSetOnlineStatus status { get; set; }
@@ -65,6 +68,7 @@ namespace osu.Game.Online.API.Requests
BPM = bpm,
Status = status,
HasVideo = hasVideo,
+ HasStoryboard = hasStoryboard,
Submitted = submitted,
Ranked = ranked,
LastUpdated = lastUpdated,
diff --git a/osu.Game/Online/Multiplayer/Room.cs b/osu.Game/Online/Multiplayer/Room.cs
index ae3fb5ec6e..b076afbcdb 100644
--- a/osu.Game/Online/Multiplayer/Room.cs
+++ b/osu.Game/Online/Multiplayer/Room.cs
@@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd .
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
+using System.Collections.Generic;
using osu.Framework.Configuration;
using osu.Game.Beatmaps;
using osu.Game.Users;
@@ -16,6 +17,6 @@ namespace osu.Game.Online.Multiplayer
public Bindable Type = new Bindable();
public Bindable Beatmap = new Bindable();
public Bindable MaxParticipants = new Bindable();
- public Bindable Participants = new Bindable();
+ public Bindable> Participants = new Bindable>();
}
}
diff --git a/osu.Game/Overlays/Direct/DirectGridPanel.cs b/osu.Game/Overlays/Direct/DirectGridPanel.cs
index 9715615d14..ed4630a8e7 100644
--- a/osu.Game/Overlays/Direct/DirectGridPanel.cs
+++ b/osu.Game/Overlays/Direct/DirectGridPanel.cs
@@ -149,7 +149,7 @@ namespace osu.Game.Overlays.Direct
{
new OsuSpriteText
{
- Text = $"from {SetInfo.Metadata.Source}",
+ Text = $"{SetInfo.Metadata.Source}",
TextSize = 14,
Shadow = false,
Colour = colours.Gray5,
@@ -195,18 +195,18 @@ namespace osu.Game.Overlays.Direct
new Statistic(FontAwesome.fa_heart, SetInfo.OnlineInfo?.FavouriteCount ?? 0),
},
},
- playButton = new PlayButton(SetInfo)
- {
- Margin = new MarginPadding { Top = 5, Left = 10 },
- Size = new Vector2(30),
- Alpha = 0,
- },
statusContainer = new FillFlowContainer
{
AutoSizeAxes = Axes.Both,
Margin = new MarginPadding { Top = 5, Left = 5 },
Spacing = new Vector2(5),
},
+ playButton = new PlayButton(SetInfo)
+ {
+ Margin = new MarginPadding { Top = 5, Left = 10 },
+ Size = new Vector2(30),
+ Alpha = 0,
+ },
});
if (SetInfo.OnlineInfo?.HasVideo ?? false)
@@ -214,24 +214,31 @@ namespace osu.Game.Overlays.Direct
statusContainer.Add(new IconPill(FontAwesome.fa_film));
}
+ if (SetInfo.OnlineInfo?.HasStoryboard ?? false)
+ {
+ statusContainer.Add(new IconPill(FontAwesome.fa_image));
+ }
+
statusContainer.Add(new BeatmapSetOnlineStatusPill(12, new MarginPadding { Horizontal = 10, Vertical = 5 })
{
Status = SetInfo.OnlineInfo?.Status ?? BeatmapSetOnlineStatus.None,
});
+
+ PreviewPlaying.ValueChanged += _ => updateStatusContainer();
}
protected override bool OnHover(InputState state)
{
- statusContainer.FadeOut(120, Easing.InOutQuint);
-
+ updateStatusContainer();
return base.OnHover(state);
}
protected override void OnHoverLost(InputState state)
{
base.OnHoverLost(state);
-
- statusContainer.FadeIn(120, Easing.InOutQuint);
+ updateStatusContainer();
}
+
+ private void updateStatusContainer() => statusContainer.FadeTo(IsHovered || PreviewPlaying ? 0 : 1, 120, Easing.InOutQuint);
}
}
diff --git a/osu.Game/Overlays/Direct/PlayButton.cs b/osu.Game/Overlays/Direct/PlayButton.cs
index 4913b11ae1..131083c6ff 100644
--- a/osu.Game/Overlays/Direct/PlayButton.cs
+++ b/osu.Game/Overlays/Direct/PlayButton.cs
@@ -126,7 +126,7 @@ namespace osu.Game.Overlays.Direct
return;
}
- icon.Icon = playing ? FontAwesome.fa_pause : FontAwesome.fa_play;
+ icon.Icon = playing ? FontAwesome.fa_stop : FontAwesome.fa_play;
icon.FadeColour(playing || IsHovered ? hoverColour : Color4.White, 120, Easing.InOutQuint);
if (playing)
diff --git a/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs b/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs
index 7406a9ec4f..ffe1560627 100644
--- a/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs
+++ b/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs
@@ -180,7 +180,7 @@ namespace osu.Game.Overlays.KeyBinding
return true;
}
- protected override bool OnWheel(InputState state)
+ protected override bool OnScroll(InputState state)
{
if (HasFocus)
{
@@ -192,7 +192,7 @@ namespace osu.Game.Overlays.KeyBinding
}
}
- return base.OnWheel(state);
+ return base.OnScroll(state);
}
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs
index 1847b63658..8d267f48e9 100644
--- a/osu.Game/Rulesets/RulesetStore.cs
+++ b/osu.Game/Rulesets/RulesetStore.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
+using osu.Framework.Logging;
using osu.Game.Database;
namespace osu.Game.Rulesets
@@ -114,8 +115,9 @@ namespace osu.Game.Rulesets
var assembly = Assembly.LoadFrom(file);
loaded_assemblies[assembly] = assembly.GetTypes().First(t => t.IsPublic && t.IsSubclassOf(typeof(Ruleset)));
}
- catch (Exception)
+ catch (Exception e)
{
+ Logger.Error(e, "Failed to load ruleset");
}
}
}
diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs
index be08fffc77..b71d3aee18 100644
--- a/osu.Game/Screens/Edit/Editor.cs
+++ b/osu.Game/Screens/Edit/Editor.cs
@@ -182,9 +182,9 @@ namespace osu.Game.Screens.Edit
LoadComponentAsync(currentScreen, screenContainer.Add);
}
- protected override bool OnWheel(InputState state)
+ protected override bool OnScroll(InputState state)
{
- if (state.Mouse.WheelDelta > 0)
+ if (state.Mouse.ScrollDelta.X + state.Mouse.ScrollDelta.Y > 0)
clock.SeekBackward(true);
else
clock.SeekForward(true);
diff --git a/osu.Game/Screens/Edit/Screens/Compose/Timeline/ScrollingTimelineContainer.cs b/osu.Game/Screens/Edit/Screens/Compose/Timeline/ScrollingTimelineContainer.cs
index 83aa86ba61..2902e74e00 100644
--- a/osu.Game/Screens/Edit/Screens/Compose/Timeline/ScrollingTimelineContainer.cs
+++ b/osu.Game/Screens/Edit/Screens/Compose/Timeline/ScrollingTimelineContainer.cs
@@ -123,15 +123,15 @@ namespace osu.Game.Screens.Edit.Screens.Compose.Timeline
///
private float? localZoomTarget;
- protected override bool OnWheel(InputState state)
+ protected override bool OnScroll(InputState state)
{
if (!state.Keyboard.ControlPressed)
- return base.OnWheel(state);
+ return base.OnScroll(state);
relativeContentZoomTarget = Content.ToLocalSpace(state.Mouse.NativeState.Position).X / Content.DrawSize.X;
localZoomTarget = ToLocalSpace(state.Mouse.NativeState.Position).X;
- Zoom += state.Mouse.WheelDelta;
+ Zoom += state.Mouse.ScrollDelta.Y;
return true;
}
diff --git a/osu.Game/Screens/Loader.cs b/osu.Game/Screens/Loader.cs
index fb5c5ca84b..c3b3e747fd 100644
--- a/osu.Game/Screens/Loader.cs
+++ b/osu.Game/Screens/Loader.cs
@@ -1,7 +1,6 @@
// Copyright (c) 2007-2018 ppy Pty Ltd .
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
-using System;
using System.Collections.Generic;
using System.Linq;
using osu.Framework.Allocation;
@@ -30,43 +29,48 @@ namespace osu.Game.Screens
{
base.LogoArriving(logo, resuming);
+ logo.BeatMatching = false;
logo.Triangles = false;
logo.Origin = Anchor.BottomRight;
logo.Anchor = Anchor.BottomRight;
logo.Position = new Vector2(-40);
logo.Scale = new Vector2(0.2f);
- logo.FadeInFromZero(5000, Easing.OutQuint);
- }
-
- private OsuScreen loadScreen;
- private ShaderPrecompiler precompiler;
-
- protected override void OnEntering(Screen last)
- {
- base.OnEntering(last);
-
- LoadComponentAsync(precompiler = new ShaderPrecompiler(loadIfReady), Add);
- LoadComponentAsync(loadScreen = showDisclaimer ? (OsuScreen)new Disclaimer() : new Intro(), s => loadIfReady());
- }
-
- private void loadIfReady()
- {
- if (ChildScreen == loadScreen) return;
-
- if (loadScreen.LoadState != LoadState.Ready)
- return;
-
- if (!precompiler.FinishedCompiling)
- return;
-
- Push(loadScreen);
+ logo.Delay(500).FadeInFromZero(1000, Easing.OutQuint);
}
protected override void LogoSuspending(OsuLogo logo)
{
base.LogoSuspending(logo);
- logo.FadeOut(100);
+ logo.FadeOut(logo.Alpha * 400);
+ }
+
+ private OsuScreen loadableScreen;
+ private ShaderPrecompiler precompiler;
+
+ protected virtual OsuScreen CreateLoadableScreen() => showDisclaimer ? (OsuScreen)new Disclaimer() : new Intro();
+
+ protected virtual ShaderPrecompiler CreateShaderPrecompiler() => new ShaderPrecompiler();
+
+ protected override void OnEntering(Screen last)
+ {
+ base.OnEntering(last);
+
+ LoadComponentAsync(precompiler = CreateShaderPrecompiler(), Add);
+ LoadComponentAsync(loadableScreen = CreateLoadableScreen());
+
+ checkIfLoaded();
+ }
+
+ private void checkIfLoaded()
+ {
+ if (loadableScreen.LoadState != LoadState.Ready || !precompiler.FinishedCompiling)
+ {
+ Schedule(checkIfLoaded);
+ return;
+ }
+
+ Push(loadableScreen);
}
[BackgroundDependencyLoader]
@@ -80,16 +84,10 @@ namespace osu.Game.Screens
///
public class ShaderPrecompiler : Drawable
{
- private readonly Action onLoaded;
private readonly List loadTargets = new List();
public bool FinishedCompiling { get; private set; }
- public ShaderPrecompiler(Action onLoaded)
- {
- this.onLoaded = onLoaded;
- }
-
[BackgroundDependencyLoader]
private void load(ShaderManager manager)
{
@@ -103,16 +101,17 @@ namespace osu.Game.Screens
loadTargets.Add(manager.Load(VertexShaderDescriptor.TEXTURE_3, FragmentShaderDescriptor.TEXTURE));
}
+ protected virtual bool AllLoaded => loadTargets.All(s => s.Loaded);
+
protected override void Update()
{
base.Update();
// if our target is null we are done.
- if (loadTargets.All(s => s.Loaded))
+ if (AllLoaded)
{
FinishedCompiling = true;
Expire();
- onLoaded?.Invoke();
}
}
}
diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs
index c174e2d470..5aca184d24 100644
--- a/osu.Game/Screens/Menu/Intro.cs
+++ b/osu.Game/Screens/Menu/Intro.cs
@@ -79,31 +79,6 @@ namespace osu.Game.Screens.Menu
seeya = audio.Sample.Get(@"seeya");
}
- protected override void OnEntering(Screen last)
- {
- base.OnEntering(last);
-
- Game.Beatmap.Value = beatmap;
-
- if (menuVoice)
- welcome.Play();
-
- Scheduler.AddDelayed(delegate
- {
- // Only start the current track if it is the menu music. A beatmap's track is started when entering the Main Manu.
- if (menuMusic)
- track.Start();
-
- LoadComponentAsync(mainMenu = new MainMenu());
-
- Scheduler.AddDelayed(delegate
- {
- DidLoadMenu = true;
- Push(mainMenu);
- }, delay_step_one);
- }, delay_step_two);
- }
-
private const double delay_step_one = 2300;
private const double delay_step_two = 600;
@@ -113,6 +88,29 @@ namespace osu.Game.Screens.Menu
{
base.LogoArriving(logo, resuming);
+ if (!resuming)
+ {
+ Game.Beatmap.Value = beatmap;
+
+ if (menuVoice)
+ welcome.Play();
+
+ Scheduler.AddDelayed(delegate
+ {
+ // Only start the current track if it is the menu music. A beatmap's track is started when entering the Main Manu.
+ if (menuMusic)
+ track.Start();
+
+ LoadComponentAsync(mainMenu = new MainMenu());
+
+ Scheduler.AddDelayed(delegate
+ {
+ DidLoadMenu = true;
+ Push(mainMenu);
+ }, delay_step_one);
+ }, delay_step_two);
+ }
+
logo.RelativePositionAxes = Axes.Both;
logo.Colour = Color4.White;
logo.Ripple = false;
diff --git a/osu.Game/Screens/Menu/MenuSideFlashes.cs b/osu.Game/Screens/Menu/MenuSideFlashes.cs
index fae3e72552..c321c98b24 100644
--- a/osu.Game/Screens/Menu/MenuSideFlashes.cs
+++ b/osu.Game/Screens/Menu/MenuSideFlashes.cs
@@ -24,8 +24,8 @@ namespace osu.Game.Screens.Menu
private readonly Bindable beatmap = new Bindable();
- private readonly Box leftBox;
- private readonly Box rightBox;
+ private Box leftBox;
+ private Box rightBox;
private const float amplitude_dead_zone = 0.25f;
private const float alpha_multiplier = (1 - amplitude_dead_zone) / 0.55f;
@@ -42,27 +42,6 @@ namespace osu.Game.Screens.Menu
RelativeSizeAxes = Axes.Both;
Anchor = Anchor.Centre;
Origin = Anchor.Centre;
- Children = new Drawable[]
- {
- leftBox = new Box
- {
- Anchor = Anchor.CentreLeft,
- Origin = Anchor.CentreLeft,
- RelativeSizeAxes = Axes.Y,
- Width = box_width,
- Alpha = 0,
- Blending = BlendingMode.Additive,
- },
- rightBox = new Box
- {
- Anchor = Anchor.CentreRight,
- Origin = Anchor.CentreRight,
- RelativeSizeAxes = Axes.Y,
- Width = box_width,
- Alpha = 0,
- Blending = BlendingMode.Additive,
- }
- };
}
[BackgroundDependencyLoader]
@@ -72,10 +51,34 @@ namespace osu.Game.Screens.Menu
// linear colour looks better in this case, so let's use it for now.
Color4 gradientDark = colours.Blue.Opacity(0).ToLinear();
- Color4 gradientLight = colours.Blue.Opacity(0.3f).ToLinear();
+ Color4 gradientLight = colours.Blue.Opacity(0.6f).ToLinear();
- leftBox.Colour = ColourInfo.GradientHorizontal(gradientLight, gradientDark);
- rightBox.Colour = ColourInfo.GradientHorizontal(gradientDark, gradientLight);
+ Children = new Drawable[]
+ {
+ leftBox = new Box
+ {
+ Anchor = Anchor.CentreLeft,
+ Origin = Anchor.CentreLeft,
+ RelativeSizeAxes = Axes.Y,
+ Width = box_width * 2,
+ // align off-screen to make sure our edges don't become visible during parallax.
+ X = -box_width,
+ Alpha = 0,
+ Blending = BlendingMode.Additive,
+ Colour = ColourInfo.GradientHorizontal(gradientLight, gradientDark)
+ },
+ rightBox = new Box
+ {
+ Anchor = Anchor.CentreRight,
+ Origin = Anchor.CentreRight,
+ RelativeSizeAxes = Axes.Y,
+ Width = box_width * 2,
+ X = box_width,
+ Alpha = 0,
+ Blending = BlendingMode.Additive,
+ Colour = ColourInfo.GradientHorizontal(gradientDark, gradientLight)
+ }
+ };
}
protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, TrackAmplitudes amplitudes)
diff --git a/osu.Game/Screens/Menu/OsuLogo.cs b/osu.Game/Screens/Menu/OsuLogo.cs
index 42a8dbd5da..16482b0e48 100644
--- a/osu.Game/Screens/Menu/OsuLogo.cs
+++ b/osu.Game/Screens/Menu/OsuLogo.cs
@@ -64,6 +64,8 @@ namespace osu.Game.Screens.Menu
set { colourAndTriangles.FadeTo(value ? 1 : 0, transition_length, Easing.OutQuint); }
}
+ public bool BeatMatching = true;
+
public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => logoContainer.ReceiveMouseInputAt(screenSpacePos);
public bool Ripple
@@ -264,6 +266,8 @@ namespace osu.Game.Screens.Menu
{
base.OnNewBeat(beatIndex, timingPoint, effectPoint, amplitudes);
+ if (!BeatMatching) return;
+
lastBeatIndex = beatIndex;
var beatLength = timingPoint.BeatLength;
diff --git a/osu.Game/Screens/Multi/Components/DrawableRoom.cs b/osu.Game/Screens/Multi/Components/DrawableRoom.cs
index d31019a259..54bd0ae7cc 100644
--- a/osu.Game/Screens/Multi/Components/DrawableRoom.cs
+++ b/osu.Game/Screens/Multi/Components/DrawableRoom.cs
@@ -41,7 +41,7 @@ namespace osu.Game.Screens.Multi.Components
private readonly Bindable statusBind = new Bindable();
private readonly Bindable typeBind = new Bindable();
private readonly Bindable beatmapBind = new Bindable();
- private readonly Bindable participantsBind = new Bindable();
+ private readonly Bindable> participantsBind = new Bindable>();
public readonly Room Room;
diff --git a/osu.Game/Screens/Multi/Components/ParticipantCount.cs b/osu.Game/Screens/Multi/Components/ParticipantCount.cs
index e47a529ff8..e7183cbd92 100644
--- a/osu.Game/Screens/Multi/Components/ParticipantCount.cs
+++ b/osu.Game/Screens/Multi/Components/ParticipantCount.cs
@@ -12,28 +12,23 @@ namespace osu.Game.Screens.Multi.Components
private const float text_size = 30;
private const float transition_duration = 100;
- private readonly OsuSpriteText count, slash, max;
+ private readonly OsuSpriteText count, slash, maxText;
public int Count
{
set => count.Text = value.ToString();
}
+ private int? max;
public int? Max
{
+ get => max;
set
{
- if (value == null)
- {
- slash.FadeOut(transition_duration);
- max.FadeOut(transition_duration);
- }
- else
- {
- slash.FadeIn(transition_duration);
- max.Text = value.ToString();
- max.FadeIn(transition_duration);
- }
+ if (value == max) return;
+ max = value;
+
+ updateMax();
}
}
@@ -56,12 +51,29 @@ namespace osu.Game.Screens.Multi.Components
TextSize = text_size,
Font = @"Exo2.0-Light"
},
- max = new OsuSpriteText
+ maxText = new OsuSpriteText
{
TextSize = text_size,
Font = @"Exo2.0-Light"
},
};
+
+ updateMax();
+ }
+
+ private void updateMax()
+ {
+ if (Max == null)
+ {
+ slash.FadeOut(transition_duration);
+ maxText.FadeOut(transition_duration);
+ }
+ else
+ {
+ slash.FadeIn(transition_duration);
+ maxText.Text = Max.ToString();
+ maxText.FadeIn(transition_duration);
+ }
}
}
}
diff --git a/osu.Game/Screens/Multi/Components/RoomInspector.cs b/osu.Game/Screens/Multi/Components/RoomInspector.cs
index 14f4feab05..22bca1efc7 100644
--- a/osu.Game/Screens/Multi/Components/RoomInspector.cs
+++ b/osu.Game/Screens/Multi/Components/RoomInspector.cs
@@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd .
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
+using System.Collections.Generic;
using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Configuration;
@@ -33,7 +34,7 @@ namespace osu.Game.Screens.Multi.Components
private readonly Bindable typeBind = new Bindable();
private readonly Bindable beatmapBind = new Bindable();
private readonly Bindable maxParticipantsBind = new Bindable();
- private readonly Bindable participantsBind = new Bindable();
+ private readonly Bindable> participantsBind = new Bindable>();
private OsuColour colours;
private Box statusStrip;
@@ -214,7 +215,7 @@ namespace osu.Game.Screens.Multi.Components
participantsBind.ValueChanged += p =>
{
- participantCount.Count = p.Length;
+ participantCount.Count = p.Count();
participantInfo.Participants = p;
participantsFlow.ChildrenEnumerable = p.Select(u => new UserTile(u));
};
diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs
index db9807b9ab..7f68e5144b 100644
--- a/osu.Game/Screens/OsuScreen.cs
+++ b/osu.Game/Screens/OsuScreen.cs
@@ -225,6 +225,7 @@ namespace osu.Game.Screens
logo.Anchor = Anchor.TopLeft;
logo.Origin = Anchor.Centre;
logo.RelativePositionAxes = Axes.None;
+ logo.BeatMatching = true;
logo.Triangles = true;
logo.Ripple = true;
}
diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index 9985a24cab..c93e4b7b40 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -364,7 +364,7 @@ namespace osu.Game.Screens.Play
Background?.FadeTo(1f, fade_out_duration);
}
- protected override bool OnWheel(InputState state) => mouseWheelDisabled.Value && !pauseContainer.IsPaused;
+ protected override bool OnScroll(InputState state) => mouseWheelDisabled.Value && !pauseContainer.IsPaused;
private void initializeStoryboard(bool asyncLoad)
{
diff --git a/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs b/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs
index 0ffcdf94a6..cff3eca895 100644
--- a/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs
+++ b/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs
@@ -50,11 +50,11 @@ namespace osu.Game.Screens.Play.PlayerSettings
content.ResizeHeightTo(0, transition_duration, Easing.OutQuint);
}
- button.FadeColour(expanded ? buttonActiveColour : Color4.White, 200, Easing.OutQuint);
+ updateExpanded();
}
}
- private Color4 buttonActiveColour;
+ private Color4 expandedColour;
protected PlayerSettingsGroup()
{
@@ -130,9 +130,13 @@ namespace osu.Game.Screens.Play.PlayerSettings
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
- button.Colour = buttonActiveColour = colours.Yellow;
+ expandedColour = colours.Yellow;
+
+ updateExpanded();
}
+ private void updateExpanded() => button.FadeColour(expanded ? expandedColour : Color4.White, 200, Easing.InOutQuint);
+
protected override Container Content => content;
protected override bool OnHover(InputState state) => true;
diff --git a/osu.Game/Screens/Play/SongProgressInfo.cs b/osu.Game/Screens/Play/SongProgressInfo.cs
index b79c212ade..3156a646db 100644
--- a/osu.Game/Screens/Play/SongProgressInfo.cs
+++ b/osu.Game/Screens/Play/SongProgressInfo.cs
@@ -92,6 +92,6 @@ namespace osu.Game.Screens.Play
}
}
- private string formatTime(TimeSpan timeSpan) => $"{(timeSpan < TimeSpan.Zero ? "-" : "")}{timeSpan.Duration().TotalMinutes:N0}:{timeSpan.Duration().Seconds:D2}";
+ private string formatTime(TimeSpan timeSpan) => $"{(timeSpan < TimeSpan.Zero ? "-" : "")}{Math.Floor(timeSpan.Duration().TotalMinutes)}:{timeSpan.Duration().Seconds:D2}";
}
}
diff --git a/osu.Game/Tests/Visual/EditorClockTestCase.cs b/osu.Game/Tests/Visual/EditorClockTestCase.cs
index 85d3684530..1ce7023be0 100644
--- a/osu.Game/Tests/Visual/EditorClockTestCase.cs
+++ b/osu.Game/Tests/Visual/EditorClockTestCase.cs
@@ -59,9 +59,9 @@ namespace osu.Game.Tests.Visual
Clock.ProcessFrame();
}
- protected override bool OnWheel(InputState state)
+ protected override bool OnScroll(InputState state)
{
- if (state.Mouse.WheelDelta > 0)
+ if (state.Mouse.ScrollDelta.Y > 0)
Clock.SeekBackward(true);
else
Clock.SeekForward(true);