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,17 +347,23 @@ 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 (vertices.Length + endPointLength != 3)
|
||||
type = PathType.BEZIER;
|
||||
else if (isLinear(points[0], points[1], endPoint ?? points[2]))
|
||||
if (FormatVersion < LegacyBeatmapEncoder.FIRST_LAZER_VERSION)
|
||||
{
|
||||
// osu-stable special-cased colinear perfect curves to a linear path
|
||||
type = PathType.LINEAR;
|
||||
if (vertices.Length + endPointLength != 3)
|
||||
type = PathType.BEZIER;
|
||||
else if (isLinear(points[0], points[1], endPoint ?? points[2]))
|
||||
{
|
||||
// osu-stable special-cased colinear perfect curves to a linear path
|
||||
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.
|
||||
|
|
Loading…
Reference in New Issue