OpenRA.Order.Serialize C# (CSharp) Method

Serialize() public method

public Serialize ( ) : byte[]
return byte[]
        public byte[] Serialize()
        {
            if (IsImmediate)
            {
                var ret = new MemoryStream();
                var w = new BinaryWriter(ret);
                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.
                 */
                default:
                    // TODO: specific serializers for specific orders.
                    {
                        var ret = new MemoryStream();
                        var w = new BinaryWriter(ret);
                        w.Write((byte)0xFF);
                        w.Write(OrderString);
                        w.Write(UIntFromActor(Subject));

                        OrderFields fields = 0;
                        if (TargetActor != null) fields |= OrderFields.TargetActor;
                        if (TargetLocation != CPos.Zero) fields |= OrderFields.TargetLocation;
                        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 (TargetActor != null)
                            w.Write(UIntFromActor(TargetActor));
                        if (TargetLocation != CPos.Zero)
                            w.Write(TargetLocation);
                        if (TargetString != null)
                            w.Write(TargetString);
                        if (ExtraLocation != CPos.Zero)
                            w.Write(ExtraLocation);
                        if (ExtraData != 0)
                            w.Write(ExtraData);

                        return ret.ToArray();
                    }
            }
        }