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()); }
/// <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); }
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; } }
public void Read(Reader reader) { this.x = reader.ReadInt(); this.y = reader.ReadInt(); }