2020-03-26 10:30:59 +08: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.Linq ;
using NUnit.Framework ;
2020-03-30 14:29:00 +08:00
using osu.Framework.Allocation ;
2020-03-26 10:30:59 +08:00
using osu.Framework.Graphics ;
using osu.Framework.Graphics.Containers ;
using osu.Framework.Graphics.Sprites ;
using osu.Framework.Testing ;
using osu.Game.Beatmaps ;
using osu.Game.Beatmaps.ControlPoints ;
using osu.Game.Rulesets.Catch.Objects ;
using osu.Game.Rulesets.Catch.Objects.Drawables ;
using osu.Game.Rulesets.Catch.Skinning ;
using osu.Game.Rulesets.Catch.UI ;
using osu.Game.Skinning ;
using osu.Game.Tests.Visual ;
using osuTK ;
using osuTK.Graphics ;
namespace osu.Game.Rulesets.Catch.Tests
{
public class TestSceneHyperDashColouring : OsuTestScene
{
2020-03-30 14:29:00 +08:00
[Resolved]
private SkinManager skins { get ; set ; }
2020-04-05 05:02:33 +08:00
[Test]
public void TestHyperDashFruitColour ( )
2020-03-26 10:40:38 +08:00
{
DrawableFruit drawableFruit = null ;
2020-04-04 00:50:32 +08:00
AddStep ( "setup hyper-dash fruit" , ( ) = >
2020-03-26 10:40:38 +08:00
{
2020-03-30 14:29:00 +08:00
var fruit = new Fruit { HyperDashTarget = new Banana ( ) } ;
2020-03-26 10:40:38 +08:00
fruit . ApplyDefaults ( new ControlPointInfo ( ) , new BeatmapDifficulty ( ) ) ;
2020-03-30 14:29:00 +08:00
Child = setupSkinHierarchy ( drawableFruit = new DrawableFruit ( fruit )
{
Anchor = Anchor . Centre ,
Origin = Anchor . Centre ,
Scale = new Vector2 ( 4f ) ,
2020-04-05 05:02:33 +08:00
} , false , false , false ) ;
2020-03-26 10:40:38 +08:00
} ) ;
2020-04-05 05:02:33 +08:00
AddAssert ( "hyper-dash fruit has default colour" , ( ) = > checkLegacyFruitHyperDashColour ( drawableFruit , Catcher . DefaultHyperDashColour ) ) ;
2020-03-26 10:40:38 +08:00
}
2020-04-05 05:02:33 +08:00
[TestCase(true)]
[TestCase(false)]
public void TestCustomHyperDashFruitColour ( bool customCatcherHyperDashColour )
2020-03-26 10:40:38 +08:00
{
DrawableFruit drawableFruit = null ;
2020-04-04 00:50:32 +08:00
AddStep ( "setup hyper-dash fruit" , ( ) = >
2020-03-26 10:40:38 +08:00
{
2020-03-30 14:29:00 +08:00
var fruit = new Fruit { HyperDashTarget = new Banana ( ) } ;
2020-03-26 10:40:38 +08:00
fruit . ApplyDefaults ( new ControlPointInfo ( ) , new BeatmapDifficulty ( ) ) ;
2020-03-30 14:29:00 +08:00
Child = setupSkinHierarchy ( drawableFruit = new DrawableFruit ( fruit )
{
Anchor = Anchor . Centre ,
Origin = Anchor . Centre ,
Scale = new Vector2 ( 4f ) ,
2020-04-05 05:02:33 +08:00
} , customCatcherHyperDashColour , false , true ) ;
2020-03-26 10:40:38 +08:00
} ) ;
2020-04-05 05:02:33 +08:00
AddAssert ( "hyper-dash fruit use fruit colour from skin" , ( ) = > checkLegacyFruitHyperDashColour ( drawableFruit , TestSkin . CustomHyperDashFruitColour ) ) ;
2020-03-26 10:40:38 +08:00
}
2020-04-05 05:02:33 +08:00
[Test]
public void TestCustomHyperDashFruitColourFallback ( )
2020-03-26 10:40:38 +08:00
{
DrawableFruit drawableFruit = null ;
2020-04-04 00:50:32 +08:00
AddStep ( "setup hyper-dash fruit" , ( ) = >
2020-03-26 10:40:38 +08:00
{
2020-03-30 14:29:00 +08:00
var fruit = new Fruit { HyperDashTarget = new Banana ( ) } ;
2020-03-26 10:40:38 +08:00
fruit . ApplyDefaults ( new ControlPointInfo ( ) , new BeatmapDifficulty ( ) ) ;
2020-03-30 14:29:00 +08:00
Child = setupSkinHierarchy (
2020-03-26 10:40:38 +08:00
drawableFruit = new DrawableFruit ( fruit )
{
Anchor = Anchor . Centre ,
Origin = Anchor . Centre ,
Scale = new Vector2 ( 4f ) ,
2020-04-05 05:02:33 +08:00
} , true , false , false ) ;
2020-03-26 10:40:38 +08:00
} ) ;
2020-04-05 05:02:33 +08:00
AddAssert ( "hyper-dash fruit colour falls back to catcher colour from skin" , ( ) = > checkLegacyFruitHyperDashColour ( drawableFruit , TestSkin . CustomHyperDashColour ) ) ;
2020-03-26 10:40:38 +08:00
}
2020-04-05 05:02:33 +08:00
private Drawable setupSkinHierarchy ( Drawable child , bool customCatcherColour , bool customAfterColour , bool customFruitColour )
2020-03-26 10:30:59 +08:00
{
2020-04-05 05:02:33 +08:00
var legacySkinProvider = new SkinProvidingContainer ( skins . GetSkin ( DefaultLegacySkin . Info ) ) ;
2020-03-30 14:29:00 +08:00
var testSkinProvider = new SkinProvidingContainer ( new TestSkin ( customCatcherColour , customAfterColour , customFruitColour ) ) ;
2020-04-05 05:02:33 +08:00
var legacySkinTransformer = new SkinProvidingContainer ( new CatchLegacySkinTransformer ( testSkinProvider ) ) ;
2020-03-30 14:29:00 +08:00
2020-04-05 05:02:33 +08:00
return legacySkinProvider
. WithChild ( testSkinProvider
. WithChild ( legacySkinTransformer
. WithChild ( child ) ) ) ;
2020-03-26 10:30:59 +08:00
}
2020-03-30 14:29:00 +08:00
private bool checkLegacyFruitHyperDashColour ( DrawableFruit fruit , Color4 expectedColour ) = >
fruit . ChildrenOfType < SkinnableDrawable > ( ) . First ( ) . Drawable . ChildrenOfType < Sprite > ( ) . Any ( c = > c . Colour = = expectedColour ) ;
2020-03-26 10:30:59 +08:00
2020-04-05 05:13:23 +08:00
private class TestSkin : LegacySkin
2020-03-26 10:30:59 +08:00
{
public static Color4 CustomHyperDashColour { get ; } = Color4 . Goldenrod ;
public static Color4 CustomHyperDashFruitColour { get ; } = Color4 . Cyan ;
public static Color4 CustomHyperDashAfterColour { get ; } = Color4 . Lime ;
2020-04-04 00:53:38 +08:00
public TestSkin ( bool customCatcherColour , bool customAfterColour , bool customFruitColour )
2020-04-05 05:13:23 +08:00
: base ( new SkinInfo ( ) , null , null , string . Empty )
2020-03-26 10:30:59 +08:00
{
2020-04-05 05:13:23 +08:00
if ( customCatcherColour )
Configuration . CustomColours [ CatchSkinColour . HyperDash . ToString ( ) ] = CustomHyperDashColour ;
2020-03-26 10:30:59 +08:00
2020-04-05 05:13:23 +08:00
if ( customAfterColour )
Configuration . CustomColours [ CatchSkinColour . HyperDashAfterImage . ToString ( ) ] = CustomHyperDashAfterColour ;
2020-03-26 10:30:59 +08:00
2020-04-05 05:13:23 +08:00
if ( customFruitColour )
Configuration . CustomColours [ CatchSkinColour . HyperDashFruit . ToString ( ) ] = CustomHyperDashFruitColour ;
2020-03-26 10:30:59 +08:00
}
}
}
}