diff --git a/osu.Game.Rulesets.Osu/OsuAutoReplay.cs b/osu.Game.Rulesets.Osu/OsuAutoReplay.cs
index 4e10179819..76ddb48730 100644
--- a/osu.Game.Rulesets.Osu/OsuAutoReplay.cs
+++ b/osu.Game.Rulesets.Osu/OsuAutoReplay.cs
@@ -138,8 +138,8 @@ namespace osu.Game.Rulesets.Osu
if (h is Spinner)
{
- targetPosition.X = Frames[Frames.Count - 1].MouseX;
- targetPosition.Y = Frames[Frames.Count - 1].MouseY;
+ targetPosition.X = Frames[Frames.Count - 1].Position.X;
+ targetPosition.Y = Frames[Frames.Count - 1].Position.Y;
Vector2 difference = spinner_centre - targetPosition;
@@ -193,7 +193,7 @@ namespace osu.Game.Rulesets.Osu
addFrameToReplay(lastFrame);
}
- Vector2 lastPosition = new Vector2(lastFrame.MouseX, lastFrame.MouseY);
+ Vector2 lastPosition = lastFrame.Position;
double timeDifference = applyModsToTime(h.StartTime - lastFrame.Time);
diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoReplay.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoReplay.cs
index a8187d68ab..df862a5cb0 100644
--- a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoReplay.cs
+++ b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoReplay.cs
@@ -24,8 +24,8 @@ namespace osu.Game.Rulesets.Taiko.Replays
{
bool hitButton = true;
- Frames.Add(new ReplayFrame(-100000, 320, 240, ReplayButtonState.None));
- Frames.Add(new ReplayFrame(beatmap.HitObjects[0].StartTime - 1000, 320, 240, ReplayButtonState.None));
+ Frames.Add(new ReplayFrame(-100000, null, null, ReplayButtonState.None));
+ Frames.Add(new ReplayFrame(beatmap.HitObjects[0].StartTime - 1000, null, null, ReplayButtonState.None));
for (int i = 0; i < beatmap.HitObjects.Count; i++)
{
@@ -64,7 +64,7 @@ namespace osu.Game.Rulesets.Taiko.Replays
break;
}
- Frames.Add(new ReplayFrame(j, 0, 0, button));
+ Frames.Add(new ReplayFrame(j, null, null, button));
d = (d + 1) % 4;
if (++count > req)
break;
@@ -74,7 +74,7 @@ namespace osu.Game.Rulesets.Taiko.Replays
{
foreach (var tick in drumRoll.Ticks)
{
- Frames.Add(new ReplayFrame(tick.StartTime, 0, 0, hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2));
+ Frames.Add(new ReplayFrame(tick.StartTime, null, null, hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2));
hitButton = !hitButton;
}
}
@@ -95,18 +95,18 @@ namespace osu.Game.Rulesets.Taiko.Replays
button = hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2;
}
- Frames.Add(new ReplayFrame(h.StartTime, 0, 0, button));
+ Frames.Add(new ReplayFrame(h.StartTime, null, null, button));
}
else
throw new Exception("Unknown hit object type.");
- Frames.Add(new ReplayFrame(endTime + KEY_UP_DELAY, 0, 0, ReplayButtonState.None));
+ Frames.Add(new ReplayFrame(endTime + KEY_UP_DELAY, null, null, ReplayButtonState.None));
if (i < beatmap.HitObjects.Count - 1)
{
double waitTime = beatmap.HitObjects[i + 1].StartTime - 1000;
if (waitTime > endTime)
- Frames.Add(new ReplayFrame(waitTime, 0, 0, ReplayButtonState.None));
+ Frames.Add(new ReplayFrame(waitTime, null, null, ReplayButtonState.None));
}
hitButton = !hitButton;
diff --git a/osu.Game/Database/ScoreDatabase.cs b/osu.Game/Database/ScoreDatabase.cs
index 99fa9fbf9a..8ea836aceb 100644
--- a/osu.Game/Database/ScoreDatabase.cs
+++ b/osu.Game/Database/ScoreDatabase.cs
@@ -108,7 +108,7 @@ namespace osu.Game.Database
using (var lzma = new LzmaStream(properties, replayInStream, compressedSize, outSize))
using (var reader = new StreamReader(lzma))
- score.Replay = createReplay(reader);
+ score.Replay = createLegacyReplay(reader);
}
}
@@ -116,11 +116,11 @@ namespace osu.Game.Database
}
///
- /// Creates a replay which is read from a stream.
+ /// Creates a legacy replay which is read from a stream.
///
/// The stream reader.
- /// The replay.
- private Replay createReplay(StreamReader reader)
+ /// The legacy replay.
+ private Replay createLegacyReplay(StreamReader reader)
{
var frames = new List();
diff --git a/osu.Game/Rulesets/Replays/ReplayFrame.cs b/osu.Game/Rulesets/Replays/ReplayFrame.cs
index 31f952abdf..b2bda84851 100644
--- a/osu.Game/Rulesets/Replays/ReplayFrame.cs
+++ b/osu.Game/Rulesets/Replays/ReplayFrame.cs
@@ -7,12 +7,12 @@ namespace osu.Game.Rulesets.Replays
{
public class ReplayFrame
{
- public Vector2 Position => new Vector2(MouseX, MouseY);
+ public Vector2 Position => new Vector2(MouseX ?? 0, MouseY ?? 0);
- public bool IsImportant => MouseLeft || MouseRight;
+ public bool IsImportant => (MouseX.HasValue && MouseY.HasValue) && (MouseLeft || MouseRight);
- public float MouseX;
- public float MouseY;
+ public float? MouseX;
+ public float? MouseY;
public bool MouseLeft => MouseLeft1 || MouseLeft2;
public bool MouseRight => MouseRight1 || MouseRight2;
@@ -55,10 +55,10 @@ namespace osu.Game.Rulesets.Replays
}
- public ReplayFrame(double time, float posX, float posY, ReplayButtonState buttonState)
+ public ReplayFrame(double time, float? mouseX, float? mouseY, ReplayButtonState buttonState)
{
- MouseX = posX;
- MouseY = posY;
+ MouseX = mouseX;
+ MouseY = mouseY;
ButtonState = buttonState;
Time = time;
}