mirror of https://github.com/ppy/osu
add back protection against perfect curve segments with > 3 points
This commit is contained in:
parent
db568bfb79
commit
eefd7cf083
|
@ -347,10 +347,12 @@ private IEnumerable<ArraySegment<PathControlPoint>> convertPoints(PathType type,
|
||||||
vertices[i] = new PathControlPoint { Position = points[i] };
|
vertices[i] = new PathControlPoint { Position = points[i] };
|
||||||
|
|
||||||
// Edge-case rules (to match stable).
|
// Edge-case rules (to match stable).
|
||||||
if (type == PathType.PERFECT_CURVE && FormatVersion < LegacyBeatmapEncoder.FIRST_LAZER_VERSION)
|
if (type == PathType.PERFECT_CURVE)
|
||||||
{
|
{
|
||||||
int endPointLength = endPoint == null ? 0 : 1;
|
int endPointLength = endPoint == null ? 0 : 1;
|
||||||
|
|
||||||
|
if (FormatVersion < LegacyBeatmapEncoder.FIRST_LAZER_VERSION)
|
||||||
|
{
|
||||||
if (vertices.Length + endPointLength != 3)
|
if (vertices.Length + endPointLength != 3)
|
||||||
type = PathType.BEZIER;
|
type = PathType.BEZIER;
|
||||||
else if (isLinear(points[0], points[1], endPoint ?? points[2]))
|
else if (isLinear(points[0], points[1], endPoint ?? points[2]))
|
||||||
|
@ -359,6 +361,10 @@ private IEnumerable<ArraySegment<PathControlPoint>> convertPoints(PathType type,
|
||||||
type = PathType.LINEAR;
|
type = PathType.LINEAR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (vertices.Length + endPointLength > 3)
|
||||||
|
// Lazer supports perfect curves with less than 3 points and colinear points
|
||||||
|
type = PathType.BEZIER;
|
||||||
|
}
|
||||||
|
|
||||||
// The first control point must have a definite type.
|
// The first control point must have a definite type.
|
||||||
vertices[0].Type = type;
|
vertices[0].Type = type;
|
||||||
|
|
Loading…
Reference in New Issue