2020-04-14 12:05:54 +00:00
|
|
|
// 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.
|
|
|
|
|
2022-06-17 07:37:17 +00:00
|
|
|
#nullable disable
|
|
|
|
|
2020-04-14 12:05:54 +00:00
|
|
|
using NUnit.Framework;
|
2020-06-21 16:19:33 +00:00
|
|
|
using osu.Framework.IO.Stores;
|
2020-04-14 12:05:54 +00:00
|
|
|
using osu.Game.Rulesets;
|
2020-06-21 16:02:09 +00:00
|
|
|
using osu.Game.Rulesets.Osu;
|
2020-06-21 16:20:36 +00:00
|
|
|
using osu.Game.Tests.Beatmaps;
|
2020-06-21 16:19:33 +00:00
|
|
|
using osu.Game.Tests.Resources;
|
2021-10-22 05:41:59 +00:00
|
|
|
using static osu.Game.Skinning.SkinConfiguration;
|
2020-04-14 12:05:54 +00:00
|
|
|
|
|
|
|
namespace osu.Game.Tests.Gameplay
|
|
|
|
{
|
2020-06-21 16:02:09 +00:00
|
|
|
public class TestSceneHitObjectSamples : HitObjectSampleTest
|
2020-04-14 12:05:54 +00:00
|
|
|
{
|
2020-06-21 16:02:09 +00:00
|
|
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
2021-05-31 09:55:47 +00:00
|
|
|
protected override IResourceStore<byte[]> RulesetResources => TestResources.GetStore();
|
2020-04-14 12:05:54 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject which provides no custom sample set retrieves samples from the user skin.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestDefaultSampleFromUserSkin()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expected_sample, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("hitobject-skin-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertUserLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject which provides a sample set of 1 retrieves samples from the beatmap skin.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestDefaultSampleFromBeatmap()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expected_sample, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertBeatmapLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject which provides a sample set of 1 retrieves samples from the user skin when the beatmap does not contain the sample.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestDefaultSampleFromUserSkinFallback()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(null, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertUserLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject which provides a custom sample set of 2 retrieves the following samples from the beatmap skin:
|
|
|
|
/// normal-hitnormal2
|
|
|
|
/// normal-hitnormal
|
2020-07-30 18:10:41 +00:00
|
|
|
/// hitnormal
|
2020-04-14 12:05:54 +00:00
|
|
|
/// </summary>
|
|
|
|
[TestCase("normal-hitnormal2")]
|
|
|
|
[TestCase("normal-hitnormal")]
|
2020-07-30 18:10:41 +00:00
|
|
|
[TestCase("hitnormal")]
|
2020-04-14 12:05:54 +00:00
|
|
|
public void TestDefaultCustomSampleFromBeatmap(string expectedSample)
|
|
|
|
{
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expectedSample, expectedSample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-custom-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertBeatmapLookup(expectedSample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
2020-07-30 19:39:45 +00:00
|
|
|
/// Tests that a hitobject which provides a custom sample set of 2 retrieves the following samples from the user skin
|
|
|
|
/// (ignoring the custom sample set index) when the beatmap skin does not contain the sample:
|
2020-04-14 12:05:54 +00:00
|
|
|
/// normal-hitnormal
|
2020-07-30 18:10:41 +00:00
|
|
|
/// hitnormal
|
2020-04-14 12:05:54 +00:00
|
|
|
/// </summary>
|
|
|
|
[TestCase("normal-hitnormal")]
|
2020-07-30 18:10:41 +00:00
|
|
|
[TestCase("hitnormal")]
|
2020-04-14 12:05:54 +00:00
|
|
|
public void TestDefaultCustomSampleFromUserSkinFallback(string expectedSample)
|
|
|
|
{
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(string.Empty, expectedSample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-custom-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertUserLookup(expectedSample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
2020-07-30 19:39:45 +00:00
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject which provides a custom sample set of 2 does not retrieve a normal-hitnormal2 sample from the user skin
|
|
|
|
/// if the beatmap skin does not contain the sample.
|
|
|
|
/// User skins in stable ignore the custom sample set index when performing lookups.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestUserSkinLookupIgnoresSampleBank()
|
|
|
|
{
|
|
|
|
const string unwanted_sample = "normal-hitnormal2";
|
|
|
|
|
|
|
|
SetupSkins(string.Empty, unwanted_sample);
|
|
|
|
|
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-custom-sample.osu");
|
|
|
|
|
|
|
|
AssertNoLookup(unwanted_sample);
|
|
|
|
}
|
|
|
|
|
2020-04-14 12:05:54 +00:00
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject which provides a sample file retrieves the sample file from the beatmap skin.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestFileSampleFromBeatmap()
|
|
|
|
{
|
|
|
|
const string expected_sample = "hit_1.wav";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expected_sample, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("file-beatmap-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertBeatmapLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a default hitobject and control point causes <see cref="TestDefaultSampleFromUserSkin"/>.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestControlPointSampleFromSkin()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expected_sample, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("controlpoint-skin-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertUserLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a control point that provides a custom sample set of 1 causes <see cref="TestDefaultSampleFromBeatmap"/>.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestControlPointSampleFromBeatmap()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expected_sample, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("controlpoint-beatmap-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertBeatmapLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a control point that provides a custom sample of 2 causes <see cref="TestDefaultCustomSampleFromBeatmap"/>.
|
|
|
|
/// </summary>
|
|
|
|
[TestCase("normal-hitnormal2")]
|
|
|
|
[TestCase("normal-hitnormal")]
|
2020-07-30 18:10:41 +00:00
|
|
|
[TestCase("hitnormal")]
|
2020-04-14 12:05:54 +00:00
|
|
|
public void TestControlPointCustomSampleFromBeatmap(string sampleName)
|
|
|
|
{
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(sampleName, sampleName);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("controlpoint-beatmap-custom-sample.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertBeatmapLookup(sampleName);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that a hitobject's custom sample overrides the control point's.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestHitObjectCustomSampleOverride()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal3";
|
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
SetupSkins(expected_sample, expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-custom-sample-override.osu");
|
2020-04-14 12:05:54 +00:00
|
|
|
|
2020-06-21 16:02:09 +00:00
|
|
|
AssertBeatmapLookup(expected_sample);
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
2020-06-21 16:52:15 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Tests that when a custom sample bank is used, both the normal and additional sounds will be looked up.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestHitObjectCustomSampleBank()
|
|
|
|
{
|
|
|
|
string[] expectedSamples =
|
|
|
|
{
|
|
|
|
"normal-hitnormal2",
|
2020-07-30 19:39:45 +00:00
|
|
|
"normal-hitwhistle" // user skin lookups ignore custom sample set index
|
2020-06-21 16:52:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
SetupSkins(expectedSamples[0], expectedSamples[1]);
|
|
|
|
|
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-custom-sample-bank.osu");
|
|
|
|
|
|
|
|
AssertBeatmapLookup(expectedSamples[0]);
|
|
|
|
AssertUserLookup(expectedSamples[1]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
2020-07-29 07:34:09 +00:00
|
|
|
/// Tests that when a custom sample bank is used, but <see cref="LegacySetting.LayeredHitSounds"/> is disabled,
|
2020-06-21 16:52:15 +00:00
|
|
|
/// only the additional sound will be looked up.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestHitObjectCustomSampleBankWithoutLayered()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitwhistle2";
|
|
|
|
const string unwanted_sample = "normal-hitnormal2";
|
|
|
|
|
|
|
|
SetupSkins(expected_sample, unwanted_sample);
|
|
|
|
disableLayeredHitSounds();
|
|
|
|
|
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-custom-sample-bank.osu");
|
|
|
|
|
|
|
|
AssertBeatmapLookup(expected_sample);
|
|
|
|
AssertNoLookup(unwanted_sample);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
2020-07-29 07:34:09 +00:00
|
|
|
/// Tests that when a normal sample bank is used and <see cref="LegacySetting.LayeredHitSounds"/> is disabled,
|
2020-06-21 16:52:15 +00:00
|
|
|
/// the normal sound will be looked up anyway.
|
|
|
|
/// </summary>
|
|
|
|
[Test]
|
|
|
|
public void TestHitObjectNormalSampleBankWithoutLayered()
|
|
|
|
{
|
|
|
|
const string expected_sample = "normal-hitnormal";
|
|
|
|
|
|
|
|
SetupSkins(expected_sample, expected_sample);
|
|
|
|
disableLayeredHitSounds();
|
|
|
|
|
|
|
|
CreateTestWithBeatmap("hitobject-beatmap-sample.osu");
|
|
|
|
|
|
|
|
AssertBeatmapLookup(expected_sample);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void disableLayeredHitSounds()
|
2020-07-29 07:34:09 +00:00
|
|
|
=> AddStep("set LayeredHitSounds to false", () => Skin.Configuration.ConfigDictionary[LegacySetting.LayeredHitSounds.ToString()] = "0");
|
2020-04-14 12:05:54 +00:00
|
|
|
}
|
|
|
|
}
|