Fix terrain positions for targets not being serialized for Orders
This commit is contained in:
@@ -156,7 +156,18 @@ namespace OpenRA
|
||||
else
|
||||
{
|
||||
var pos = new WPos(r.ReadInt32(), r.ReadInt32(), r.ReadInt32());
|
||||
target = Target.FromPos(pos);
|
||||
|
||||
var numberOfTerrainPositions = r.ReadByte();
|
||||
if (numberOfTerrainPositions == 0)
|
||||
target = Target.FromPos(pos);
|
||||
else
|
||||
{
|
||||
var terrainPositions = new WPos[numberOfTerrainPositions];
|
||||
for (var i = 0; i < numberOfTerrainPositions; i++)
|
||||
terrainPositions[i] = new WPos(r.ReadInt32(), r.ReadInt32(), r.ReadInt32());
|
||||
|
||||
target = Target.FromSerializedTerrainPosition(pos, terrainPositions);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -388,6 +399,21 @@ namespace OpenRA
|
||||
w.Write(targetState.Pos.X);
|
||||
w.Write(targetState.Pos.Y);
|
||||
w.Write(targetState.Pos.Z);
|
||||
|
||||
// Don't send extra data over the network that will be restored by the Target ctor
|
||||
var terrainPositions = targetState.TerrainPositions.Length;
|
||||
if (terrainPositions == 1 && targetState.TerrainPositions[0] == targetState.Pos)
|
||||
w.Write((byte)0);
|
||||
else
|
||||
{
|
||||
w.Write((byte)terrainPositions);
|
||||
foreach (var position in targetState.TerrainPositions)
|
||||
{
|
||||
w.Write(position.X);
|
||||
w.Write(position.Y);
|
||||
w.Write(position.Z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user