// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using NUnit.Framework; using osu.Framework.Bindables; using osu.Game.Rulesets.Catch.Objects; using osu.Game.Rulesets.Catch.Objects.Drawables; using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Catch.Tests { public class TestSceneFruitRandomness : OsuTestScene { [Test] public void TestFruitRandomness() { Bindable randomSeed = new Bindable(); TestDrawableFruit drawableFruit; TestDrawableBanana drawableBanana; Add(new TestDrawableCatchHitObjectSpecimen(drawableFruit = new TestDrawableFruit(new Fruit()) { RandomSeed = { BindTarget = randomSeed } }) { X = -200 }); Add(new TestDrawableCatchHitObjectSpecimen(drawableBanana = new TestDrawableBanana(new Banana()) { RandomSeed = { BindTarget = randomSeed } })); float fruitRotation = 0; float bananaRotation = 0; float bananaScale = 0; AddStep("set random seed to 0", () => { drawableFruit.HitObject.StartTime = 500; randomSeed.Value = 0; fruitRotation = drawableFruit.InnerRotation; bananaRotation = drawableBanana.InnerRotation; bananaScale = drawableBanana.InnerScale; }); AddStep("change random seed", () => { randomSeed.Value = 10; }); AddAssert("fruit rotation is changed", () => drawableFruit.InnerRotation != fruitRotation); AddAssert("banana rotation is changed", () => drawableBanana.InnerRotation != bananaRotation); AddAssert("banana scale is changed", () => drawableBanana.InnerScale != bananaScale); AddStep("reset random seed", () => { randomSeed.Value = 0; }); AddAssert("rotation and scale restored", () => drawableFruit.InnerRotation == fruitRotation && drawableBanana.InnerRotation == bananaRotation && drawableBanana.InnerScale == bananaScale); AddStep("change start time", () => { drawableFruit.HitObject.StartTime = 1000; }); AddAssert("random seed is changed", () => randomSeed.Value == 1000); AddSliderStep("random seed", 0, 100, 0, x => randomSeed.Value = x); } private class TestDrawableFruit : DrawableFruit { public float InnerRotation => ScaleContainer.Rotation; public TestDrawableFruit(Fruit h) : base(h) { } } private class TestDrawableBanana : DrawableBanana { public float InnerRotation => ScaleContainer.Rotation; public float InnerScale => ScaleContainer.Scale.X; public TestDrawableBanana(Banana h) : base(h) { } } } }