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] };
|
||||
|
||||
// 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;
|
||||
|
||||
if (FormatVersion < LegacyBeatmapEncoder.FIRST_LAZER_VERSION)
|
||||
{
|
||||
if (vertices.Length + endPointLength != 3)
|
||||
type = PathType.BEZIER;
|
||||
else if (isLinear(points[0], points[1], endPoint ?? points[2]))
|
||||
|
@ -359,6 +361,10 @@ private IEnumerable<ArraySegment<PathControlPoint>> convertPoints(PathType type,
|
|||
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.
|
||||
vertices[0].Type = type;
|
||||
|
|
Loading…
Reference in New Issue