mirror of
https://github.com/osukey/osukey.git
synced 2025-08-08 00:53:56 +09:00
Merge branch 'master' into UserDimLogic
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@ -11,8 +11,9 @@
|
|||||||
*.userprefs
|
*.userprefs
|
||||||
|
|
||||||
### Cake ###
|
### Cake ###
|
||||||
tools/*
|
tools/**
|
||||||
!tools/cakebuild.csproj
|
build/tools/**
|
||||||
|
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
bin/[Dd]ebug/
|
bin/[Dd]ebug/
|
||||||
|
14
.vscode/launch.json
vendored
14
.vscode/launch.json
vendored
@ -68,6 +68,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"console": "internalConsole"
|
"console": "internalConsole"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cake: Debug Script",
|
||||||
|
"type": "coreclr",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceRoot}/build/tools/Cake.CoreCLR/0.30.0/Cake.dll",
|
||||||
|
"args": [
|
||||||
|
"${workspaceRoot}/build/build.cake",
|
||||||
|
"--debug",
|
||||||
|
"--verbosity=diagnostic"
|
||||||
|
],
|
||||||
|
"cwd": "${workspaceRoot}/build",
|
||||||
|
"stopAtEntry": true,
|
||||||
|
"externalConsole": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
13
build.ps1
13
build.ps1
@ -41,27 +41,28 @@ Param(
|
|||||||
[switch]$ShowDescription,
|
[switch]$ShowDescription,
|
||||||
[Alias("WhatIf", "Noop")]
|
[Alias("WhatIf", "Noop")]
|
||||||
[switch]$DryRun,
|
[switch]$DryRun,
|
||||||
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
|
[Parameter(Position = 0, Mandatory = $false, ValueFromRemainingArguments = $true)]
|
||||||
[string[]]$ScriptArgs
|
[string[]]$ScriptArgs
|
||||||
)
|
)
|
||||||
|
|
||||||
Write-Host "Preparing to run build script..."
|
Write-Host "Preparing to run build script..."
|
||||||
|
|
||||||
# Determine the script root for resolving other paths.
|
# Determine the script root for resolving other paths.
|
||||||
if(!$PSScriptRoot){
|
if(!$PSScriptRoot) {
|
||||||
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
|
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
|
||||||
}
|
}
|
||||||
|
|
||||||
# Resolve the paths for resources used for debugging.
|
# Resolve the paths for resources used for debugging.
|
||||||
$TOOLS_DIR = Join-Path $PSScriptRoot "tools"
|
$BUILD_DIR = Join-Path $PSScriptRoot "build"
|
||||||
$CAKE_CSPROJ = Join-Path $TOOLS_DIR "cakebuild.csproj"
|
$TOOLS_DIR = Join-Path $BUILD_DIR "tools"
|
||||||
|
$CAKE_CSPROJ = Join-Path $BUILD_DIR "cakebuild.csproj"
|
||||||
|
|
||||||
# Install the required tools locally.
|
# Install the required tools locally.
|
||||||
Write-Host "Restoring cake tools..."
|
Write-Host "Restoring cake tools..."
|
||||||
Invoke-Expression "dotnet restore `"$CAKE_CSPROJ`" --packages `"$TOOLS_DIR`"" | Out-Null
|
Invoke-Expression "dotnet restore `"$CAKE_CSPROJ`" --packages `"$TOOLS_DIR`"" | Out-Null
|
||||||
|
|
||||||
# Find the Cake executable
|
# Find the Cake executable
|
||||||
$CAKE_EXECUTABLE = (Get-ChildItem -Path ./tools/cake.coreclr/ -Filter Cake.dll -Recurse).FullName
|
$CAKE_EXECUTABLE = (Get-ChildItem -Path "$TOOLS_DIR/cake.coreclr/" -Filter Cake.dll -Recurse).FullName
|
||||||
|
|
||||||
# Build Cake arguments
|
# Build Cake arguments
|
||||||
$cakeArguments = @("$Script");
|
$cakeArguments = @("$Script");
|
||||||
@ -75,5 +76,7 @@ $cakeArguments += $ScriptArgs
|
|||||||
|
|
||||||
# Start Cake
|
# Start Cake
|
||||||
Write-Host "Running build script..."
|
Write-Host "Running build script..."
|
||||||
|
Push-Location -Path $BUILD_DIR
|
||||||
Invoke-Expression "dotnet `"$CAKE_EXECUTABLE`" $cakeArguments"
|
Invoke-Expression "dotnet `"$CAKE_EXECUTABLE`" $cakeArguments"
|
||||||
|
Pop-Location
|
||||||
exit $LASTEXITCODE
|
exit $LASTEXITCODE
|
||||||
|
3
build.sh
3
build.sh
@ -6,12 +6,13 @@
|
|||||||
|
|
||||||
echo "Preparing to run build script..."
|
echo "Preparing to run build script..."
|
||||||
|
|
||||||
|
cd build
|
||||||
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||||
TOOLS_DIR=$SCRIPT_DIR/tools
|
TOOLS_DIR=$SCRIPT_DIR/tools
|
||||||
CAKE_BINARY_PATH=$TOOLS_DIR/"cake.coreclr"
|
CAKE_BINARY_PATH=$TOOLS_DIR/"cake.coreclr"
|
||||||
|
|
||||||
SCRIPT="build.cake"
|
SCRIPT="build.cake"
|
||||||
CAKE_CSPROJ=$TOOLS_DIR/"cakebuild.csproj"
|
CAKE_CSPROJ=$SCRIPT_DIR/"cakebuild.csproj"
|
||||||
|
|
||||||
# Parse arguments.
|
# Parse arguments.
|
||||||
CAKE_ARGUMENTS=()
|
CAKE_ARGUMENTS=()
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#addin "nuget:?package=CodeFileSanity&version=0.0.21"
|
#addin "nuget:?package=CodeFileSanity&version=0.0.21"
|
||||||
#addin "nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2018.2.2"
|
#addin "nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2018.2.2"
|
||||||
#tool "nuget:?package=NVika.MSBuild&version=1.0.1"
|
#tool "nuget:?package=NVika.MSBuild&version=1.0.1"
|
||||||
|
var nVikaToolPath = GetFiles("./tools/NVika.MSBuild.*/tools/NVika.exe").First();
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// ARGUMENTS
|
// ARGUMENTS
|
||||||
@ -9,30 +10,24 @@
|
|||||||
var target = Argument("target", "Build");
|
var target = Argument("target", "Build");
|
||||||
var configuration = Argument("configuration", "Release");
|
var configuration = Argument("configuration", "Release");
|
||||||
|
|
||||||
var osuSolution = new FilePath("./osu.sln");
|
var rootDirectory = new DirectoryPath("..");
|
||||||
|
var solution = rootDirectory.CombineWithFilePath("osu.sln");
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// TASKS
|
// TASKS
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Task("Restore")
|
|
||||||
.Does(() => {
|
|
||||||
DotNetCoreRestore(osuSolution.FullPath);
|
|
||||||
});
|
|
||||||
|
|
||||||
Task("Compile")
|
Task("Compile")
|
||||||
.IsDependentOn("Restore")
|
|
||||||
.Does(() => {
|
.Does(() => {
|
||||||
DotNetCoreBuild(osuSolution.FullPath, new DotNetCoreBuildSettings {
|
DotNetCoreBuild(solution.FullPath, new DotNetCoreBuildSettings {
|
||||||
Configuration = configuration,
|
Configuration = configuration,
|
||||||
NoRestore = true,
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
Task("Test")
|
Task("Test")
|
||||||
.IsDependentOn("Compile")
|
.IsDependentOn("Compile")
|
||||||
.Does(() => {
|
.Does(() => {
|
||||||
var testAssemblies = GetFiles("**/*.Tests/bin/**/*.Tests.dll");
|
var testAssemblies = GetFiles(rootDirectory + "/**/*.Tests/bin/**/*.Tests.dll");
|
||||||
|
|
||||||
DotNetCoreVSTest(testAssemblies, new DotNetCoreVSTestSettings {
|
DotNetCoreVSTest(testAssemblies, new DotNetCoreVSTestSettings {
|
||||||
Logger = AppVeyor.IsRunningOnAppVeyor ? "Appveyor" : $"trx",
|
Logger = AppVeyor.IsRunningOnAppVeyor ? "Appveyor" : $"trx",
|
||||||
@ -46,9 +41,7 @@ Task("InspectCode")
|
|||||||
.WithCriteria(IsRunningOnWindows())
|
.WithCriteria(IsRunningOnWindows())
|
||||||
.IsDependentOn("Compile")
|
.IsDependentOn("Compile")
|
||||||
.Does(() => {
|
.Does(() => {
|
||||||
var nVikaToolPath = GetFiles("./tools/NVika.MSBuild.*/tools/NVika.exe").First();
|
InspectCode(solution, new InspectCodeSettings {
|
||||||
|
|
||||||
InspectCode(osuSolution, new InspectCodeSettings {
|
|
||||||
CachesHome = "inspectcode",
|
CachesHome = "inspectcode",
|
||||||
OutputFile = "inspectcodereport.xml",
|
OutputFile = "inspectcodereport.xml",
|
||||||
});
|
});
|
||||||
@ -59,7 +52,7 @@ Task("InspectCode")
|
|||||||
Task("CodeFileSanity")
|
Task("CodeFileSanity")
|
||||||
.Does(() => {
|
.Does(() => {
|
||||||
ValidateCodeSanity(new ValidateCodeSanitySettings {
|
ValidateCodeSanity(new ValidateCodeSanitySettings {
|
||||||
RootDirectory = ".",
|
RootDirectory = rootDirectory.FullPath,
|
||||||
IsAppveyorBuild = AppVeyor.IsRunningOnAppVeyor
|
IsAppveyorBuild = AppVeyor.IsRunningOnAppVeyor
|
||||||
});
|
});
|
||||||
});
|
});
|
@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Catch.Difficulty;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
using osu.Game.Tests.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Tests
|
||||||
|
{
|
||||||
|
public class CatchDifficultyCalculatorTest : DifficultyCalculatorTest
|
||||||
|
{
|
||||||
|
protected override string ResourceAssembly => "osu.Game.Rulesets.Catch";
|
||||||
|
|
||||||
|
[TestCase(3.8664391043534758, "diffcalc-test")]
|
||||||
|
public void Test(double expected, string name)
|
||||||
|
=> base.Test(expected, name);
|
||||||
|
|
||||||
|
protected override DifficultyCalculator CreateDifficultyCalculator(WorkingBeatmap beatmap) => new CatchDifficultyCalculator(new CatchRuleset(), beatmap);
|
||||||
|
|
||||||
|
protected override Ruleset CreateRuleset() => new CatchRuleset();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,138 @@
|
|||||||
|
osu file format v14
|
||||||
|
|
||||||
|
[General]
|
||||||
|
StackLeniency: 0.3
|
||||||
|
Mode: 2
|
||||||
|
|
||||||
|
[Difficulty]
|
||||||
|
CircleSize:4
|
||||||
|
OverallDifficulty:7
|
||||||
|
ApproachRate:8.3
|
||||||
|
SliderMultiplier:1.6
|
||||||
|
SliderTickRate:1
|
||||||
|
|
||||||
|
[TimingPoints]
|
||||||
|
500,500,4,2,1,50,1,0
|
||||||
|
34500,-50,4,2,1,50,0,0
|
||||||
|
|
||||||
|
[HitObjects]
|
||||||
|
// fruits spaced 1/1 beat apart
|
||||||
|
32,128,0,5,0,0:0:0:0:
|
||||||
|
96,128,500,1,0,0:0:0:0:
|
||||||
|
160,128,1000,1,0,0:0:0:0:
|
||||||
|
224,128,1500,1,0,0:0:0:0:
|
||||||
|
288,128,2000,1,0,0:0:0:0:
|
||||||
|
352,128,2500,1,0,0:0:0:0:
|
||||||
|
416,128,3000,1,0,0:0:0:0:
|
||||||
|
480,128,3500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// fruits spaced 1/2 beat apart
|
||||||
|
32,160,4500,1,0,0:0:0:0:
|
||||||
|
64,160,4750,1,0,0:0:0:0:
|
||||||
|
96,160,5000,1,0,0:0:0:0:
|
||||||
|
128,160,5250,1,0,0:0:0:0:
|
||||||
|
160,160,5500,1,0,0:0:0:0:
|
||||||
|
192,160,5750,1,0,0:0:0:0:
|
||||||
|
224,160,6000,1,0,0:0:0:0:
|
||||||
|
256,160,6250,1,0,0:0:0:0:
|
||||||
|
288,160,6500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// fruits spaced 1/4 beat apart
|
||||||
|
96,128,7500,1,0,0:0:0:0:
|
||||||
|
128,128,7625,1,0,0:0:0:0:
|
||||||
|
160,128,7750,1,0,0:0:0:0:
|
||||||
|
192,128,7875,1,0,0:0:0:0:
|
||||||
|
224,128,8000,1,0,0:0:0:0:
|
||||||
|
256,128,8125,1,0,0:0:0:0:
|
||||||
|
288,128,8250,1,0,0:0:0:0:
|
||||||
|
320,128,8375,1,0,0:0:0:0:
|
||||||
|
352,128,8500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// fruit hyperdashes, spaced 1/2 beat apart
|
||||||
|
32,160,9500,1,0,0:0:0:0:
|
||||||
|
480,160,9750,1,0,0:0:0:0:
|
||||||
|
32,160,10000,1,0,0:0:0:0:
|
||||||
|
480,160,10250,1,0,0:0:0:0:
|
||||||
|
32,160,10500,1,0,0:0:0:0:
|
||||||
|
480,160,10750,1,0,0:0:0:0:
|
||||||
|
32,160,11000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// fruit hyperdashes, spaced 1/4 beat apart
|
||||||
|
32,192,12000,1,0,0:0:0:0:
|
||||||
|
480,192,12125,1,0,0:0:0:0:
|
||||||
|
32,192,12250,1,0,0:0:0:0:
|
||||||
|
480,192,12375,1,0,0:0:0:0:
|
||||||
|
32,192,12500,1,0,0:0:0:0:
|
||||||
|
480,192,12625,1,0,0:0:0:0:
|
||||||
|
32,192,12750,1,0,0:0:0:0:
|
||||||
|
480,192,12875,1,0,0:0:0:0:
|
||||||
|
32,192,13000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// stream + hyperdash + stream, spaced 1/4 beat apart
|
||||||
|
32,192,14000,1,0,0:0:0:0:
|
||||||
|
64,192,14125,1,0,0:0:0:0:
|
||||||
|
96,192,14250,1,0,0:0:0:0:
|
||||||
|
128,192,14375,1,0,0:0:0:0:
|
||||||
|
480,192,14500,1,0,0:0:0:0:
|
||||||
|
448,192,14625,1,0,0:0:0:0:
|
||||||
|
416,192,14750,1,0,0:0:0:0:
|
||||||
|
384,192,14875,1,0,0:0:0:0:
|
||||||
|
32,192,15000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// basic sliders
|
||||||
|
32,192,16000,2,0,L|192:192,1,160
|
||||||
|
224,192,17000,2,0,L|384:192,1,160
|
||||||
|
416,192,17875,2,0,L|480:192,1,40
|
||||||
|
|
||||||
|
// slider hyperdashes, spaced 1/4 beat apart
|
||||||
|
32,192,19000,2,0,L|128:192,1,80
|
||||||
|
480,192,19375,2,0,L|384:192,1,80
|
||||||
|
352,192,19750,2,0,L|256:192,1,80
|
||||||
|
0,192,20125,2,0,L|128:192,1,120
|
||||||
|
|
||||||
|
// stream + slider hyperdashes, spaced 1/4 beat apart
|
||||||
|
32,192,21500,1,0,0:0:0:0:
|
||||||
|
64,192,21625,1,0,0:0:0:0:
|
||||||
|
96,192,21750,1,0,0:0:0:0:
|
||||||
|
512,192,21875,2,0,L|320:192,1,160
|
||||||
|
320,192,22500,1,0,0:0:0:0:
|
||||||
|
288,192,22625,1,0,0:0:0:0:
|
||||||
|
256,192,22750,1,0,0:0:0:0:
|
||||||
|
0,192,22875,2,0,L|64:192,1,40
|
||||||
|
|
||||||
|
// streams, spaced 1/4 beat apart
|
||||||
|
64,192,24000,1,0,0:0:0:0:
|
||||||
|
160,192,24125,1,0,0:0:0:0:
|
||||||
|
64,192,24250,1,0,0:0:0:0:
|
||||||
|
160,192,24375,1,0,0:0:0:0:
|
||||||
|
64,192,24500,1,0,0:0:0:0:
|
||||||
|
160,192,24625,1,0,0:0:0:0:
|
||||||
|
64,192,24750,1,0,0:0:0:0:
|
||||||
|
160,192,24875,1,0,0:0:0:0:
|
||||||
|
64,192,25000,1,0,0:0:0:0:
|
||||||
|
160,192,25125,1,0,0:0:0:0:
|
||||||
|
64,192,25250,1,0,0:0:0:0:
|
||||||
|
160,192,25375,1,0,0:0:0:0:
|
||||||
|
64,192,25500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// stream + spinner combo, spaced 1/4 beat apart
|
||||||
|
256,192,26500,12,0,27000,0:0:0:0:
|
||||||
|
128,192,27250,5,0,0:0:0:0:
|
||||||
|
128,192,27375,1,0,0:0:0:0:
|
||||||
|
160,192,27500,1,0,0:0:0:0:
|
||||||
|
192,192,27625,1,0,0:0:0:0:
|
||||||
|
256,192,27750,12,0,28500,0:0:0:0:
|
||||||
|
192,192,28625,5,0,0:0:0:0:
|
||||||
|
224,192,28750,1,0,0:0:0:0:
|
||||||
|
256,192,28875,1,0,0:0:0:0:
|
||||||
|
256,192,29000,1,0,0:0:0:0:
|
||||||
|
256,192,29125,12,0,29500,0:0:0:0:
|
||||||
|
|
||||||
|
// long slow slider
|
||||||
|
0,192,30500,6,0,B|480:192|480:192|0:192,2,960
|
||||||
|
|
||||||
|
// long fast slider
|
||||||
|
0,192,37500,6,0,B|480:192|480:192|0:192,2,960
|
||||||
|
|
||||||
|
// long hyperdash slider
|
||||||
|
0,192,41500,2,0,P|544:192|544:192,5,480
|
@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
using osu.Game.Rulesets.Mania.Difficulty;
|
||||||
|
using osu.Game.Tests.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Mania.Tests
|
||||||
|
{
|
||||||
|
public class ManiaDifficultyCalculatorTest : DifficultyCalculatorTest
|
||||||
|
{
|
||||||
|
protected override string ResourceAssembly => "osu.Game.Rulesets.Mania";
|
||||||
|
|
||||||
|
[TestCase(2.2676066895468976, "diffcalc-test")]
|
||||||
|
public void Test(double expected, string name)
|
||||||
|
=> base.Test(expected, name);
|
||||||
|
|
||||||
|
protected override DifficultyCalculator CreateDifficultyCalculator(WorkingBeatmap beatmap) => new ManiaDifficultyCalculator(new ManiaRuleset(), beatmap);
|
||||||
|
|
||||||
|
protected override Ruleset CreateRuleset() => new ManiaRuleset();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,180 @@
|
|||||||
|
osu file format v14
|
||||||
|
|
||||||
|
[General]
|
||||||
|
Mode: 3
|
||||||
|
|
||||||
|
[Difficulty]
|
||||||
|
CircleSize:4
|
||||||
|
OverallDifficulty:7
|
||||||
|
ApproachRate:8.3
|
||||||
|
SliderMultiplier:1.6
|
||||||
|
SliderTickRate:1
|
||||||
|
|
||||||
|
[TimingPoints]
|
||||||
|
500,500,4,2,1,50,1,0
|
||||||
|
37500,-50,4,2,1,50,0,0
|
||||||
|
41500,-25,4,2,1,50,0,0
|
||||||
|
|
||||||
|
[HitObjects]
|
||||||
|
// jacks spaced 1/1 beat apart
|
||||||
|
64,192,0,1,0,0:0:0:0:
|
||||||
|
64,192,500,1,0,0:0:0:0:
|
||||||
|
64,192,1000,1,0,0:0:0:0:
|
||||||
|
64,192,1500,1,0,0:0:0:0:
|
||||||
|
64,192,2000,1,0,0:0:0:0:
|
||||||
|
64,192,2500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// jacks spaced 1/2 beat apart
|
||||||
|
64,192,3500,1,0,0:0:0:0:
|
||||||
|
64,192,3750,1,0,0:0:0:0:
|
||||||
|
64,192,4000,1,0,0:0:0:0:
|
||||||
|
64,192,4250,1,0,0:0:0:0:
|
||||||
|
64,192,4500,1,0,0:0:0:0:
|
||||||
|
64,192,4750,1,0,0:0:0:0:
|
||||||
|
64,192,5000,1,0,0:0:0:0:
|
||||||
|
64,192,6000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// doubles jacks spaced 1/2 beat apart
|
||||||
|
192,192,6000,1,0,0:0:0:0:
|
||||||
|
64,192,6250,1,0,0:0:0:0:
|
||||||
|
192,192,6250,1,0,0:0:0:0:
|
||||||
|
64,192,6500,1,0,0:0:0:0:
|
||||||
|
192,192,6500,1,0,0:0:0:0:
|
||||||
|
64,192,6750,1,0,0:0:0:0:
|
||||||
|
192,192,6750,1,0,0:0:0:0:
|
||||||
|
64,192,7000,1,0,0:0:0:0:
|
||||||
|
192,192,7000,1,0,0:0:0:0:
|
||||||
|
64,192,7250,1,0,0:0:0:0:
|
||||||
|
192,192,7250,1,0,0:0:0:0:
|
||||||
|
64,192,7500,1,0,0:0:0:0:
|
||||||
|
192,192,7500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// trill spaced 1/2 beat apart
|
||||||
|
64,192,8500,1,0,0:0:0:0:
|
||||||
|
192,192,8750,1,0,0:0:0:0:
|
||||||
|
64,192,9000,1,0,0:0:0:0:
|
||||||
|
192,192,9250,1,0,0:0:0:0:
|
||||||
|
64,192,9500,1,0,0:0:0:0:
|
||||||
|
192,192,9750,1,0,0:0:0:0:
|
||||||
|
64,192,10000,1,0,0:0:0:0:
|
||||||
|
192,192,10250,1,0,0:0:0:0:
|
||||||
|
64,192,10500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// stair spaced 1/4 apart
|
||||||
|
64,192,11500,1,0,0:0:0:0:
|
||||||
|
192,192,11625,1,0,0:0:0:0:
|
||||||
|
320,192,11750,1,0,0:0:0:0:
|
||||||
|
448,192,11875,1,0,0:0:0:0:
|
||||||
|
320,192,12000,1,0,0:0:0:0:
|
||||||
|
192,192,12125,1,0,0:0:0:0:
|
||||||
|
64,192,12250,1,0,0:0:0:0:
|
||||||
|
192,192,12375,1,0,0:0:0:0:
|
||||||
|
320,192,12500,1,0,0:0:0:0:
|
||||||
|
448,192,12625,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// jumpstreams?
|
||||||
|
64,192,13500,1,0,0:0:0:0:
|
||||||
|
192,192,13625,1,0,0:0:0:0:
|
||||||
|
320,192,13750,1,0,0:0:0:0:
|
||||||
|
448,192,13875,1,0,0:0:0:0:
|
||||||
|
320,192,14000,1,0,0:0:0:0:
|
||||||
|
192,192,14000,1,0,0:0:0:0:
|
||||||
|
64,192,14125,1,0,0:0:0:0:
|
||||||
|
192,192,14250,1,0,0:0:0:0:
|
||||||
|
320,192,14250,1,0,0:0:0:0:
|
||||||
|
448,192,14250,1,0,0:0:0:0:
|
||||||
|
64,192,14375,1,0,0:0:0:0:
|
||||||
|
64,192,14500,1,0,0:0:0:0:
|
||||||
|
320,192,14625,1,0,0:0:0:0:
|
||||||
|
448,192,14625,1,0,0:0:0:0:
|
||||||
|
192,192,14625,1,0,0:0:0:0:
|
||||||
|
192,192,14750,1,0,0:0:0:0:
|
||||||
|
64,192,14875,1,0,0:0:0:0:
|
||||||
|
192,192,15000,1,0,0:0:0:0:
|
||||||
|
320,192,15125,1,0,0:0:0:0:
|
||||||
|
448,192,15125,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// double... jumps?
|
||||||
|
64,192,16000,1,0,0:0:0:0:
|
||||||
|
64,192,16250,1,0,0:0:0:0:
|
||||||
|
192,192,16250,1,0,0:0:0:0:
|
||||||
|
192,192,16500,1,0,0:0:0:0:
|
||||||
|
320,192,16500,1,0,0:0:0:0:
|
||||||
|
320,192,16750,1,0,0:0:0:0:
|
||||||
|
448,192,16750,1,0,0:0:0:0:
|
||||||
|
448,192,17000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// notes alongside hold
|
||||||
|
64,192,18000,128,0,18500:0:0:0:0:
|
||||||
|
192,192,18000,1,0,0:0:0:0:
|
||||||
|
192,192,18250,1,0,0:0:0:0:
|
||||||
|
192,192,18500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// notes overlapping hold
|
||||||
|
64,192,19500,1,0,0:0:0:0:
|
||||||
|
192,192,19625,128,0,20875:0:0:0:0:
|
||||||
|
64,192,19750,1,0,0:0:0:0:
|
||||||
|
64,192,20000,1,0,0:0:0:0:
|
||||||
|
64,192,20250,1,0,0:0:0:0:
|
||||||
|
64,192,20500,1,0,0:0:0:0:
|
||||||
|
64,192,20750,1,0,0:0:0:0:
|
||||||
|
64,192,21000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// simultaneous holds
|
||||||
|
64,192,22000,128,0,23000:0:0:0:0:
|
||||||
|
192,192,22000,128,0,23000:0:0:0:0:
|
||||||
|
320,192,22000,128,0,23000:0:0:0:0:
|
||||||
|
448,192,22000,128,0,23000:0:0:0:0:
|
||||||
|
|
||||||
|
// hold stairs
|
||||||
|
64,192,24500,128,0,25500:0:0:0:0:
|
||||||
|
192,192,24625,128,0,25375:0:0:0:0:
|
||||||
|
320,192,24750,128,0,25250:0:0:0:0:
|
||||||
|
448,192,24875,128,0,25125:0:0:0:0:
|
||||||
|
448,192,25375,128,0,26375:0:0:0:0:
|
||||||
|
320,192,25500,128,0,26250:0:0:0:0:
|
||||||
|
192,192,25625,128,0,26125:0:0:0:0:
|
||||||
|
64,192,25750,128,0,26000:0:0:0:0:
|
||||||
|
|
||||||
|
// quads
|
||||||
|
64,192,26500,1,0,0:0:0:0:
|
||||||
|
64,192,27500,1,0,0:0:0:0:
|
||||||
|
192,192,27500,1,0,0:0:0:0:
|
||||||
|
320,192,27500,1,0,0:0:0:0:
|
||||||
|
448,192,27500,1,0,0:0:0:0:
|
||||||
|
64,192,27750,1,0,0:0:0:0:
|
||||||
|
192,192,27750,1,0,0:0:0:0:
|
||||||
|
320,192,27750,1,0,0:0:0:0:
|
||||||
|
448,192,27750,1,0,0:0:0:0:
|
||||||
|
64,192,28000,1,0,0:0:0:0:
|
||||||
|
192,192,28000,1,0,0:0:0:0:
|
||||||
|
320,192,28000,1,0,0:0:0:0:
|
||||||
|
448,192,28000,1,0,0:0:0:0:
|
||||||
|
64,192,28250,1,0,0:0:0:0:
|
||||||
|
192,192,28250,1,0,0:0:0:0:
|
||||||
|
320,192,28250,1,0,0:0:0:0:
|
||||||
|
448,192,28250,1,0,0:0:0:0:
|
||||||
|
64,192,28500,1,0,0:0:0:0:
|
||||||
|
192,192,28500,1,0,0:0:0:0:
|
||||||
|
320,192,28500,1,0,0:0:0:0:
|
||||||
|
448,192,28500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// double-trills
|
||||||
|
64,192,29500,1,0,0:0:0:0:
|
||||||
|
192,192,29500,1,0,0:0:0:0:
|
||||||
|
320,192,29625,1,0,0:0:0:0:
|
||||||
|
448,192,29625,1,0,0:0:0:0:
|
||||||
|
64,192,29750,1,0,0:0:0:0:
|
||||||
|
192,192,29750,1,0,0:0:0:0:
|
||||||
|
320,192,29875,1,0,0:0:0:0:
|
||||||
|
448,192,29875,1,0,0:0:0:0:
|
||||||
|
64,192,30000,1,0,0:0:0:0:
|
||||||
|
192,192,30000,1,0,0:0:0:0:
|
||||||
|
320,192,30125,1,0,0:0:0:0:
|
||||||
|
448,192,30125,1,0,0:0:0:0:
|
||||||
|
64,192,30250,1,0,0:0:0:0:
|
||||||
|
192,192,30250,1,0,0:0:0:0:
|
||||||
|
320,192,30375,1,0,0:0:0:0:
|
||||||
|
448,192,30375,1,0,0:0:0:0:
|
||||||
|
64,192,30500,1,0,0:0:0:0:
|
||||||
|
192,192,30500,1,0,0:0:0:0:
|
25
osu.Game.Rulesets.Osu.Tests/OsuDifficultyCalculatorTest.cs
Normal file
25
osu.Game.Rulesets.Osu.Tests/OsuDifficultyCalculatorTest.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
using osu.Game.Rulesets.Osu.Difficulty;
|
||||||
|
using osu.Game.Tests.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class OsuDifficultyCalculatorTest : DifficultyCalculatorTest
|
||||||
|
{
|
||||||
|
protected override string ResourceAssembly => "osu.Game.Rulesets.Osu";
|
||||||
|
|
||||||
|
[TestCase(6.931145117263422, "diffcalc-test")]
|
||||||
|
public void Test(double expected, string name)
|
||||||
|
=> base.Test(expected, name);
|
||||||
|
|
||||||
|
protected override DifficultyCalculator CreateDifficultyCalculator(WorkingBeatmap beatmap) => new OsuDifficultyCalculator(new OsuRuleset(), beatmap);
|
||||||
|
|
||||||
|
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
||||||
|
}
|
||||||
|
}
|
36
osu.Game.Rulesets.Osu.Tests/TestCaseHitCircleLongCombo.cs
Normal file
36
osu.Game.Rulesets.Osu.Tests/TestCaseHitCircleLongCombo.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class TestCaseHitCircleLongCombo : Game.Tests.Visual.TestCasePlayer
|
||||||
|
{
|
||||||
|
public TestCaseHitCircleLongCombo()
|
||||||
|
: base(new OsuRuleset())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override IBeatmap CreateBeatmap(Ruleset ruleset)
|
||||||
|
{
|
||||||
|
var beatmap = new Beatmap
|
||||||
|
{
|
||||||
|
BeatmapInfo = new BeatmapInfo
|
||||||
|
{
|
||||||
|
BaseDifficulty = new BeatmapDifficulty { CircleSize = 6 },
|
||||||
|
Ruleset = ruleset.RulesetInfo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < 512; i++)
|
||||||
|
beatmap.HitObjects.Add(new HitCircle { Position = new Vector2(256, 192), StartTime = i * 100 });
|
||||||
|
|
||||||
|
return beatmap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
74
osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs
Normal file
74
osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
|
using osu.Game.Rulesets.Osu.Objects.Drawables;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Mods
|
||||||
|
{
|
||||||
|
internal class OsuModGrow : Mod, IApplicableToDrawableHitObjects
|
||||||
|
{
|
||||||
|
public override string Name => "Grow";
|
||||||
|
|
||||||
|
public override string Acronym => "GR";
|
||||||
|
|
||||||
|
public override FontAwesome Icon => FontAwesome.fa_arrows_v;
|
||||||
|
|
||||||
|
public override ModType Type => ModType.Fun;
|
||||||
|
|
||||||
|
public override string Description => "Hit them at the right size!";
|
||||||
|
|
||||||
|
public override double ScoreMultiplier => 1;
|
||||||
|
|
||||||
|
public void ApplyToDrawableHitObjects(IEnumerable<DrawableHitObject> drawables)
|
||||||
|
{
|
||||||
|
foreach (var drawable in drawables)
|
||||||
|
{
|
||||||
|
switch (drawable)
|
||||||
|
{
|
||||||
|
case DrawableSpinner _:
|
||||||
|
continue;
|
||||||
|
default:
|
||||||
|
drawable.ApplyCustomUpdateState += ApplyCustomState;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state)
|
||||||
|
{
|
||||||
|
var h = (OsuHitObject)drawable.HitObject;
|
||||||
|
|
||||||
|
// apply grow effect
|
||||||
|
switch (drawable)
|
||||||
|
{
|
||||||
|
case DrawableSliderHead _:
|
||||||
|
case DrawableSliderTail _:
|
||||||
|
// special cases we should *not* be scaling.
|
||||||
|
break;
|
||||||
|
case DrawableSlider _:
|
||||||
|
case DrawableHitCircle _:
|
||||||
|
{
|
||||||
|
using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true))
|
||||||
|
drawable.ScaleTo(0.5f).Then().ScaleTo(1, h.TimePreempt, Easing.OutSine);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove approach circles
|
||||||
|
switch (drawable)
|
||||||
|
{
|
||||||
|
case DrawableHitCircle circle:
|
||||||
|
// we don't want to see the approach circle
|
||||||
|
using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true))
|
||||||
|
circle.ApproachCircle.Hide();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ using System;
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Configuration;
|
using osu.Framework.Configuration;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Rulesets.Objects.Drawables;
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces;
|
using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
@ -27,40 +28,58 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
private readonly IBindable<int> stackHeightBindable = new Bindable<int>();
|
private readonly IBindable<int> stackHeightBindable = new Bindable<int>();
|
||||||
private readonly IBindable<float> scaleBindable = new Bindable<float>();
|
private readonly IBindable<float> scaleBindable = new Bindable<float>();
|
||||||
|
|
||||||
|
private readonly Container explodeContainer;
|
||||||
|
|
||||||
|
private readonly Container scaleContainer;
|
||||||
|
|
||||||
public DrawableHitCircle(HitCircle h)
|
public DrawableHitCircle(HitCircle h)
|
||||||
: base(h)
|
: base(h)
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
Position = HitObject.StackedPosition;
|
Position = HitObject.StackedPosition;
|
||||||
Scale = new Vector2(h.Scale);
|
|
||||||
|
|
||||||
InternalChildren = new Drawable[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
glow = new GlowPiece(),
|
scaleContainer = new Container
|
||||||
circle = new CirclePiece
|
|
||||||
{
|
{
|
||||||
Hit = () =>
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Child = explodeContainer = new Container
|
||||||
{
|
{
|
||||||
if (AllJudged)
|
RelativeSizeAxes = Axes.Both,
|
||||||
return false;
|
Origin = Anchor.Centre,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
glow = new GlowPiece(),
|
||||||
|
circle = new CirclePiece
|
||||||
|
{
|
||||||
|
Hit = () =>
|
||||||
|
{
|
||||||
|
if (AllJudged)
|
||||||
|
return false;
|
||||||
|
|
||||||
UpdateResult(true);
|
UpdateResult(true);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
number = new NumberPiece
|
||||||
|
{
|
||||||
|
Text = (HitObject.IndexInCurrentCombo + 1).ToString(),
|
||||||
|
},
|
||||||
|
ring = new RingPiece(),
|
||||||
|
flash = new FlashPiece(),
|
||||||
|
explode = new ExplodePiece(),
|
||||||
|
ApproachCircle = new ApproachCircle
|
||||||
|
{
|
||||||
|
Alpha = 0,
|
||||||
|
Scale = new Vector2(4),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
number = new NumberPiece
|
|
||||||
{
|
|
||||||
Text = (HitObject.IndexInCurrentCombo + 1).ToString(),
|
|
||||||
},
|
|
||||||
ring = new RingPiece(),
|
|
||||||
flash = new FlashPiece(),
|
|
||||||
explode = new ExplodePiece(),
|
|
||||||
ApproachCircle = new ApproachCircle
|
|
||||||
{
|
|
||||||
Alpha = 0,
|
|
||||||
Scale = new Vector2(4),
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//may not be so correct
|
//may not be so correct
|
||||||
@ -72,7 +91,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
{
|
{
|
||||||
positionBindable.BindValueChanged(_ => Position = HitObject.StackedPosition);
|
positionBindable.BindValueChanged(_ => Position = HitObject.StackedPosition);
|
||||||
stackHeightBindable.BindValueChanged(_ => Position = HitObject.StackedPosition);
|
stackHeightBindable.BindValueChanged(_ => Position = HitObject.StackedPosition);
|
||||||
scaleBindable.BindValueChanged(v => Scale = new Vector2(v));
|
scaleBindable.BindValueChanged(v => scaleContainer.Scale = new Vector2(v), true);
|
||||||
|
|
||||||
positionBindable.BindTo(HitObject.PositionBindable);
|
positionBindable.BindTo(HitObject.PositionBindable);
|
||||||
stackHeightBindable.BindTo(HitObject.StackHeightBindable);
|
stackHeightBindable.BindTo(HitObject.StackHeightBindable);
|
||||||
@ -156,8 +175,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
circle.FadeOut();
|
circle.FadeOut();
|
||||||
number.FadeOut();
|
number.FadeOut();
|
||||||
|
|
||||||
this.FadeOut(800)
|
this.FadeOut(800);
|
||||||
.ScaleTo(Scale * 1.5f, 400, Easing.OutQuad);
|
explodeContainer.ScaleTo(1.5f, 400, Easing.OutQuad);
|
||||||
}
|
}
|
||||||
|
|
||||||
Expire();
|
Expire();
|
||||||
|
@ -124,6 +124,7 @@ namespace osu.Game.Rulesets.Osu
|
|||||||
return new Mod[] {
|
return new Mod[] {
|
||||||
new OsuModTransform(),
|
new OsuModTransform(),
|
||||||
new OsuModWiggle(),
|
new OsuModWiggle(),
|
||||||
|
new OsuModGrow()
|
||||||
};
|
};
|
||||||
default:
|
default:
|
||||||
return new Mod[] { };
|
return new Mod[] { };
|
||||||
|
@ -0,0 +1,179 @@
|
|||||||
|
osu file format v14
|
||||||
|
|
||||||
|
[General]
|
||||||
|
StackLeniency: 0.3
|
||||||
|
Mode: 0
|
||||||
|
|
||||||
|
[Difficulty]
|
||||||
|
CircleSize:4
|
||||||
|
OverallDifficulty:7
|
||||||
|
ApproachRate:8.3
|
||||||
|
SliderMultiplier:1.6
|
||||||
|
SliderTickRate:1
|
||||||
|
|
||||||
|
[TimingPoints]
|
||||||
|
500,500,4,2,1,50,1,0
|
||||||
|
62500,-500,4,2,1,50,0,0
|
||||||
|
71000,-100,4,2,1,50,0,0
|
||||||
|
|
||||||
|
[HitObjects]
|
||||||
|
// Circles spaced 1 beat apart, with increasing jump distance
|
||||||
|
126,112,500,5,0,0:0:0:0:
|
||||||
|
130,155,1000,1,0,0:0:0:0:
|
||||||
|
131,269,1500,1,0,0:0:0:0:
|
||||||
|
341,269,2000,1,0,0:0:0:0:
|
||||||
|
113,95,2500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Circles spaced 1/2 beat apart, with increasing jump distance
|
||||||
|
108,104,3500,5,0,0:0:0:0:
|
||||||
|
110,145,3750,1,0,0:0:0:0:
|
||||||
|
115,262,4000,1,0,0:0:0:0:
|
||||||
|
285,265,4250,1,0,0:0:0:0:
|
||||||
|
458,48,4500,1,0,0:0:0:0:
|
||||||
|
35,199,4750,1,0,0:0:0:0:
|
||||||
|
251,340,5000,1,0,0:0:0:0:
|
||||||
|
20,352,5250,1,0,0:0:0:0:
|
||||||
|
426,62,5500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Circles spaced 1/4 beat apart, with increasing jump distances
|
||||||
|
211,138,6500,5,0,0:0:0:0:
|
||||||
|
99,256,6625,1,0,0:0:0:0:
|
||||||
|
68,129,6750,1,0,0:0:0:0:
|
||||||
|
371,340,6875,1,0,0:0:0:0:
|
||||||
|
241,219,7000,1,0,0:0:0:0:
|
||||||
|
252,148,7125,1,0,0:0:0:0:
|
||||||
|
434,97,7250,1,0,0:0:0:0:
|
||||||
|
40,38,7375,1,0,0:0:0:0:
|
||||||
|
114,334,7500,1,0,0:0:0:0:
|
||||||
|
301,19,7625,1,0,0:0:0:0:
|
||||||
|
441,241,7750,1,0,0:0:0:0:
|
||||||
|
121,91,7875,1,0,0:0:0:0:
|
||||||
|
270,384,8000,1,0,0:0:0:0:
|
||||||
|
488,92,8125,1,0,0:0:0:0:
|
||||||
|
332,82,8250,1,0,0:0:0:0:
|
||||||
|
108,240,8375,1,0,0:0:0:0:
|
||||||
|
281,268,8500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Constant spaced circles spaced 1/2 beat apart, small jump distances, changing angles
|
||||||
|
252,191,9500,5,0,0:0:0:0:
|
||||||
|
356,191,9750,1,0,0:0:0:0:
|
||||||
|
311,268,10000,1,0,0:0:0:0:
|
||||||
|
190,270,10250,1,0,0:0:0:0:
|
||||||
|
107,199,10500,1,0,0:0:0:0:
|
||||||
|
172,105,10750,1,0,0:0:0:0:
|
||||||
|
297,102,11000,1,0,0:0:0:0:
|
||||||
|
373,178,11250,1,0,0:0:0:0:
|
||||||
|
252,195,11500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Constant spaced circles spaced 1/2 beat apart, large jump distances, changing angles
|
||||||
|
140,187,12500,5,0,0:0:0:0:
|
||||||
|
451,331,12750,1,0,0:0:0:0:
|
||||||
|
46,338,13000,1,0,0:0:0:0:
|
||||||
|
204,50,13250,1,0,0:0:0:0:
|
||||||
|
464,162,13500,1,0,0:0:0:0:
|
||||||
|
252,346,13750,1,0,0:0:0:0:
|
||||||
|
13,175,14000,1,0,0:0:0:0:
|
||||||
|
488,181,14250,1,0,0:0:0:0:
|
||||||
|
251,187,14500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Constant spaced circles spaced 1/4 beat apart, small jump distances, changing angles
|
||||||
|
188,192,15500,5,0,0:0:0:0:
|
||||||
|
298,194,15625,1,0,0:0:0:0:
|
||||||
|
317,84,15750,1,0,0:0:0:0:
|
||||||
|
185,85,15875,1,0,0:0:0:0:
|
||||||
|
77,200,16000,1,0,0:0:0:0:
|
||||||
|
184,303,16125,1,0,0:0:0:0:
|
||||||
|
295,225,16250,1,0,0:0:0:0:
|
||||||
|
300,84,16375,1,0,0:0:0:0:
|
||||||
|
144,82,16500,1,0,0:0:0:0:
|
||||||
|
141,215,16625,1,0,0:0:0:0:
|
||||||
|
314,184,16750,1,0,0:0:0:0:
|
||||||
|
188,192,16875,1,0,0:0:0:0:
|
||||||
|
188,192,17000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Constant spaced circles spaced 1/4 beat apart, large jump distances, changing angles
|
||||||
|
97,192,18000,5,0,0:0:0:0:
|
||||||
|
336,38,18125,1,0,0:0:0:0:
|
||||||
|
440,322,18250,1,0,0:0:0:0:
|
||||||
|
39,331,18375,1,0,0:0:0:0:
|
||||||
|
98,39,18500,1,0,0:0:0:0:
|
||||||
|
460,179,18625,1,0,0:0:0:0:
|
||||||
|
245,338,18750,1,0,0:0:0:0:
|
||||||
|
12,184,18875,1,0,0:0:0:0:
|
||||||
|
250,41,19000,1,0,0:0:0:0:
|
||||||
|
265,193,19125,1,0,0:0:0:0:
|
||||||
|
486,22,19250,1,0,0:0:0:0:
|
||||||
|
411,205,19375,1,0,0:0:0:0:
|
||||||
|
107,198,19500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// Short sliders spaced 1 beat apart
|
||||||
|
28,108,20500,2,0,L|196:107,1,160
|
||||||
|
25,177,21500,2,0,L|193:176,1,160
|
||||||
|
26,308,22500,2,0,L|194:307,1,160
|
||||||
|
320,89,23500,2,0,L|488:88,1,160
|
||||||
|
|
||||||
|
// Short sliders spaced 1/2 beat apart
|
||||||
|
28,108,25000,6,0,L|196:107,1,160
|
||||||
|
27,173,25750,2,0,L|195:172,1,160
|
||||||
|
25,292,26500,2,0,L|193:291,1,160
|
||||||
|
340,213,27250,2,0,L|508:212,1,160
|
||||||
|
21,44,28000,2,0,L|189:43,1,160
|
||||||
|
|
||||||
|
// Short sliders spaced 1/4 beat apart
|
||||||
|
28,108,29500,6,0,L|196:107,1,160
|
||||||
|
30,169,30125,2,0,L|198:168,1,160
|
||||||
|
35,282,30750,2,0,L|203:281,1,160
|
||||||
|
327,286,31375,2,0,L|495:285,1,160
|
||||||
|
51,61,32000,2,0,L|219:60,1,160
|
||||||
|
|
||||||
|
// Large, medium-paced slider shapes
|
||||||
|
// PerfectCurve
|
||||||
|
66,86,33500,6,0,P|246:348|427:44,1,800
|
||||||
|
66,86,36500,2,0,P|246:348|427:44,1,800
|
||||||
|
66,86,39500,2,0,P|246:348|427:44,1,800
|
||||||
|
// Linear
|
||||||
|
66,72,42500,2,0,B|419:65|419:65|66:316|66:316|426:318,1,1120
|
||||||
|
66,72,46500,2,0,B|419:65|419:65|66:316|66:316|426:318,1,1120
|
||||||
|
66,72,50500,2,0,B|419:65|419:65|66:316|66:316|426:318,1,1120
|
||||||
|
// Bezier
|
||||||
|
76,287,54500,2,0,B|440:325|138:128|470:302|500:30|130:85|66:82,1,640
|
||||||
|
76,287,57000,2,0,B|440:325|138:128|470:302|500:30|130:85|66:82,1,640
|
||||||
|
76,287,59500,2,0,B|440:325|138:128|470:302|500:30|130:85|66:82,1,640
|
||||||
|
|
||||||
|
// Large slow slider with many ticks
|
||||||
|
81,170,62500,6,0,P|263:78|168:268,1,480
|
||||||
|
|
||||||
|
// Fast slider with many repeats
|
||||||
|
102,152,71000,6,0,L|175:153,18,64
|
||||||
|
|
||||||
|
// Slider-circle combos, spaced 1/2 beat apart
|
||||||
|
106,204,75500,6,0,P|275:33|171:304,1,800
|
||||||
|
255,179,78250,1,0,0:0:0:0:
|
||||||
|
106,204,78500,2,0,P|275:33|171:304,1,800
|
||||||
|
255,179,81250,1,0,0:0:0:0:
|
||||||
|
106,204,81500,2,0,P|275:33|171:304,1,800
|
||||||
|
|
||||||
|
// Circle-spinner combos, spaced 1/2 beat apart
|
||||||
|
82,69,85000,5,0,0:0:0:0:
|
||||||
|
256,192,85250,8,0,86000,0:0:0:0:
|
||||||
|
384,189,86250,5,0,0:0:0:0:
|
||||||
|
256,192,86500,12,0,87000,0:0:0:0:
|
||||||
|
|
||||||
|
// Spinner-spinner combos, spaced 1/2 beat apart
|
||||||
|
256,192,88000,12,0,89000,0:0:0:0:
|
||||||
|
256,192,89250,12,0,90250,0:0:0:0:
|
||||||
|
256,192,90500,12,0,91500,0:0:0:0:
|
||||||
|
256,192,91750,12,0,92750,0:0:0:0:
|
||||||
|
256,192,93000,12,0,94000,0:0:0:0:
|
||||||
|
|
||||||
|
// Slider-spinner combos, spaced 1/2 beat apart
|
||||||
|
49,89,95000,6,0,L|214:87,1,160
|
||||||
|
256,192,95625,12,0,96500,0:0:0:0:
|
||||||
|
12,299,96625,6,0,L|177:297,1,160
|
||||||
|
256,192,97250,12,0,98125,0:0:0:0:
|
||||||
|
295,107,98250,6,0,L|460:105,1,160
|
||||||
|
256,192,98875,12,0,99750,0:0:0:0:
|
||||||
|
279,325,99875,6,0,L|444:323,1,160
|
||||||
|
256,192,100500,12,0,101375,0:0:0:0:
|
||||||
|
197,197,101500,6,0,L|362:195,1,160
|
||||||
|
256,192,102125,12,0,103000,0:0:0:0:
|
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
using osu.Game.Rulesets.Taiko.Difficulty;
|
||||||
|
using osu.Game.Tests.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Taiko.Tests
|
||||||
|
{
|
||||||
|
public class TaikoDifficultyCalculatorTest : DifficultyCalculatorTest
|
||||||
|
{
|
||||||
|
protected override string ResourceAssembly => "osu.Game.Rulesets.Taiko";
|
||||||
|
|
||||||
|
[TestCase(2.9811336589467095, "diffcalc-test")]
|
||||||
|
[TestCase(2.9811336589467095, "diffcalc-test-strong")]
|
||||||
|
public void Test(double expected, string name)
|
||||||
|
=> base.Test(expected, name);
|
||||||
|
|
||||||
|
protected override DifficultyCalculator CreateDifficultyCalculator(WorkingBeatmap beatmap) => new TaikoDifficultyCalculator(new TaikoRuleset(), beatmap);
|
||||||
|
|
||||||
|
protected override Ruleset CreateRuleset() => new TaikoRuleset();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,257 @@
|
|||||||
|
osu file format v14
|
||||||
|
|
||||||
|
[General]
|
||||||
|
Mode: 1
|
||||||
|
|
||||||
|
[Difficulty]
|
||||||
|
CircleSize:4
|
||||||
|
OverallDifficulty:7
|
||||||
|
ApproachRate:8.3
|
||||||
|
SliderMultiplier:1.6
|
||||||
|
SliderTickRate:1
|
||||||
|
|
||||||
|
[TimingPoints]
|
||||||
|
500,500,4,2,1,50,1,0
|
||||||
|
62500,-500,4,2,1,50,0,0
|
||||||
|
71000,-100,4,2,1,50,0,0
|
||||||
|
|
||||||
|
[HitObjects]
|
||||||
|
// Same as diffcalc-test with finishers on every note
|
||||||
|
142,122,0,5,4,0:0:0:0:
|
||||||
|
142,122,125,1,4,0:0:0:0:
|
||||||
|
142,122,250,1,4,0:0:0:0:
|
||||||
|
142,122,375,1,4,0:0:0:0:
|
||||||
|
142,122,500,1,4,0:0:0:0:
|
||||||
|
142,122,625,1,4,0:0:0:0:
|
||||||
|
142,122,750,1,4,0:0:0:0:
|
||||||
|
142,122,875,1,4,0:0:0:0:
|
||||||
|
142,122,1000,1,4,0:0:0:0:
|
||||||
|
142,122,1125,1,4,0:0:0:0:
|
||||||
|
142,122,1250,1,4,0:0:0:0:
|
||||||
|
142,122,1375,1,4,0:0:0:0:
|
||||||
|
142,122,1500,1,4,0:0:0:0:
|
||||||
|
119,106,2500,1,6,0:0:0:0:
|
||||||
|
119,106,2625,1,6,0:0:0:0:
|
||||||
|
119,106,2750,1,6,0:0:0:0:
|
||||||
|
119,106,2875,1,6,0:0:0:0:
|
||||||
|
119,106,3000,1,6,0:0:0:0:
|
||||||
|
119,106,3125,1,6,0:0:0:0:
|
||||||
|
119,106,3250,1,6,0:0:0:0:
|
||||||
|
119,106,3375,1,6,0:0:0:0:
|
||||||
|
119,106,3500,1,6,0:0:0:0:
|
||||||
|
119,106,3625,1,6,0:0:0:0:
|
||||||
|
119,106,3750,1,6,0:0:0:0:
|
||||||
|
119,106,3875,1,6,0:0:0:0:
|
||||||
|
119,106,4000,1,6,0:0:0:0:
|
||||||
|
136,90,5000,1,4,0:0:0:0:
|
||||||
|
136,90,5125,1,6,0:0:0:0:
|
||||||
|
136,90,5250,1,4,0:0:0:0:
|
||||||
|
136,90,5375,1,6,0:0:0:0:
|
||||||
|
136,90,5500,1,4,0:0:0:0:
|
||||||
|
136,90,5625,1,6,0:0:0:0:
|
||||||
|
136,90,5750,1,4,0:0:0:0:
|
||||||
|
136,90,5875,1,6,0:0:0:0:
|
||||||
|
136,90,6000,1,4,0:0:0:0:
|
||||||
|
136,90,6125,1,6,0:0:0:0:
|
||||||
|
136,90,6250,1,4,0:0:0:0:
|
||||||
|
136,90,6375,1,6,0:0:0:0:
|
||||||
|
136,90,6500,1,4,0:0:0:0:
|
||||||
|
86,113,7500,1,4,0:0:0:0:
|
||||||
|
86,113,7625,1,4,0:0:0:0:
|
||||||
|
86,113,7750,1,6,0:0:0:0:
|
||||||
|
86,113,7875,1,6,0:0:0:0:
|
||||||
|
86,113,8000,1,4,0:0:0:0:
|
||||||
|
86,113,8125,1,4,0:0:0:0:
|
||||||
|
86,113,8250,1,6,0:0:0:0:
|
||||||
|
86,113,8375,1,6,0:0:0:0:
|
||||||
|
86,113,8500,1,4,0:0:0:0:
|
||||||
|
86,113,8625,1,4,0:0:0:0:
|
||||||
|
86,113,8750,1,6,0:0:0:0:
|
||||||
|
86,113,8875,1,6,0:0:0:0:
|
||||||
|
86,113,9000,1,4,0:0:0:0:
|
||||||
|
146,90,10000,1,4,0:0:0:0:
|
||||||
|
146,90,10125,1,4,0:0:0:0:
|
||||||
|
146,90,10250,1,4,0:0:0:0:
|
||||||
|
146,90,10375,1,6,0:0:0:0:
|
||||||
|
146,90,10500,1,6,0:0:0:0:
|
||||||
|
146,90,10625,1,6,0:0:0:0:
|
||||||
|
146,90,10750,1,4,0:0:0:0:
|
||||||
|
146,90,10875,1,4,0:0:0:0:
|
||||||
|
146,90,11000,1,4,0:0:0:0:
|
||||||
|
146,90,11125,1,6,0:0:0:0:
|
||||||
|
146,90,11250,1,6,0:0:0:0:
|
||||||
|
146,90,11375,1,6,0:0:0:0:
|
||||||
|
146,90,11500,1,4,0:0:0:0:
|
||||||
|
146,90,11625,1,4,0:0:0:0:
|
||||||
|
146,90,11750,1,4,0:0:0:0:
|
||||||
|
146,90,11875,1,6,0:0:0:0:
|
||||||
|
146,90,12000,1,6,0:0:0:0:
|
||||||
|
146,90,12125,1,6,0:0:0:0:
|
||||||
|
146,90,12250,1,4,0:0:0:0:
|
||||||
|
146,90,12375,1,4,0:0:0:0:
|
||||||
|
146,90,12500,1,4,0:0:0:0:
|
||||||
|
69,99,13500,1,4,0:0:0:0:
|
||||||
|
69,99,13625,1,4,0:0:0:0:
|
||||||
|
69,99,13750,1,4,0:0:0:0:
|
||||||
|
69,99,13875,1,6,0:0:0:0:
|
||||||
|
69,99,14000,1,4,0:0:0:0:
|
||||||
|
69,99,14125,1,4,0:0:0:0:
|
||||||
|
69,99,14250,1,4,0:0:0:0:
|
||||||
|
69,99,14375,1,6,0:0:0:0:
|
||||||
|
69,99,14500,1,4,0:0:0:0:
|
||||||
|
69,99,14625,1,4,0:0:0:0:
|
||||||
|
69,99,14750,1,4,0:0:0:0:
|
||||||
|
69,99,14875,1,6,0:0:0:0:
|
||||||
|
69,99,15000,1,4,0:0:0:0:
|
||||||
|
69,99,15125,1,4,0:0:0:0:
|
||||||
|
69,99,15250,1,4,0:0:0:0:
|
||||||
|
69,99,15375,1,6,0:0:0:0:
|
||||||
|
69,99,15500,1,4,0:0:0:0:
|
||||||
|
83,89,16500,1,4,0:0:0:0:
|
||||||
|
83,89,16625,1,6,0:0:0:0:
|
||||||
|
83,89,16750,1,6,0:0:0:0:
|
||||||
|
83,89,16875,1,4,0:0:0:0:
|
||||||
|
83,89,17000,1,4,0:0:0:0:
|
||||||
|
83,89,17125,1,4,0:0:0:0:
|
||||||
|
83,89,17250,1,6,0:0:0:0:
|
||||||
|
83,89,17375,1,6,0:0:0:0:
|
||||||
|
83,89,17500,1,6,0:0:0:0:
|
||||||
|
83,89,17625,1,6,0:0:0:0:
|
||||||
|
83,89,17750,1,4,0:0:0:0:
|
||||||
|
83,89,17875,1,4,0:0:0:0:
|
||||||
|
83,89,18000,1,4,0:0:0:0:
|
||||||
|
83,89,18125,1,4,0:0:0:0:
|
||||||
|
83,89,18250,1,4,0:0:0:0:
|
||||||
|
83,89,18375,1,6,0:0:0:0:
|
||||||
|
83,89,18500,1,6,0:0:0:0:
|
||||||
|
83,89,18625,1,6,0:0:0:0:
|
||||||
|
83,89,18750,1,6,0:0:0:0:
|
||||||
|
83,89,18875,1,4,0:0:0:0:
|
||||||
|
83,89,19000,1,4,0:0:0:0:
|
||||||
|
83,89,19125,1,4,0:0:0:0:
|
||||||
|
83,89,19250,1,4,0:0:0:0:
|
||||||
|
83,89,19375,1,6,0:0:0:0:
|
||||||
|
83,89,19500,1,6,0:0:0:0:
|
||||||
|
83,89,19625,1,4,0:0:0:0:
|
||||||
|
84,122,20500,1,4,0:0:0:0:
|
||||||
|
84,122,20625,2,4,L|217:123,1,120
|
||||||
|
84,122,21125,1,4,0:0:0:0:
|
||||||
|
84,122,21250,2,4,L|217:123,1,120
|
||||||
|
84,122,21750,1,4,0:0:0:0:
|
||||||
|
84,122,21875,2,4,L|217:123,1,120
|
||||||
|
84,122,22375,1,4,0:0:0:0:
|
||||||
|
84,122,22500,2,4,L|217:123,1,120
|
||||||
|
84,122,23000,1,4,0:0:0:0:
|
||||||
|
84,122,23125,2,4,L|217:123,1,120
|
||||||
|
99,106,24500,1,4,0:0:0:0:
|
||||||
|
99,106,24625,1,4,0:0:0:0:
|
||||||
|
99,106,24750,2,4,L|194:107,1,80
|
||||||
|
99,106,25125,1,4,0:0:0:0:
|
||||||
|
99,106,25250,1,4,0:0:0:0:
|
||||||
|
99,106,25375,2,4,L|194:107,1,80
|
||||||
|
99,106,25750,1,4,0:0:0:0:
|
||||||
|
99,106,25875,1,4,0:0:0:0:
|
||||||
|
99,106,26000,2,4,L|194:107,1,80
|
||||||
|
99,106,26375,1,4,0:0:0:0:
|
||||||
|
99,106,26500,1,4,0:0:0:0:
|
||||||
|
99,106,26625,2,4,L|194:107,1,80
|
||||||
|
99,106,27000,1,4,0:0:0:0:
|
||||||
|
99,106,27125,1,4,0:0:0:0:
|
||||||
|
99,106,27250,2,4,L|194:107,1,80
|
||||||
|
121,103,28500,1,4,0:0:0:0:
|
||||||
|
121,103,28625,1,4,0:0:0:0:
|
||||||
|
121,103,28750,1,4,0:0:0:0:
|
||||||
|
121,103,28875,2,4,L|190:103,1,40
|
||||||
|
121,103,29125,1,4,0:0:0:0:
|
||||||
|
121,103,29250,1,4,0:0:0:0:
|
||||||
|
121,103,29375,1,4,0:0:0:0:
|
||||||
|
121,103,29500,2,4,L|190:103,1,40
|
||||||
|
121,103,29750,1,4,0:0:0:0:
|
||||||
|
121,103,29875,1,4,0:0:0:0:
|
||||||
|
121,103,30000,1,4,0:0:0:0:
|
||||||
|
121,103,30125,2,4,L|190:103,1,40
|
||||||
|
121,103,30375,1,4,0:0:0:0:
|
||||||
|
121,103,30500,1,4,0:0:0:0:
|
||||||
|
121,103,30625,1,4,0:0:0:0:
|
||||||
|
121,103,30750,2,4,L|190:103,1,40
|
||||||
|
121,103,31000,1,4,0:0:0:0:
|
||||||
|
121,103,31125,1,4,0:0:0:0:
|
||||||
|
121,103,31250,1,4,0:0:0:0:
|
||||||
|
121,103,31375,2,4,L|190:103,1,40
|
||||||
|
121,103,32500,1,4,0:0:0:0:
|
||||||
|
121,103,32625,1,6,0:0:0:0:
|
||||||
|
121,103,32750,1,4,0:0:0:0:
|
||||||
|
121,103,32875,2,4,L|190:103,1,40
|
||||||
|
121,103,33125,1,4,0:0:0:0:
|
||||||
|
121,103,33250,1,6,0:0:0:0:
|
||||||
|
121,103,33375,1,4,0:0:0:0:
|
||||||
|
121,103,33500,2,4,L|190:103,1,40
|
||||||
|
121,103,33750,1,4,0:0:0:0:
|
||||||
|
121,103,33875,1,6,0:0:0:0:
|
||||||
|
121,103,34000,1,4,0:0:0:0:
|
||||||
|
121,103,34125,2,4,L|190:103,1,40
|
||||||
|
121,103,34375,1,4,0:0:0:0:
|
||||||
|
121,103,34500,1,6,0:0:0:0:
|
||||||
|
121,103,34625,1,4,0:0:0:0:
|
||||||
|
121,103,34750,2,4,L|190:103,1,40
|
||||||
|
121,103,35000,1,4,0:0:0:0:
|
||||||
|
121,103,35125,1,6,0:0:0:0:
|
||||||
|
121,103,35250,1,4,0:0:0:0:
|
||||||
|
121,103,35375,2,4,L|190:103,1,40
|
||||||
|
121,103,36500,1,4,0:0:0:0:
|
||||||
|
121,103,36625,1,4,0:0:0:0:
|
||||||
|
121,103,36750,1,6,0:0:0:0:
|
||||||
|
121,103,36875,2,4,L|190:103,1,40
|
||||||
|
121,103,37125,1,4,0:0:0:0:
|
||||||
|
121,103,37250,1,4,0:0:0:0:
|
||||||
|
121,103,37375,1,6,0:0:0:0:
|
||||||
|
121,103,37500,2,4,L|190:103,1,40
|
||||||
|
121,103,37750,1,4,0:0:0:0:
|
||||||
|
121,103,37875,1,4,0:0:0:0:
|
||||||
|
121,103,38000,1,6,0:0:0:0:
|
||||||
|
121,103,38125,2,4,L|190:103,1,40
|
||||||
|
121,103,38375,1,4,0:0:0:0:
|
||||||
|
121,103,38500,1,4,0:0:0:0:
|
||||||
|
121,103,38625,1,6,0:0:0:0:
|
||||||
|
121,103,38750,2,4,L|190:103,1,40
|
||||||
|
121,103,39000,1,4,0:0:0:0:
|
||||||
|
121,103,39125,1,4,0:0:0:0:
|
||||||
|
121,103,39250,1,6,0:0:0:0:
|
||||||
|
121,103,39375,2,4,L|190:103,1,40
|
||||||
|
107,106,40500,1,4,0:0:0:0:
|
||||||
|
107,106,40625,1,4,0:0:0:0:
|
||||||
|
107,106,40750,1,6,0:0:0:0:
|
||||||
|
107,106,40875,1,6,0:0:0:0:
|
||||||
|
46,112,41000,2,4,L|214:112,1,160
|
||||||
|
107,106,41625,1,4,0:0:0:0:
|
||||||
|
107,106,41750,1,4,0:0:0:0:
|
||||||
|
107,106,41875,1,6,0:0:0:0:
|
||||||
|
107,106,42000,1,6,0:0:0:0:
|
||||||
|
46,112,42125,2,4,L|214:112,1,160
|
||||||
|
107,106,42750,1,4,0:0:0:0:
|
||||||
|
107,106,42875,1,4,0:0:0:0:
|
||||||
|
107,106,43000,1,6,0:0:0:0:
|
||||||
|
107,106,43125,1,6,0:0:0:0:
|
||||||
|
46,112,43250,2,4,L|214:112,1,160
|
||||||
|
107,106,43875,1,4,0:0:0:0:
|
||||||
|
107,106,44000,1,4,0:0:0:0:
|
||||||
|
107,106,44125,1,6,0:0:0:0:
|
||||||
|
107,106,44250,1,6,0:0:0:0:
|
||||||
|
46,112,44375,2,4,L|214:112,1,160
|
||||||
|
107,106,45000,1,4,0:0:0:0:
|
||||||
|
107,106,45125,1,4,0:0:0:0:
|
||||||
|
107,106,45250,1,6,0:0:0:0:
|
||||||
|
107,106,45375,1,6,0:0:0:0:
|
||||||
|
46,112,45500,2,4,L|214:112,1,160
|
||||||
|
256,192,47000,12,4,47500,0:0:0:0:
|
||||||
|
256,192,47625,12,4,48000,0:0:0:0:
|
||||||
|
256,192,48125,12,4,48500,0:0:0:0:
|
||||||
|
256,192,48625,12,4,49000,0:0:0:0:
|
||||||
|
256,192,50000,12,4,50500,0:0:0:0:
|
||||||
|
183,143,50625,5,4,0:0:0:0:
|
||||||
|
256,192,50750,12,4,51250,0:0:0:0:
|
||||||
|
114,106,51375,5,4,0:0:0:0:
|
||||||
|
256,192,51625,12,4,52125,0:0:0:0:
|
||||||
|
154,143,52250,5,4,0:0:0:0:
|
||||||
|
256,192,52375,12,4,52875,0:0:0:0:
|
||||||
|
116,111,53000,5,4,0:0:0:0:
|
@ -0,0 +1,285 @@
|
|||||||
|
osu file format v14
|
||||||
|
|
||||||
|
[General]
|
||||||
|
Mode: 1
|
||||||
|
|
||||||
|
[Difficulty]
|
||||||
|
CircleSize:4
|
||||||
|
OverallDifficulty:7
|
||||||
|
ApproachRate:8.3
|
||||||
|
SliderMultiplier:1.6
|
||||||
|
SliderTickRate:1
|
||||||
|
|
||||||
|
[TimingPoints]
|
||||||
|
500,500,4,2,1,50,1,0
|
||||||
|
62500,-500,4,2,1,50,0,0
|
||||||
|
71000,-100,4,2,1,50,0,0
|
||||||
|
|
||||||
|
[HitObjects]
|
||||||
|
// dd, spaced 1/4 beat apart
|
||||||
|
142,122,0,5,0,0:0:0:0:
|
||||||
|
142,122,125,1,0,0:0:0:0:
|
||||||
|
142,122,250,1,0,0:0:0:0:
|
||||||
|
142,122,375,1,0,0:0:0:0:
|
||||||
|
142,122,500,1,0,0:0:0:0:
|
||||||
|
142,122,625,1,0,0:0:0:0:
|
||||||
|
142,122,750,1,0,0:0:0:0:
|
||||||
|
142,122,875,1,0,0:0:0:0:
|
||||||
|
142,122,1000,1,0,0:0:0:0:
|
||||||
|
142,122,1125,1,0,0:0:0:0:
|
||||||
|
142,122,1250,1,0,0:0:0:0:
|
||||||
|
142,122,1375,1,0,0:0:0:0:
|
||||||
|
142,122,1500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// kk, spaced 1/4 beat apart
|
||||||
|
119,106,2500,1,2,0:0:0:0:
|
||||||
|
119,106,2625,1,2,0:0:0:0:
|
||||||
|
119,106,2750,1,2,0:0:0:0:
|
||||||
|
119,106,2875,1,2,0:0:0:0:
|
||||||
|
119,106,3000,1,2,0:0:0:0:
|
||||||
|
119,106,3125,1,2,0:0:0:0:
|
||||||
|
119,106,3250,1,2,0:0:0:0:
|
||||||
|
119,106,3375,1,2,0:0:0:0:
|
||||||
|
119,106,3500,1,2,0:0:0:0:
|
||||||
|
119,106,3625,1,2,0:0:0:0:
|
||||||
|
119,106,3750,1,2,0:0:0:0:
|
||||||
|
119,106,3875,1,2,0:0:0:0:
|
||||||
|
119,106,4000,1,2,0:0:0:0:
|
||||||
|
|
||||||
|
// dk, spaced 1/4 beat apart
|
||||||
|
136,90,5000,1,0,0:0:0:0:
|
||||||
|
136,90,5125,1,2,0:0:0:0:
|
||||||
|
136,90,5250,1,0,0:0:0:0:
|
||||||
|
136,90,5375,1,2,0:0:0:0:
|
||||||
|
136,90,5500,1,0,0:0:0:0:
|
||||||
|
136,90,5625,1,2,0:0:0:0:
|
||||||
|
136,90,5750,1,0,0:0:0:0:
|
||||||
|
136,90,5875,1,2,0:0:0:0:
|
||||||
|
136,90,6000,1,0,0:0:0:0:
|
||||||
|
136,90,6125,1,2,0:0:0:0:
|
||||||
|
136,90,6250,1,0,0:0:0:0:
|
||||||
|
136,90,6375,1,2,0:0:0:0:
|
||||||
|
136,90,6500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// ddkk, spaced 1/4 beat apart
|
||||||
|
86,113,7500,1,0,0:0:0:0:
|
||||||
|
86,113,7625,1,0,0:0:0:0:
|
||||||
|
86,113,7750,1,2,0:0:0:0:
|
||||||
|
86,113,7875,1,2,0:0:0:0:
|
||||||
|
86,113,8000,1,0,0:0:0:0:
|
||||||
|
86,113,8125,1,0,0:0:0:0:
|
||||||
|
86,113,8250,1,2,0:0:0:0:
|
||||||
|
86,113,8375,1,2,0:0:0:0:
|
||||||
|
86,113,8500,1,0,0:0:0:0:
|
||||||
|
86,113,8625,1,0,0:0:0:0:
|
||||||
|
86,113,8750,1,2,0:0:0:0:
|
||||||
|
86,113,8875,1,2,0:0:0:0:
|
||||||
|
86,113,9000,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// dddkkk, spaced 1/4 beat apart
|
||||||
|
146,90,10000,1,0,0:0:0:0:
|
||||||
|
146,90,10125,1,0,0:0:0:0:
|
||||||
|
146,90,10250,1,0,0:0:0:0:
|
||||||
|
146,90,10375,1,2,0:0:0:0:
|
||||||
|
146,90,10500,1,2,0:0:0:0:
|
||||||
|
146,90,10625,1,2,0:0:0:0:
|
||||||
|
146,90,10750,1,0,0:0:0:0:
|
||||||
|
146,90,10875,1,0,0:0:0:0:
|
||||||
|
146,90,11000,1,0,0:0:0:0:
|
||||||
|
146,90,11125,1,2,0:0:0:0:
|
||||||
|
146,90,11250,1,2,0:0:0:0:
|
||||||
|
146,90,11375,1,2,0:0:0:0:
|
||||||
|
146,90,11500,1,0,0:0:0:0:
|
||||||
|
146,90,11625,1,0,0:0:0:0:
|
||||||
|
146,90,11750,1,0,0:0:0:0:
|
||||||
|
146,90,11875,1,2,0:0:0:0:
|
||||||
|
146,90,12000,1,2,0:0:0:0:
|
||||||
|
146,90,12125,1,2,0:0:0:0:
|
||||||
|
146,90,12250,1,0,0:0:0:0:
|
||||||
|
146,90,12375,1,0,0:0:0:0:
|
||||||
|
146,90,12500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// dddk, spaced 1/4 beat apart
|
||||||
|
69,99,13500,1,0,0:0:0:0:
|
||||||
|
69,99,13625,1,0,0:0:0:0:
|
||||||
|
69,99,13750,1,0,0:0:0:0:
|
||||||
|
69,99,13875,1,2,0:0:0:0:
|
||||||
|
69,99,14000,1,0,0:0:0:0:
|
||||||
|
69,99,14125,1,0,0:0:0:0:
|
||||||
|
69,99,14250,1,0,0:0:0:0:
|
||||||
|
69,99,14375,1,2,0:0:0:0:
|
||||||
|
69,99,14500,1,0,0:0:0:0:
|
||||||
|
69,99,14625,1,0,0:0:0:0:
|
||||||
|
69,99,14750,1,0,0:0:0:0:
|
||||||
|
69,99,14875,1,2,0:0:0:0:
|
||||||
|
69,99,15000,1,0,0:0:0:0:
|
||||||
|
69,99,15125,1,0,0:0:0:0:
|
||||||
|
69,99,15250,1,0,0:0:0:0:
|
||||||
|
69,99,15375,1,2,0:0:0:0:
|
||||||
|
69,99,15500,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// arbitrary pattern, spaced 1/4 beat apart
|
||||||
|
83,89,16500,1,0,0:0:0:0:
|
||||||
|
83,89,16625,1,2,0:0:0:0:
|
||||||
|
83,89,16750,1,2,0:0:0:0:
|
||||||
|
83,89,16875,1,0,0:0:0:0:
|
||||||
|
83,89,17000,1,0,0:0:0:0:
|
||||||
|
83,89,17125,1,0,0:0:0:0:
|
||||||
|
83,89,17250,1,2,0:0:0:0:
|
||||||
|
83,89,17375,1,2,0:0:0:0:
|
||||||
|
83,89,17500,1,2,0:0:0:0:
|
||||||
|
83,89,17625,1,2,0:0:0:0:
|
||||||
|
83,89,17750,1,0,0:0:0:0:
|
||||||
|
83,89,17875,1,0,0:0:0:0:
|
||||||
|
83,89,18000,1,0,0:0:0:0:
|
||||||
|
83,89,18125,1,0,0:0:0:0:
|
||||||
|
83,89,18250,1,0,0:0:0:0:
|
||||||
|
83,89,18375,1,2,0:0:0:0:
|
||||||
|
83,89,18500,1,2,0:0:0:0:
|
||||||
|
83,89,18625,1,2,0:0:0:0:
|
||||||
|
83,89,18750,1,2,0:0:0:0:
|
||||||
|
83,89,18875,1,0,0:0:0:0:
|
||||||
|
83,89,19000,1,0,0:0:0:0:
|
||||||
|
83,89,19125,1,0,0:0:0:0:
|
||||||
|
83,89,19250,1,0,0:0:0:0:
|
||||||
|
83,89,19375,1,2,0:0:0:0:
|
||||||
|
83,89,19500,1,2,0:0:0:0:
|
||||||
|
83,89,19625,1,0,0:0:0:0:
|
||||||
|
|
||||||
|
// d-slider pattern, spaced 1/4 beat apart
|
||||||
|
84,122,20500,1,0,0:0:0:0:
|
||||||
|
84,122,20625,2,0,L|217:123,1,120
|
||||||
|
84,122,21125,1,0,0:0:0:0:
|
||||||
|
84,122,21250,2,0,L|217:123,1,120
|
||||||
|
84,122,21750,1,0,0:0:0:0:
|
||||||
|
84,122,21875,2,0,L|217:123,1,120
|
||||||
|
84,122,22375,1,0,0:0:0:0:
|
||||||
|
84,122,22500,2,0,L|217:123,1,120
|
||||||
|
84,122,23000,1,0,0:0:0:0:
|
||||||
|
84,122,23125,2,0,L|217:123,1,120
|
||||||
|
|
||||||
|
// dd-slider pattern, spaced 1/4 beat apart
|
||||||
|
99,106,24500,1,0,0:0:0:0:
|
||||||
|
99,106,24625,1,0,0:0:0:0:
|
||||||
|
99,106,24750,2,0,L|194:107,1,80
|
||||||
|
99,106,25125,1,0,0:0:0:0:
|
||||||
|
99,106,25250,1,0,0:0:0:0:
|
||||||
|
99,106,25375,2,0,L|194:107,1,80
|
||||||
|
99,106,25750,1,0,0:0:0:0:
|
||||||
|
99,106,25875,1,0,0:0:0:0:
|
||||||
|
99,106,26000,2,0,L|194:107,1,80
|
||||||
|
99,106,26375,1,0,0:0:0:0:
|
||||||
|
99,106,26500,1,0,0:0:0:0:
|
||||||
|
99,106,26625,2,0,L|194:107,1,80
|
||||||
|
99,106,27000,1,0,0:0:0:0:
|
||||||
|
99,106,27125,1,0,0:0:0:0:
|
||||||
|
99,106,27250,2,0,L|194:107,1,80
|
||||||
|
|
||||||
|
// ddd-slider pattern, spaced 1/4 beat apart
|
||||||
|
121,103,28500,1,0,0:0:0:0:
|
||||||
|
121,103,28625,1,0,0:0:0:0:
|
||||||
|
121,103,28750,1,0,0:0:0:0:
|
||||||
|
121,103,28875,2,0,L|190:103,1,40
|
||||||
|
121,103,29125,1,0,0:0:0:0:
|
||||||
|
121,103,29250,1,0,0:0:0:0:
|
||||||
|
121,103,29375,1,0,0:0:0:0:
|
||||||
|
121,103,29500,2,0,L|190:103,1,40
|
||||||
|
121,103,29750,1,0,0:0:0:0:
|
||||||
|
121,103,29875,1,0,0:0:0:0:
|
||||||
|
121,103,30000,1,0,0:0:0:0:
|
||||||
|
121,103,30125,2,0,L|190:103,1,40
|
||||||
|
121,103,30375,1,0,0:0:0:0:
|
||||||
|
121,103,30500,1,0,0:0:0:0:
|
||||||
|
121,103,30625,1,0,0:0:0:0:
|
||||||
|
121,103,30750,2,0,L|190:103,1,40
|
||||||
|
121,103,31000,1,0,0:0:0:0:
|
||||||
|
121,103,31125,1,0,0:0:0:0:
|
||||||
|
121,103,31250,1,0,0:0:0:0:
|
||||||
|
121,103,31375,2,0,L|190:103,1,40
|
||||||
|
|
||||||
|
// dkd-slider pattern, spaced 1/4 beat apart
|
||||||
|
121,103,32500,1,0,0:0:0:0:
|
||||||
|
121,103,32625,1,2,0:0:0:0:
|
||||||
|
121,103,32750,1,0,0:0:0:0:
|
||||||
|
121,103,32875,2,0,L|190:103,1,40
|
||||||
|
121,103,33125,1,0,0:0:0:0:
|
||||||
|
121,103,33250,1,2,0:0:0:0:
|
||||||
|
121,103,33375,1,0,0:0:0:0:
|
||||||
|
121,103,33500,2,0,L|190:103,1,40
|
||||||
|
121,103,33750,1,0,0:0:0:0:
|
||||||
|
121,103,33875,1,2,0:0:0:0:
|
||||||
|
121,103,34000,1,0,0:0:0:0:
|
||||||
|
121,103,34125,2,0,L|190:103,1,40
|
||||||
|
121,103,34375,1,0,0:0:0:0:
|
||||||
|
121,103,34500,1,2,0:0:0:0:
|
||||||
|
121,103,34625,1,0,0:0:0:0:
|
||||||
|
121,103,34750,2,0,L|190:103,1,40
|
||||||
|
121,103,35000,1,0,0:0:0:0:
|
||||||
|
121,103,35125,1,2,0:0:0:0:
|
||||||
|
121,103,35250,1,0,0:0:0:0:
|
||||||
|
121,103,35375,2,0,L|190:103,1,40
|
||||||
|
|
||||||
|
//ddk-slider pattern, spaced 1/4 beat apart
|
||||||
|
121,103,36500,1,0,0:0:0:0:
|
||||||
|
121,103,36625,1,0,0:0:0:0:
|
||||||
|
121,103,36750,1,2,0:0:0:0:
|
||||||
|
121,103,36875,2,0,L|190:103,1,40
|
||||||
|
121,103,37125,1,0,0:0:0:0:
|
||||||
|
121,103,37250,1,0,0:0:0:0:
|
||||||
|
121,103,37375,1,2,0:0:0:0:
|
||||||
|
121,103,37500,2,0,L|190:103,1,40
|
||||||
|
121,103,37750,1,0,0:0:0:0:
|
||||||
|
121,103,37875,1,0,0:0:0:0:
|
||||||
|
121,103,38000,1,2,0:0:0:0:
|
||||||
|
121,103,38125,2,0,L|190:103,1,40
|
||||||
|
121,103,38375,1,0,0:0:0:0:
|
||||||
|
121,103,38500,1,0,0:0:0:0:
|
||||||
|
121,103,38625,1,2,0:0:0:0:
|
||||||
|
121,103,38750,2,0,L|190:103,1,40
|
||||||
|
121,103,39000,1,0,0:0:0:0:
|
||||||
|
121,103,39125,1,0,0:0:0:0:
|
||||||
|
121,103,39250,1,2,0:0:0:0:
|
||||||
|
121,103,39375,2,0,L|190:103,1,40
|
||||||
|
|
||||||
|
//ddkk-slider pattern, spaced 1/4 beat apart
|
||||||
|
107,106,40500,1,0,0:0:0:0:
|
||||||
|
107,106,40625,1,0,0:0:0:0:
|
||||||
|
107,106,40750,1,2,0:0:0:0:
|
||||||
|
107,106,40875,1,2,0:0:0:0:
|
||||||
|
46,112,41000,2,0,L|214:112,1,160
|
||||||
|
107,106,41625,1,0,0:0:0:0:
|
||||||
|
107,106,41750,1,0,0:0:0:0:
|
||||||
|
107,106,41875,1,2,0:0:0:0:
|
||||||
|
107,106,42000,1,2,0:0:0:0:
|
||||||
|
46,112,42125,2,0,L|214:112,1,160
|
||||||
|
107,106,42750,1,0,0:0:0:0:
|
||||||
|
107,106,42875,1,0,0:0:0:0:
|
||||||
|
107,106,43000,1,2,0:0:0:0:
|
||||||
|
107,106,43125,1,2,0:0:0:0:
|
||||||
|
46,112,43250,2,0,L|214:112,1,160
|
||||||
|
107,106,43875,1,0,0:0:0:0:
|
||||||
|
107,106,44000,1,0,0:0:0:0:
|
||||||
|
107,106,44125,1,2,0:0:0:0:
|
||||||
|
107,106,44250,1,2,0:0:0:0:
|
||||||
|
46,112,44375,2,0,L|214:112,1,160
|
||||||
|
107,106,45000,1,0,0:0:0:0:
|
||||||
|
107,106,45125,1,0,0:0:0:0:
|
||||||
|
107,106,45250,1,2,0:0:0:0:
|
||||||
|
107,106,45375,1,2,0:0:0:0:
|
||||||
|
46,112,45500,2,0,L|214:112,1,160
|
||||||
|
|
||||||
|
// spinner-spinner pattern, spaced 1/4 beat apart
|
||||||
|
256,192,47000,12,0,47500,0:0:0:0:
|
||||||
|
256,192,47625,12,0,48000,0:0:0:0:
|
||||||
|
256,192,48125,12,0,48500,0:0:0:0:
|
||||||
|
256,192,48625,12,0,49000,0:0:0:0:
|
||||||
|
|
||||||
|
// spinner-d pattern, spaced 1/4 beat apart
|
||||||
|
256,192,50000,12,0,50500,0:0:0:0:
|
||||||
|
183,143,50625,5,0,0:0:0:0:
|
||||||
|
256,192,50750,12,0,51250,0:0:0:0:
|
||||||
|
114,106,51375,5,0,0:0:0:0:
|
||||||
|
256,192,51625,12,0,52125,0:0:0:0:
|
||||||
|
154,143,52250,5,0,0:0:0:0:
|
||||||
|
256,192,52375,12,0,52875,0:0:0:0:
|
||||||
|
116,111,53000,5,0,0:0:0:0:
|
@ -2,27 +2,16 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Shapes;
|
|
||||||
using osu.Game.Screens.Menu;
|
using osu.Game.Screens.Menu;
|
||||||
using osuTK.Graphics;
|
|
||||||
|
|
||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
public class TestCaseDisclaimer : OsuTestCase
|
public class TestCaseDisclaimer : ScreenTestCase
|
||||||
{
|
{
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
Children = new Drawable[]
|
LoadScreen(new Disclaimer());
|
||||||
{
|
|
||||||
new Box
|
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
Colour = Color4.Black,
|
|
||||||
},
|
|
||||||
new Disclaimer()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,11 @@ using osu.Game.Screens.Tournament.Teams;
|
|||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
[Description("for tournament use")]
|
[Description("for tournament use")]
|
||||||
public class TestCaseDrawings : OsuTestCase
|
public class TestCaseDrawings : ScreenTestCase
|
||||||
{
|
{
|
||||||
public TestCaseDrawings()
|
public TestCaseDrawings()
|
||||||
{
|
{
|
||||||
Add(new Drawings
|
LoadScreen(new Drawings
|
||||||
{
|
{
|
||||||
TeamList = new TestTeamList(),
|
TeamList = new TestTeamList(),
|
||||||
});
|
});
|
||||||
|
@ -40,10 +40,10 @@ namespace osu.Game.Tests.Visual
|
|||||||
Room.RoomID.Value = 1;
|
Room.RoomID.Value = 1;
|
||||||
Room.Name.Value = "an awesome room";
|
Room.Name.Value = "an awesome room";
|
||||||
|
|
||||||
Child = new TestMatchResults(new ScoreInfo
|
LoadScreen(new TestMatchResults(new ScoreInfo
|
||||||
{
|
{
|
||||||
User = new User { Id = 10 },
|
User = new User { Id = 10 },
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestMatchResults : MatchResults
|
private class TestMatchResults : MatchResults
|
||||||
|
@ -12,7 +12,7 @@ using osu.Game.Screens.Multi.Lounge.Components;
|
|||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestCaseMultiScreen : OsuTestCase
|
public class TestCaseMultiScreen : ScreenTestCase
|
||||||
{
|
{
|
||||||
public override IReadOnlyList<Type> RequiredTypes => new[]
|
public override IReadOnlyList<Type> RequiredTypes => new[]
|
||||||
{
|
{
|
||||||
@ -25,7 +25,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
{
|
{
|
||||||
Multiplayer multi = new Multiplayer();
|
Multiplayer multi = new Multiplayer();
|
||||||
|
|
||||||
AddStep(@"show", () => Add(multi));
|
AddStep(@"show", () => LoadScreen(multi));
|
||||||
AddWaitStep(5);
|
AddWaitStep(5);
|
||||||
AddStep(@"exit", multi.Exit);
|
AddStep(@"exit", multi.Exit);
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
|||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
|
using osu.Framework.Screens;
|
||||||
using osu.Game.Screens;
|
using osu.Game.Screens;
|
||||||
using osu.Game.Screens.Menu;
|
using osu.Game.Screens.Menu;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
@ -29,7 +30,10 @@ namespace osu.Game.Tests.Visual
|
|||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = Color4.Black,
|
Colour = Color4.Black,
|
||||||
},
|
},
|
||||||
new Loader()
|
new ScreenStack(new Loader())
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Screens;
|
||||||
using osu.Game.Graphics.Containers;
|
using osu.Game.Graphics.Containers;
|
||||||
using osu.Game.Screens.Backgrounds;
|
using osu.Game.Screens.Backgrounds;
|
||||||
|
|
||||||
@ -14,7 +16,10 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
Add(parallax = new ParallaxContainer
|
Add(parallax = new ParallaxContainer
|
||||||
{
|
{
|
||||||
Child = new BackgroundScreenDefault { Alpha = 0.8f }
|
Child = new ScreenStack(new BackgroundScreenDefault { Alpha = 0.8f })
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("default parallax", () => parallax.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT);
|
AddStep("default parallax", () => parallax.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT);
|
||||||
|
@ -12,6 +12,7 @@ using osu.Framework.Configuration;
|
|||||||
using osu.Framework.Extensions;
|
using osu.Framework.Extensions;
|
||||||
using osu.Framework.MathUtils;
|
using osu.Framework.MathUtils;
|
||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
|
using osu.Framework.Screens;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
@ -25,7 +26,7 @@ using osu.Game.Screens.Select.Filter;
|
|||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestCasePlaySongSelect : OsuTestCase
|
public class TestCasePlaySongSelect : ScreenTestCase
|
||||||
{
|
{
|
||||||
private BeatmapManager manager;
|
private BeatmapManager manager;
|
||||||
|
|
||||||
@ -102,21 +103,16 @@ namespace osu.Game.Tests.Visual
|
|||||||
}
|
}
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public virtual void SetUp()
|
public virtual void SetUp() =>
|
||||||
{
|
Schedule(() => { manager?.Delete(manager.GetAllUsableBeatmapSets()); });
|
||||||
Schedule(() =>
|
|
||||||
{
|
|
||||||
manager?.Delete(manager.GetAllUsableBeatmapSets());
|
|
||||||
Child = songSelect = new TestSongSelect();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestDummy()
|
public void TestDummy()
|
||||||
{
|
{
|
||||||
|
createSongSelect();
|
||||||
AddAssert("dummy selected", () => songSelect.CurrentBeatmap == defaultBeatmap);
|
AddAssert("dummy selected", () => songSelect.CurrentBeatmap == defaultBeatmap);
|
||||||
|
|
||||||
AddAssert("dummy shown on wedge", () => songSelect.CurrentBeatmapDetailsBeatmap == defaultBeatmap);
|
AddUntilStep(() => songSelect.CurrentBeatmapDetailsBeatmap == defaultBeatmap, "dummy shown on wedge");
|
||||||
|
|
||||||
addManyTestMaps();
|
addManyTestMaps();
|
||||||
AddWaitStep(3);
|
AddWaitStep(3);
|
||||||
@ -127,6 +123,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestSorting()
|
public void TestSorting()
|
||||||
{
|
{
|
||||||
|
createSongSelect();
|
||||||
addManyTestMaps();
|
addManyTestMaps();
|
||||||
AddWaitStep(3);
|
AddWaitStep(3);
|
||||||
|
|
||||||
@ -142,6 +139,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
[Ignore("needs fixing")]
|
[Ignore("needs fixing")]
|
||||||
public void TestImportUnderDifferentRuleset()
|
public void TestImportUnderDifferentRuleset()
|
||||||
{
|
{
|
||||||
|
createSongSelect();
|
||||||
changeRuleset(2);
|
changeRuleset(2);
|
||||||
importForRuleset(0);
|
importForRuleset(0);
|
||||||
AddUntilStep(() => songSelect.Carousel.SelectedBeatmap == null, "no selection");
|
AddUntilStep(() => songSelect.Carousel.SelectedBeatmap == null, "no selection");
|
||||||
@ -150,6 +148,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestImportUnderCurrentRuleset()
|
public void TestImportUnderCurrentRuleset()
|
||||||
{
|
{
|
||||||
|
createSongSelect();
|
||||||
changeRuleset(2);
|
changeRuleset(2);
|
||||||
importForRuleset(2);
|
importForRuleset(2);
|
||||||
importForRuleset(1);
|
importForRuleset(1);
|
||||||
@ -165,6 +164,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestRulesetChangeResetsMods()
|
public void TestRulesetChangeResetsMods()
|
||||||
{
|
{
|
||||||
|
createSongSelect();
|
||||||
changeRuleset(0);
|
changeRuleset(0);
|
||||||
|
|
||||||
changeMods(new OsuModHardRock());
|
changeMods(new OsuModHardRock());
|
||||||
@ -194,6 +194,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestStartAfterUnMatchingFilterDoesNotStart()
|
public void TestStartAfterUnMatchingFilterDoesNotStart()
|
||||||
{
|
{
|
||||||
|
createSongSelect();
|
||||||
addManyTestMaps();
|
addManyTestMaps();
|
||||||
AddUntilStep(() => songSelect.Carousel.SelectedBeatmap != null, "has selection");
|
AddUntilStep(() => songSelect.Carousel.SelectedBeatmap != null, "has selection");
|
||||||
|
|
||||||
@ -221,6 +222,12 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
private void changeRuleset(int id) => AddStep($"change ruleset to {id}", () => Ruleset.Value = rulesets.AvailableRulesets.First(r => r.ID == id));
|
private void changeRuleset(int id) => AddStep($"change ruleset to {id}", () => Ruleset.Value = rulesets.AvailableRulesets.First(r => r.ID == id));
|
||||||
|
|
||||||
|
private void createSongSelect()
|
||||||
|
{
|
||||||
|
AddStep("create song select", () => LoadScreen(songSelect = new TestSongSelect()));
|
||||||
|
AddUntilStep(() => songSelect.IsCurrentScreen(), "wait for present");
|
||||||
|
}
|
||||||
|
|
||||||
private void addManyTestMaps()
|
private void addManyTestMaps()
|
||||||
{
|
{
|
||||||
AddStep("import test maps", () =>
|
AddStep("import test maps", () =>
|
||||||
|
@ -16,7 +16,7 @@ using osu.Game.Users;
|
|||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestCaseResults : OsuTestCase
|
public class TestCaseResults : ScreenTestCase
|
||||||
{
|
{
|
||||||
private BeatmapManager beatmaps;
|
private BeatmapManager beatmaps;
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
if (beatmapInfo != null)
|
if (beatmapInfo != null)
|
||||||
Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmapInfo);
|
Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmapInfo);
|
||||||
|
|
||||||
Add(new SoloResults(new ScoreInfo
|
LoadScreen(new SoloResults(new ScoreInfo
|
||||||
{
|
{
|
||||||
TotalScore = 2845370,
|
TotalScore = 2845370,
|
||||||
Accuracy = 0.98,
|
Accuracy = 0.98,
|
||||||
|
@ -337,6 +337,11 @@ namespace osu.Game
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
|
// The next time this is updated is in UpdateAfterChildren, which occurs too late and results
|
||||||
|
// in the cursor being shown for a few frames during the intro.
|
||||||
|
// This prevents the cursor from showing until we have a screen with CursorVisible = true
|
||||||
|
MenuCursorContainer.CanShowCursor = menuScreen?.CursorVisible ?? false;
|
||||||
|
|
||||||
// todo: all archive managers should be able to be looped here.
|
// todo: all archive managers should be able to be looped here.
|
||||||
SkinManager.PostNotification = n => notifications?.Post(n);
|
SkinManager.PostNotification = n => notifications?.Post(n);
|
||||||
SkinManager.GetStableStorage = GetStorageForStableInstall;
|
SkinManager.GetStableStorage = GetStorageForStableInstall;
|
||||||
|
@ -70,7 +70,10 @@ namespace osu.Game.Overlays
|
|||||||
Colour = Color4.Black,
|
Colour = Color4.Black,
|
||||||
Alpha = 0.9f,
|
Alpha = 0.9f,
|
||||||
},
|
},
|
||||||
welcomeScreen = new ScreenWelcome(),
|
new ScreenStack(welcomeScreen = new ScreenWelcome())
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ namespace osu.Game.Screens
|
|||||||
|
|
||||||
public override OverlayActivation InitialOverlayActivationMode => OverlayActivation.Disabled;
|
public override OverlayActivation InitialOverlayActivationMode => OverlayActivation.Disabled;
|
||||||
|
|
||||||
|
public override bool CursorVisible => false;
|
||||||
|
|
||||||
protected override bool AllowBackButton => false;
|
protected override bool AllowBackButton => false;
|
||||||
|
|
||||||
public Loader()
|
public Loader()
|
||||||
|
@ -45,7 +45,7 @@ namespace osu.Game.Screens.Multi
|
|||||||
private readonly Bindable<Room> currentRoom = new Bindable<Room>();
|
private readonly Bindable<Room> currentRoom = new Bindable<Room>();
|
||||||
|
|
||||||
[Cached]
|
[Cached]
|
||||||
private readonly Bindable<FilterCriteria> currentFilter = new Bindable<FilterCriteria>();
|
private readonly Bindable<FilterCriteria> currentFilter = new Bindable<FilterCriteria>(new FilterCriteria());
|
||||||
|
|
||||||
[Cached(Type = typeof(IRoomManager))]
|
[Cached(Type = typeof(IRoomManager))]
|
||||||
private RoomManager roomManager;
|
private RoomManager roomManager;
|
||||||
|
@ -58,7 +58,14 @@ namespace osu.Game.Skinning
|
|||||||
componentName = "hit300";
|
componentName = "hit300";
|
||||||
break;
|
break;
|
||||||
case "Play/osu/number-text":
|
case "Play/osu/number-text":
|
||||||
return !hasFont(Configuration.HitCircleFont) ? null : new LegacySpriteText(Textures, Configuration.HitCircleFont) { Scale = new Vector2(0.96f) };
|
return !hasFont(Configuration.HitCircleFont)
|
||||||
|
? null
|
||||||
|
: new LegacySpriteText(Textures, Configuration.HitCircleFont)
|
||||||
|
{
|
||||||
|
Scale = new Vector2(0.96f),
|
||||||
|
// Spacing value was reverse-engineered from the ratio of the rendered sprite size in the visual inspector vs the actual texture size
|
||||||
|
Spacing = new Vector2(-Configuration.HitCircleOverlap * 0.89f, 0)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var texture = GetTexture(componentName);
|
var texture = GetTexture(componentName);
|
||||||
|
@ -46,6 +46,9 @@ namespace osu.Game.Skinning
|
|||||||
case "HitCirclePrefix":
|
case "HitCirclePrefix":
|
||||||
skin.HitCircleFont = pair.Value;
|
skin.HitCircleFont = pair.Value;
|
||||||
break;
|
break;
|
||||||
|
case "HitCircleOverlap":
|
||||||
|
skin.HitCircleOverlap = int.Parse(pair.Value);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -23,6 +23,8 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
public string HitCircleFont { get; set; } = "default";
|
public string HitCircleFont { get; set; } = "default";
|
||||||
|
|
||||||
|
public int HitCircleOverlap { get; set; }
|
||||||
|
|
||||||
public bool? CursorExpand { get; set; } = true;
|
public bool? CursorExpand { get; set; } = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
51
osu.Game/Tests/Beatmaps/DifficultyCalculatorTest.cs
Normal file
51
osu.Game/Tests/Beatmaps/DifficultyCalculatorTest.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Beatmaps.Formats;
|
||||||
|
using osu.Game.Rulesets;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
|
|
||||||
|
namespace osu.Game.Tests.Beatmaps
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public abstract class DifficultyCalculatorTest
|
||||||
|
{
|
||||||
|
private const string resource_namespace = "Testing.Beatmaps";
|
||||||
|
|
||||||
|
protected abstract string ResourceAssembly { get; }
|
||||||
|
|
||||||
|
protected void Test(double expected, string name, params Mod[] mods)
|
||||||
|
=> Assert.AreEqual(expected, CreateDifficultyCalculator(getBeatmap(name)).Calculate(mods).StarRating);
|
||||||
|
|
||||||
|
private WorkingBeatmap getBeatmap(string name)
|
||||||
|
{
|
||||||
|
using (var resStream = openResource($"{resource_namespace}.{name}.osu"))
|
||||||
|
using (var stream = new StreamReader(resStream))
|
||||||
|
{
|
||||||
|
var decoder = Decoder.GetDecoder<Beatmap>(stream);
|
||||||
|
((LegacyBeatmapDecoder)decoder).ApplyOffsets = false;
|
||||||
|
|
||||||
|
var working = new TestWorkingBeatmap(decoder.Decode(stream));
|
||||||
|
working.BeatmapInfo.Ruleset = CreateRuleset().RulesetInfo;
|
||||||
|
|
||||||
|
return working;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Stream openResource(string name)
|
||||||
|
{
|
||||||
|
var localPath = Path.GetDirectoryName(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path));
|
||||||
|
return Assembly.LoadFrom(Path.Combine(localPath, $"{ResourceAssembly}.dll")).GetManifestResourceStream($@"{ResourceAssembly}.Resources.{name}");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract DifficultyCalculator CreateDifficultyCalculator(WorkingBeatmap beatmap);
|
||||||
|
|
||||||
|
protected abstract Ruleset CreateRuleset();
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,9 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
|
using osu.Framework.Screens;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Screens.Backgrounds;
|
using osu.Game.Screens.Backgrounds;
|
||||||
@ -14,10 +16,10 @@ namespace osu.Game.Tests
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
LoadComponentAsync(new BackgroundScreenDefault
|
LoadComponentAsync(new ScreenStack(new BackgroundScreenDefault { Colour = OsuColour.Gray(0.5f) })
|
||||||
{
|
{
|
||||||
Colour = OsuColour.Gray(0.5f),
|
Depth = 10,
|
||||||
Depth = 10
|
RelativeSizeAxes = Axes.Both,
|
||||||
}, AddInternal);
|
}, AddInternal);
|
||||||
|
|
||||||
// Have to construct this here, rather than in the constructor, because
|
// Have to construct this here, rather than in the constructor, because
|
||||||
|
@ -7,7 +7,7 @@ using osu.Game.Online.Multiplayer;
|
|||||||
|
|
||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
public abstract class MultiplayerTestCase : OsuTestCase
|
public abstract class MultiplayerTestCase : ScreenTestCase
|
||||||
{
|
{
|
||||||
[Cached]
|
[Cached]
|
||||||
private readonly Bindable<Room> currentRoom = new Bindable<Room>(new Room());
|
private readonly Bindable<Room> currentRoom = new Bindable<Room>(new Room());
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.1" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.1" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2019.128.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2019.128.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2019.214.0" />
|
<PackageReference Include="ppy.osu.Framework" Version="2019.215.0" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.22.0" />
|
<PackageReference Include="SharpCompress" Version="0.22.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.11.0" />
|
<PackageReference Include="NUnit" Version="3.11.0" />
|
||||||
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
||||||
|
@ -105,8 +105,8 @@
|
|||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.1" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.1" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2019.128.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2019.128.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2019.214.0" />
|
<PackageReference Include="ppy.osu.Framework" Version="2019.215.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework.iOS" Version="2019.214.0" />
|
<PackageReference Include="ppy.osu.Framework.iOS" Version="2019.215.0" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.22.0" />
|
<PackageReference Include="SharpCompress" Version="0.22.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.11.0" />
|
<PackageReference Include="NUnit" Version="3.11.0" />
|
||||||
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
||||||
|
Reference in New Issue
Block a user