2019-07-26 10:29:06 +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.
|
|
|
|
|
|
|
|
using System;
|
2019-08-20 08:39:16 +00:00
|
|
|
using System.Text.RegularExpressions;
|
2019-07-26 10:29:06 +00:00
|
|
|
using osu.Framework.Allocation;
|
|
|
|
using osu.Framework.Audio;
|
|
|
|
using osu.Framework.Graphics;
|
|
|
|
using osu.Framework.Graphics.Containers;
|
2019-08-20 08:39:16 +00:00
|
|
|
using osu.Framework.Graphics.Textures;
|
2019-07-26 10:29:06 +00:00
|
|
|
using osu.Framework.IO.Stores;
|
|
|
|
using osu.Game.Skinning;
|
|
|
|
using osu.Game.Tests.Visual;
|
|
|
|
|
|
|
|
namespace osu.Game.Rulesets.Osu.Tests
|
|
|
|
{
|
|
|
|
public abstract class SkinnableTestScene : OsuGridTestScene
|
|
|
|
{
|
|
|
|
private Skin metricsSkin;
|
|
|
|
private Skin defaultSkin;
|
|
|
|
private Skin specialSkin;
|
|
|
|
|
2019-07-30 12:53:28 +00:00
|
|
|
protected SkinnableTestScene()
|
|
|
|
: base(2, 2)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2019-07-26 10:29:06 +00:00
|
|
|
[BackgroundDependencyLoader]
|
2019-09-09 08:05:03 +00:00
|
|
|
private void load(AudioManager audio, SkinManager skinManager)
|
2019-07-26 10:29:06 +00:00
|
|
|
{
|
2019-08-20 08:39:16 +00:00
|
|
|
var dllStore = new DllResourceStore("osu.Game.Rulesets.Osu.Tests.dll");
|
2019-07-26 10:29:06 +00:00
|
|
|
|
2019-08-20 08:39:16 +00:00
|
|
|
metricsSkin = new TestLegacySkin(new SkinInfo(), new NamespacedResourceStore<byte[]>(dllStore, "Resources/metrics_skin"), audio, true);
|
2019-09-09 08:05:03 +00:00
|
|
|
defaultSkin = skinManager.GetSkin(DefaultLegacySkin.Info);
|
2019-08-20 08:39:16 +00:00
|
|
|
specialSkin = new TestLegacySkin(new SkinInfo(), new NamespacedResourceStore<byte[]>(dllStore, "Resources/special_skin"), audio, true);
|
2019-07-26 10:29:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void SetContents(Func<Drawable> creationFunction)
|
|
|
|
{
|
2019-08-26 03:31:51 +00:00
|
|
|
Cell(0).Child = createProvider(null, creationFunction);
|
|
|
|
Cell(1).Child = createProvider(metricsSkin, creationFunction);
|
|
|
|
Cell(2).Child = createProvider(defaultSkin, creationFunction);
|
|
|
|
Cell(3).Child = createProvider(specialSkin, creationFunction);
|
|
|
|
}
|
|
|
|
|
|
|
|
private Drawable createProvider(Skin skin, Func<Drawable> creationFunction)
|
|
|
|
{
|
2019-08-27 09:27:21 +00:00
|
|
|
var mainProvider = new SkinProvidingContainer(skin);
|
2019-08-26 03:31:51 +00:00
|
|
|
|
|
|
|
return mainProvider
|
|
|
|
.WithChild(new SkinProvidingContainer(Ruleset.Value.CreateInstance().CreateLegacySkinProvider(mainProvider))
|
|
|
|
{
|
|
|
|
Child = creationFunction()
|
|
|
|
});
|
2019-07-26 10:29:06 +00:00
|
|
|
}
|
|
|
|
|
2019-08-20 08:39:16 +00:00
|
|
|
private class TestLegacySkin : LegacySkin
|
2019-07-26 10:29:06 +00:00
|
|
|
{
|
2019-08-20 08:39:16 +00:00
|
|
|
private readonly bool extrapolateAnimations;
|
2019-07-30 12:53:28 +00:00
|
|
|
|
2019-08-20 08:39:16 +00:00
|
|
|
public TestLegacySkin(SkinInfo skin, IResourceStore<byte[]> storage, AudioManager audioManager, bool extrapolateAnimations)
|
|
|
|
: base(skin, storage, audioManager, "skin.ini")
|
|
|
|
{
|
|
|
|
this.extrapolateAnimations = extrapolateAnimations;
|
|
|
|
}
|
2019-07-30 12:53:28 +00:00
|
|
|
|
2019-08-20 08:39:16 +00:00
|
|
|
public override Texture GetTexture(string componentName)
|
|
|
|
{
|
|
|
|
// extrapolate frames to test longer animations
|
|
|
|
if (extrapolateAnimations)
|
|
|
|
{
|
|
|
|
var match = Regex.Match(componentName, "-([0-9]*)");
|
2019-07-30 12:53:28 +00:00
|
|
|
|
2019-08-20 09:13:00 +00:00
|
|
|
if (match.Length > 0 && int.TryParse(match.Groups[1].Value, out var number) && number < 60)
|
|
|
|
return base.GetTexture(componentName.Replace($"-{number}", $"-{number % 2}"));
|
2019-08-20 08:39:16 +00:00
|
|
|
}
|
2019-07-30 12:53:28 +00:00
|
|
|
|
2019-08-20 08:39:16 +00:00
|
|
|
return base.GetTexture(componentName);
|
2019-07-30 12:53:28 +00:00
|
|
|
}
|
2019-07-26 10:29:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|