osu/osu.Game.Tests/Visual/Gameplay/TestSceneAutoplay.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

77 lines
3.3 KiB
C#
Raw Normal View History

// 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.
2018-04-13 09:19:50 +00:00
2022-06-17 07:37:17 +00:00
#nullable disable
2018-01-17 08:35:27 +00:00
using System.ComponentModel;
using System.Linq;
using osu.Framework.Testing;
using osu.Game.Graphics.Containers;
2018-01-17 08:35:27 +00:00
using osu.Game.Rulesets;
2020-03-29 14:29:46 +00:00
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Osu;
2020-03-29 14:29:46 +00:00
using osu.Game.Rulesets.Scoring;
2018-01-17 08:35:27 +00:00
using osu.Game.Screens.Play;
2020-03-27 18:42:45 +00:00
using osu.Game.Screens.Play.Break;
2020-03-29 14:29:46 +00:00
using osu.Game.Screens.Ranking;
using osu.Game.Users.Drawables;
2018-04-13 09:19:50 +00:00
2019-03-24 16:02:36 +00:00
namespace osu.Game.Tests.Visual.Gameplay
2018-01-17 08:35:27 +00:00
{
[Description("Player instantiated with an autoplay mod.")]
public partial class TestSceneAutoplay : TestSceneAllRulesetPlayers
2018-01-17 08:35:27 +00:00
{
protected new TestReplayPlayer Player => (TestReplayPlayer)base.Player;
protected override Player CreatePlayer(Ruleset ruleset)
2018-01-17 08:35:27 +00:00
{
2020-03-29 14:29:46 +00:00
SelectedMods.Value = new[] { ruleset.GetAutoplayMod() };
return new TestReplayPlayer(false);
}
protected override void AddCheckSteps()
{
// we only want this beatmap for time reference.
var referenceBeatmap = CreateBeatmap(new OsuRuleset().RulesetInfo);
AddUntilStep("score above zero", () => Player.ScoreProcessor.TotalScore.Value > 0);
AddUntilStep("key counter counted keys", () => Player.HUDOverlay.InputCountController.Triggers.Any(kc => kc.ActivationCount.Value > 2));
seekTo(referenceBeatmap.Breaks[0].StartTime);
AddAssert("keys not counting", () => !Player.HUDOverlay.InputCountController.IsCounting.Value);
2020-03-27 18:42:45 +00:00
AddAssert("overlay displays 100% accuracy", () => Player.BreakOverlay.ChildrenOfType<BreakInfo>().Single().AccuracyDisplay.Current.Value == 1);
AddStep("rewind", () => Player.GameplayClockContainer.Seek(-80000));
AddUntilStep("key counter reset", () => Player.HUDOverlay.InputCountController.Triggers.All(kc => kc.ActivationCount.Value == 0));
2020-07-15 07:42:37 +00:00
seekTo(referenceBeatmap.HitObjects[^1].GetEndTime());
AddUntilStep("results displayed", () => getResultsScreen()?.IsLoaded == true);
2020-03-29 14:29:46 +00:00
AddAssert("score has combo", () => getResultsScreen().Score.Combo > 100);
AddAssert("score has no misses", () => getResultsScreen().Score.Statistics[HitResult.Miss] == 0);
2022-03-30 20:04:19 +00:00
AddUntilStep("avatar displayed", () => getAvatar() != null);
AddAssert("avatar not clickable", () => getAvatar().ChildrenOfType<OsuClickableContainer>().First().Action == null);
ClickableAvatar getAvatar() => getResultsScreen()
.ChildrenOfType<ClickableAvatar>().FirstOrDefault();
2020-03-29 14:29:46 +00:00
ResultsScreen getResultsScreen() => Stack.CurrentScreen as ResultsScreen;
2019-09-17 13:33:27 +00:00
}
private void seekTo(double time)
{
AddStep($"seek to {time}", () => Player.GameplayClockContainer.Seek(time));
// Prevent test timeouts by seeking in 10 second increments.
for (double t = 0; t < time; t += 10000)
{
double expectedTime = t;
AddUntilStep($"current time >= {t}", () => Player.DrawableRuleset.FrameStableClock.CurrentTime >= expectedTime);
}
AddUntilStep("wait for seek to complete", () => Player.DrawableRuleset.FrameStableClock.CurrentTime >= time);
}
2018-01-17 08:35:27 +00:00
}
}