When serializing terrain positions for an order, serialize a 0-length array in a way that roundtrips.

Previously, a 0 length array would not roundtrip and would deserialize as a center position instead.
This commit is contained in:
RoosterDragon
2023-08-26 15:55:22 +01:00
committed by Gustas
parent e41279fe6b
commit a67320e431

View File

@@ -157,8 +157,8 @@ namespace OpenRA
{ {
var pos = new WPos(r.ReadInt32(), r.ReadInt32(), r.ReadInt32()); var pos = new WPos(r.ReadInt32(), r.ReadInt32(), r.ReadInt32());
var numberOfTerrainPositions = r.ReadByte(); var numberOfTerrainPositions = r.ReadInt16();
if (numberOfTerrainPositions == 0) if (numberOfTerrainPositions == -1)
target = Target.FromPos(pos); target = Target.FromPos(pos);
else else
{ {
@@ -403,10 +403,10 @@ namespace OpenRA
// Don't send extra data over the network that will be restored by the Target ctor // Don't send extra data over the network that will be restored by the Target ctor
var terrainPositions = targetState.TerrainPositions.Length; var terrainPositions = targetState.TerrainPositions.Length;
if (terrainPositions == 1 && targetState.TerrainPositions[0] == targetState.Pos) if (terrainPositions == 1 && targetState.TerrainPositions[0] == targetState.Pos)
w.Write((byte)0); w.Write((short)-1);
else else
{ {
w.Write((byte)terrainPositions); w.Write((short)terrainPositions);
foreach (var position in targetState.TerrainPositions) foreach (var position in targetState.TerrainPositions)
{ {
w.Write(position.X); w.Write(position.X);