Remove redundant switch from order serialization.

This commit is contained in:
Paul Chote
2017-12-17 11:07:06 +00:00
committed by abcdefg30
parent 987d0b77ac
commit 9c88fc154f

View File

@@ -238,71 +238,66 @@ namespace OpenRA
public byte[] Serialize()
{
var minLength = OrderString.Length + 1 + (IsImmediate ? 1 + TargetString.Length + 1 : 6);
var ret = new MemoryStream(minLength);
var w = new BinaryWriter(ret);
if (IsImmediate)
{
var ret = new MemoryStream(1 + OrderString.Length + 1 + TargetString.Length + 1);
var w = new BinaryWriter(ret);
w.Write((byte)0xfe);
w.Write((byte)0xFE);
w.Write(OrderString);
w.Write(TargetString);
return ret.ToArray();
}
switch (OrderString)
/*
* Format:
* u8: orderID.
* 0xFF: Full serialized order.
* varies: rest of order.
*/
w.Write((byte)0xFF);
w.Write(OrderString);
w.Write(UIntFromActor(Subject));
OrderFields fields = 0;
if (Target.SerializableType != TargetType.Invalid) fields |= OrderFields.Target;
if (TargetString != null) fields |= OrderFields.TargetString;
if (Queued) fields |= OrderFields.Queued;
if (ExtraLocation != CPos.Zero) fields |= OrderFields.ExtraLocation;
if (ExtraData != 0) fields |= OrderFields.ExtraData;
w.Write((byte)fields);
if (Target.SerializableType != TargetType.Invalid)
w.Write((byte)Target.Type);
switch (Target.SerializableType)
{
/*
* Format:
* u8: orderID.
* 0xFF: Full serialized order.
* varies: rest of order.
*/
default:
{
var ret = new MemoryStream();
var w = new BinaryWriter(ret);
w.Write((byte)0xFF);
w.Write(OrderString);
w.Write(UIntFromActor(Subject));
OrderFields fields = 0;
if (Target.SerializableType != TargetType.Invalid) fields |= OrderFields.Target;
if (TargetString != null) fields |= OrderFields.TargetString;
if (Queued) fields |= OrderFields.Queued;
if (ExtraLocation != CPos.Zero) fields |= OrderFields.ExtraLocation;
if (ExtraData != 0) fields |= OrderFields.ExtraData;
w.Write((byte)fields);
if (Target.SerializableType != TargetType.Invalid)
w.Write((byte)Target.Type);
switch (Target.SerializableType)
{
case TargetType.Actor:
w.Write(UIntFromActor(Target.SerializableActor));
break;
case TargetType.FrozenActor:
w.Write(Target.FrozenActor.Owner.PlayerActor.ActorID);
w.Write(Target.FrozenActor.ID);
break;
case TargetType.Terrain:
// SerializableCell is guaranteed to be non-null if Type == TargetType.Terrain
w.Write(Target.SerializableCell.Value);
break;
}
if (TargetString != null)
w.Write(TargetString);
if (ExtraLocation != CPos.Zero)
w.Write(ExtraLocation);
if (ExtraData != 0)
w.Write(ExtraData);
return ret.ToArray();
}
case TargetType.Actor:
w.Write(UIntFromActor(Target.SerializableActor));
break;
case TargetType.FrozenActor:
w.Write(Target.FrozenActor.Owner.PlayerActor.ActorID);
w.Write(Target.FrozenActor.ID);
break;
case TargetType.Terrain:
// SerializableCell is guaranteed to be non-null if Type == TargetType.Terrain
w.Write(Target.SerializableCell.Value);
break;
}
if (TargetString != null)
w.Write(TargetString);
if (ExtraLocation != CPos.Zero)
w.Write(ExtraLocation);
if (ExtraData != 0)
w.Write(ExtraData);
return ret.ToArray();
}
public override string ToString()