Rewrite Serialize to improve clarity.
This commit is contained in:
@@ -250,51 +250,54 @@ namespace OpenRA
|
|||||||
return ret.ToArray();
|
return ret.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Format:
|
|
||||||
* u8: orderID.
|
|
||||||
* 0xFF: Full serialized order.
|
|
||||||
* varies: rest of order.
|
|
||||||
*/
|
|
||||||
|
|
||||||
w.Write((byte)0xFF);
|
w.Write((byte)0xFF);
|
||||||
w.Write(OrderString);
|
w.Write(OrderString);
|
||||||
w.Write(UIntFromActor(Subject));
|
w.Write(UIntFromActor(Subject));
|
||||||
|
|
||||||
OrderFields fields = 0;
|
OrderFields fields = 0;
|
||||||
if (Target.SerializableType != TargetType.Invalid) fields |= OrderFields.Target;
|
if (Target.SerializableType != TargetType.Invalid)
|
||||||
if (TargetString != null) fields |= OrderFields.TargetString;
|
fields |= OrderFields.Target;
|
||||||
if (Queued) fields |= OrderFields.Queued;
|
|
||||||
if (ExtraLocation != CPos.Zero) fields |= OrderFields.ExtraLocation;
|
if (TargetString != null)
|
||||||
if (ExtraData != 0) fields |= OrderFields.ExtraData;
|
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);
|
w.Write((byte)fields);
|
||||||
|
|
||||||
if (Target.SerializableType != TargetType.Invalid)
|
if (fields.HasField(OrderFields.Target))
|
||||||
w.Write((byte)Target.SerializableType);
|
|
||||||
|
|
||||||
switch (Target.SerializableType)
|
|
||||||
{
|
{
|
||||||
case TargetType.Actor:
|
w.Write((byte)Target.SerializableType);
|
||||||
w.Write(UIntFromActor(Target.SerializableActor));
|
switch (Target.SerializableType)
|
||||||
break;
|
{
|
||||||
case TargetType.FrozenActor:
|
case TargetType.Actor:
|
||||||
w.Write(Target.FrozenActor.Owner.PlayerActor.ActorID);
|
w.Write(UIntFromActor(Target.SerializableActor));
|
||||||
w.Write(Target.FrozenActor.ID);
|
break;
|
||||||
break;
|
case TargetType.FrozenActor:
|
||||||
case TargetType.Terrain:
|
w.Write(Target.FrozenActor.Owner.PlayerActor.ActorID);
|
||||||
// SerializableCell is guaranteed to be non-null if Type == TargetType.Terrain
|
w.Write(Target.FrozenActor.ID);
|
||||||
w.Write(Target.SerializableCell.Value);
|
break;
|
||||||
break;
|
case TargetType.Terrain:
|
||||||
|
// SerializableCell is guaranteed to be non-null if Type == TargetType.Terrain
|
||||||
|
w.Write(Target.SerializableCell.Value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TargetString != null)
|
if (fields.HasField(OrderFields.TargetString))
|
||||||
w.Write(TargetString);
|
w.Write(TargetString);
|
||||||
|
|
||||||
if (ExtraLocation != CPos.Zero)
|
if (fields.HasField(OrderFields.ExtraLocation))
|
||||||
w.Write(ExtraLocation);
|
w.Write(ExtraLocation);
|
||||||
|
|
||||||
if (ExtraData != 0)
|
if (fields.HasField(OrderFields.ExtraData))
|
||||||
w.Write(ExtraData);
|
w.Write(ExtraData);
|
||||||
|
|
||||||
return ret.ToArray();
|
return ret.ToArray();
|
||||||
|
|||||||
Reference in New Issue
Block a user