Check for and fix non-unit MultiBrush segment steps
TilingPath's algorithms are designed on the assumption that MultiBrush segments use unit steps in their point sequences. Non-unit sequences can result in incorrect or suboptimal tilings. This change ensures point sequences are validated for unit steps, and fixes a non-compliant cliff tile across all tilesets.
This commit is contained in:
committed by
Gustas Kažukauskas
parent
7538943f59
commit
2a0e787ae7
@@ -189,9 +189,19 @@ namespace OpenRA.Mods.Common.MapGenerator
|
|||||||
.Split(',', StringSplitOptions.RemoveEmptyEntries);
|
.Split(',', StringSplitOptions.RemoveEmptyEntries);
|
||||||
if (parts.Length % 2 != 0)
|
if (parts.Length % 2 != 0)
|
||||||
FieldLoader.InvalidValueAction(value, typeof(int2[]), "Points");
|
FieldLoader.InvalidValueAction(value, typeof(int2[]), "Points");
|
||||||
|
|
||||||
var points = new CVec[parts.Length / 2];
|
var points = new CVec[parts.Length / 2];
|
||||||
for (var i = 0; i < points.Length; i++)
|
for (var i = 0; i < points.Length; i++)
|
||||||
|
{
|
||||||
points[i] = new CVec(Exts.ParseInt32Invariant(parts[2 * i]), Exts.ParseInt32Invariant(parts[2 * i + 1]));
|
points[i] = new CVec(Exts.ParseInt32Invariant(parts[2 * i]), Exts.ParseInt32Invariant(parts[2 * i + 1]));
|
||||||
|
if (i > 0)
|
||||||
|
{
|
||||||
|
var step = points[i] - points[i - 1];
|
||||||
|
if (Math.Abs(step.X) + Math.Abs(step.Y) != 1)
|
||||||
|
throw new YamlException($"Points sequence {value} has non-unit steps");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Points = [.. points];
|
Points = [.. points];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2232,7 +2232,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@19:
|
MultiBrush@19:
|
||||||
Template: 19
|
Template: 19
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
@@ -1879,7 +1879,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@19:
|
MultiBrush@19:
|
||||||
Template: 19
|
Template: 19
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
@@ -1880,7 +1880,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@19:
|
MultiBrush@19:
|
||||||
Template: 19
|
Template: 19
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
@@ -1915,7 +1915,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@19:
|
MultiBrush@19:
|
||||||
Template: 19
|
Template: 19
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
@@ -3475,7 +3475,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@186:
|
MultiBrush@186:
|
||||||
Template: 186
|
Template: 186
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
@@ -4015,7 +4015,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@141:
|
MultiBrush@141:
|
||||||
Template: 141
|
Template: 141
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
@@ -4475,7 +4475,7 @@ MultiBrushCollections:
|
|||||||
Start: Cliff.L
|
Start: Cliff.L
|
||||||
Inner: Cliff
|
Inner: Cliff
|
||||||
End: Cliff.L
|
End: Cliff.L
|
||||||
Points: 2,1, 1,1, 0,2
|
Points: 2,1, 1,1, 1,2, 0,2
|
||||||
MultiBrush@141:
|
MultiBrush@141:
|
||||||
Template: 141
|
Template: 141
|
||||||
Segment:
|
Segment:
|
||||||
|
|||||||
Reference in New Issue
Block a user