Fix replay handler nullref crashes

This commit is contained in:
Dean Herbert 2019-03-31 01:33:56 +09:00
parent 6738bd54c0
commit 5d91c3bcfc
2 changed files with 19 additions and 8 deletions

View File

@ -19,7 +19,7 @@ public OsuFramedReplayInputHandler(Replay replay)
{
}
protected override bool IsImportant(OsuReplayFrame frame) => frame?.Actions.Any() ?? false;
protected override bool IsImportant(OsuReplayFrame frame) => frame.Actions.Any();
protected Vector2? Position
{

View File

@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using osu.Framework.Input.StateChanges;
using osu.Game.Input.Handlers;
using osu.Game.Replays;
@ -87,14 +88,24 @@ private bool advanceFrame()
protected bool HasFrames => Frames.Count > 0;
private bool inImportantSection =>
HasFrames && FrameAccuratePlayback &&
//a button is in a pressed state
IsImportant(currentDirection > 0 ? CurrentFrame : NextFrame) &&
//the next frame is within an allowable time span
Math.Abs(CurrentTime - NextFrame?.Time ?? 0) <= AllowedImportantTimeSpan;
private bool inImportantSection
{
get
{
if (!HasFrames || !FrameAccuratePlayback)
return false;
protected virtual bool IsImportant(TFrame frame) => false;
var checkFrame = currentDirection > 0 ? CurrentFrame : NextFrame;
if (checkFrame == null)
return false;
return IsImportant(currentDirection > 0 ? CurrentFrame : NextFrame) && //a button is in a pressed state
Math.Abs(CurrentTime - NextFrame?.Time ?? 0) <= AllowedImportantTimeSpan; //the next frame is within an allowable time span
}
}
protected virtual bool IsImportant([NotNull] TFrame frame) => false;
/// <summary>
/// Update the current frame based on an incoming time value.