コード例 #1
0
ファイル: Order.cs プロジェクト: danielwhelansb/OpenRA
        public byte[] Serialize()
        {
            if (IsImmediate)                            /* chat, whatever */
            {
                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;
                }

                w.Write((byte)fields);

                if (TargetActor != null)
                {
                    w.Write(UIntFromActor(TargetActor));
                }
                if (TargetLocation != CPos.Zero)
                {
                    w.Write(TargetLocation.ToInt2());
                }
                if (TargetString != null)
                {
                    w.Write(TargetString);
                }
                if (ExtraLocation != CPos.Zero)
                {
                    w.Write(ExtraLocation.ToInt2());
                }

                return(ret.ToArray());
            }
            }
        }