// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Threading.Tasks; using osu.Framework.Input.Bindings; using osu.Game.Input.Bindings; using osu.Game.Scoring; using osu.Game.Screens.Ranking; namespace osu.Game.Screens.Play { public class ReplayPlayer : Player, IKeyBindingHandler { protected readonly Score Score; // Disallow replays from failing. (see https://github.com/ppy/osu/issues/6108) protected override bool CheckModsAllowFailure() => false; public ReplayPlayer(Score score, bool allowPause = true, bool showResults = true) : base(allowPause, showResults) { Score = score; } protected override void PrepareReplay() { DrawableRuleset?.SetReplayScore(Score); } protected override Score CreateScore() { var baseScore = base.CreateScore(); // Since the replay score doesn't contain statistics, we'll pass them through here. Score.ScoreInfo.HitEvents = baseScore.ScoreInfo.HitEvents; return Score; } protected override Task SubmitScore(Score score) => Task.FromResult(score.ScoreInfo); protected override ResultsScreen CreateResults(ScoreInfo score) => new SoloResultsScreen(score, false); public bool OnPressed(GlobalAction action) { switch (action) { case GlobalAction.TogglePauseReplay: if (GameplayClockContainer.IsPaused.Value) GameplayClockContainer.Start(); else GameplayClockContainer.Stop(); return true; } return false; } public void OnReleased(GlobalAction action) { } } }