public static Frame[] Deserialize(Reader reader)
        {
            bufferFrames.Clear();

            int length         = reader.ReadInt();
            int lastSavedFrame = -1;

            while (reader.Position < reader.Length)
            {
                int    frameCount   = reader.ReadInt();
                ushort commandCount = reader.ReadUShort();
                Frame  frame        = new Frame();
                for (int i = 0; i < commandCount; i++)
                {
                    Command com = new Command();
                    int     reconstructionCount = (com.Reconstruct(reader.Source, reader.Position));
                    reader.MovePosition(reconstructionCount);
                    frame.AddCommand(com);
                }
                for (int i = lastSavedFrame + 1; i < frameCount; i++)
                {
                    bufferFrames.Add(new Frame());
                }
                bufferFrames.Add(frame);
                lastSavedFrame = frameCount;
            }
            for (int i = lastSavedFrame + 1; i < length; i++)
            {
                bufferFrames.Add(new Frame());
            }
            return(bufferFrames.ToArray());
        }
示例#2
0
        /// <summary>
        /// Reconstructs this command from a serialized command and returns the size of the command.
        /// </summary>
        public int Reconstruct(byte[] Source, int StartIndex)
        {
            reader.Initialize(Source, StartIndex);

            ControllerID = reader.ReadByte();
            LeInput      = (InputCode)reader.ReadByte();

            ValuesMask = reader.ReadUInt();

            HasPosition = GetMaskBool(ValuesMask, DataType.Position);
            HasTarget   = GetMaskBool(ValuesMask, DataType.Target);
            HasFlag     = GetMaskBool(ValuesMask, DataType.Flag);
            HasCoord    = GetMaskBool(ValuesMask, DataType.Coord);
            HasCount    = GetMaskBool(ValuesMask, DataType.Count);
            HasSelect   = GetMaskBool(ValuesMask, DataType.Select);

            if (HasPosition)
            {
                _position.x = reader.ReadInt();
                _position.y = reader.ReadInt();
            }
            if (HasTarget)
            {
                _target = reader.ReadUShort();
            }
            if (HasFlag)
            {
                _flag = reader.ReadBool();
            }
            if (HasCoord)
            {
                _coord.x = reader.ReadInt();
                _coord.y = reader.ReadInt();
            }
            if (HasCount)
            {
                _count = reader.ReadInt();
            }

            if (HasSelect)
            {
                Select        = new Selection();
                reader.count += Select.Reconstruct(
                    AgentController.InstanceManagers[ControllerID],
                    reader.source,
                    reader.count);
            }

            return(reader.count - StartIndex);
        }
示例#3
0
        public void Read(Reader reader)
        {
            this.DataType = (DataType)reader.ReadByte();
            switch (this.DataType)
            {
            case DataType.Int:
                Value = reader.ReadInt();
                break;

            case DataType.UShort:
                Value = reader.ReadUShort();
                break;

            case DataType.Long:
                Value = reader.ReadLong();
                break;

            case DataType.Byte:
                Value = reader.ReadByte();
                break;

            case DataType.Bool:
                Value = reader.ReadBool();
                break;

            case DataType.String:
                Value = reader.ReadString();
                break;

            case DataType.ByteArray:
                Value = reader.ReadByteArray();
                break;
            }
        }
示例#4
0
 public void Read(Reader reader)
 {
     this.x = reader.ReadInt();
     this.y = reader.ReadInt();
 }