mirror of
https://github.com/ppy/osu.git
synced 2024-11-12 04:40:07 +08:00
11d0e185b8
This allows for different layouts of display. Idk, maybe someone would want to mix both variants? (don't do this please). This commit is mostly prep for further changes.
103 lines
3.5 KiB
C#
103 lines
3.5 KiB
C#
// 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.
|
|
|
|
#nullable disable
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using NUnit.Framework;
|
|
using osu.Framework.Allocation;
|
|
using osu.Framework.Extensions.IEnumerableExtensions;
|
|
using osu.Framework.Graphics;
|
|
using osu.Framework.Graphics.Containers;
|
|
using osu.Framework.Testing;
|
|
using osu.Framework.Timing;
|
|
using osu.Game.Rulesets;
|
|
using osu.Game.Rulesets.Mods;
|
|
using osu.Game.Rulesets.Osu;
|
|
using osu.Game.Rulesets.Scoring;
|
|
using osu.Game.Screens.Play;
|
|
using osu.Game.Tests.Gameplay;
|
|
using osuTK.Input;
|
|
|
|
namespace osu.Game.Tests.Visual.Gameplay
|
|
{
|
|
public partial class TestSceneSkinnableHUDOverlay : SkinnableTestScene
|
|
{
|
|
private HUDOverlay hudOverlay;
|
|
|
|
[Cached]
|
|
private ScoreProcessor scoreProcessor = new ScoreProcessor(new OsuRuleset());
|
|
|
|
[Cached(typeof(HealthProcessor))]
|
|
private HealthProcessor healthProcessor = new DrainingHealthProcessor(0);
|
|
|
|
[Cached]
|
|
private GameplayState gameplayState = TestGameplayState.Create(new OsuRuleset());
|
|
|
|
[Cached(typeof(IGameplayClock))]
|
|
private readonly IGameplayClock gameplayClock = new GameplayClockContainer(new FramedClock());
|
|
|
|
private IEnumerable<HUDOverlay> hudOverlays => CreatedDrawables.OfType<HUDOverlay>();
|
|
|
|
// best way to check without exposing.
|
|
private Drawable hideTarget => hudOverlay.KeyCounter;
|
|
private FillFlowContainer<KeyCounter> keyCounterFlow => hudOverlay.KeyCounter.ChildrenOfType<FillFlowContainer<KeyCounter>>().First();
|
|
|
|
[Test]
|
|
public void TestComboCounterIncrementing()
|
|
{
|
|
createNew();
|
|
|
|
AddRepeatStep("increase combo", () => scoreProcessor.Combo.Value++, 10);
|
|
|
|
AddStep("reset combo", () => scoreProcessor.Combo.Value = 0);
|
|
}
|
|
|
|
[Test]
|
|
public void TestFadesInOnLoadComplete()
|
|
{
|
|
float? initialAlpha = null;
|
|
|
|
createNew(h => h.OnLoadComplete += _ => initialAlpha = hideTarget.Alpha);
|
|
AddUntilStep("wait for load", () => hudOverlay.IsAlive);
|
|
AddAssert("initial alpha was less than 1", () => initialAlpha < 1);
|
|
}
|
|
|
|
[Test]
|
|
public void TestHideExternally()
|
|
{
|
|
createNew();
|
|
|
|
AddStep("set showhud false", () => hudOverlays.ForEach(h => h.ShowHud.Value = false));
|
|
|
|
AddUntilStep("hidetarget is hidden", () => !hideTarget.IsPresent);
|
|
AddAssert("pause button is still visible", () => hudOverlay.HoldToQuit.IsPresent);
|
|
|
|
// Key counter flow container should not be affected by this, only the key counter display will be hidden as checked above.
|
|
AddAssert("key counter flow not affected", () => keyCounterFlow.IsPresent);
|
|
}
|
|
|
|
private void createNew(Action<HUDOverlay> action = null)
|
|
{
|
|
AddStep("create overlay", () =>
|
|
{
|
|
SetContents(_ =>
|
|
{
|
|
hudOverlay = new HUDOverlay(null, Array.Empty<Mod>());
|
|
|
|
// Add any key just to display the key counter visually.
|
|
hudOverlay.KeyCounter.Add(hudOverlay.KeyCounter.CreateKeyCounter(new KeyCounterKeyboard(Key.Space)));
|
|
|
|
action?.Invoke(hudOverlay);
|
|
|
|
return hudOverlay;
|
|
});
|
|
});
|
|
}
|
|
|
|
protected override Ruleset CreateRulesetForSkinProvider() => new OsuRuleset();
|
|
}
|
|
}
|