protected override void ReadElement(StreamHandler reader, MovementStatusElements element, MovementStatus status, byte[] guid, byte[] tguid) { if (element == MovementStatusElements.GenericDword0) this.ChangeCounter = reader.ReadUInt32(); else base.ReadElement(reader, element, status, guid, tguid); }
protected override void ReadElement(StreamHandler reader, MovementStatusElements element, MovementStatus status, byte[] guid, byte[] tguid) { if (element == MovementStatusElements.GenericDword2) this.NewValue = reader.ReadSingle(); else base.ReadElement(reader, element, status, guid, tguid); }
public void SetStatus(MovementStatus status) { base.HaveFallData = status.HaveFallData; base.HaveFallDirection = status.HaveFallDirection; base.HavePitch = status.HavePitch; base.HaveSpline = status.HaveSpline; base.HaveSplineElevation = status.HaveSplineElevation; base.HaveTransportData = status.HaveTransportData; base.HaveTransportTime2 = status.HaveTransportTime2; base.HaveTransportTime3 = status.HaveTransportTime3; base.FallCosAngle = status.FallCosAngle; base.FallHorizontalSpeed = status.FallHorizontalSpeed; base.FallSinAngle = status.FallSinAngle; base.FallTime = status.FallTime; base.FallVerticalSpeed = status.FallVerticalSpeed; base.Flags = status.Flags; base.Flags2 = status.Flags2; base.Pitch = status.Pitch; base.Position = status.Position; base.SplineElevation = status.SplineElevation; base.TimeStamp = status.TimeStamp; base.TransportFacing = status.TransportFacing; base.TransportGuid = status.TransportGuid; base.TransportPosition = status.TransportPosition; base.TransportSeat = status.TransportSeat; base.TransportTime = status.TransportTime; base.TransportTime2 = status.TransportTime2; base.TransportTime3 = status.TransportTime3; }
protected override void WriteElement(StreamHandler writer, RegularMovementPacket.MovementStatusElements element, MovementStatus status, byte[] guid, byte[] tguid) { if (element == MovementStatusElements.GenericDword2) { writer.FlushUnalignedBits(); writer.WriteSingle(this.NewValue); } else base.WriteElement(writer, element, status, guid, tguid); }
protected override void WriteElement(StreamHandler writer, RegularMovementPacket.MovementStatusElements element, MovementStatus status, byte[] guid, byte[] tguid) { if (element == MovementStatusElements.GenericDword0) { writer.FlushUnalignedBits(); writer.WriteUInt32(this.ChangeCounter); } else base.WriteElement(writer, element, status, guid, tguid); }
protected virtual void WriteElement(StreamHandler writer, MovementStatusElements element, MovementStatus status, byte[] guid, byte[] tguid) { if (element >= MovementStatusElements.GuidByte0 && element <= MovementStatusElements.GuidByte7) { WriteByteMask(writer, guid[element - MovementStatusElements.GuidByte0]); return; } if (element >= MovementStatusElements.TransportGuidByte0 && element <= MovementStatusElements.TransportGuidByte7) { if (status.HaveTransportData) WriteByteMask(writer, tguid[element - MovementStatusElements.TransportGuidByte0]); return; } if (element >= MovementStatusElements.GuidByte0_2 && element <= MovementStatusElements.GuidByte7_2) { WriteByteSeq(writer, guid[element - MovementStatusElements.GuidByte0_2]); return; } if (element >= MovementStatusElements.TransportGuidByte0_2 && element <= MovementStatusElements.TransportGuidByte7_2) { if (status.HaveTransportData) WriteByteSeq(writer, tguid[element - MovementStatusElements.TransportGuidByte0_2]); return; } switch (element) { case MovementStatusElements.Flags: writer.UnalignedWriteBit(status.Flags == 0); break; case MovementStatusElements.Flags_2: if (status.Flags != 0) writer.UnalignedWriteInt((uint)status.Flags, 30); break; case MovementStatusElements.Flags2: writer.UnalignedWriteBit(status.Flags2 == 0); break; case MovementStatusElements.Flags2_2: if (status.Flags2 != 0) writer.UnalignedWriteInt((ushort)status.Flags2, 12); break; case MovementStatusElements.Timestamp: writer.UnalignedWriteBit(status.TimeStamp == 0); break; case MovementStatusElements.Timestamp_2: if (status.TimeStamp != 0) writer.WriteUInt32(status.TimeStamp); break; case MovementStatusElements.Pitch: writer.UnalignedWriteBit(!status.HavePitch); break; case MovementStatusElements.Pitch_2: if (status.HavePitch) writer.WriteSingle(status.Pitch); break; case MovementStatusElements.HaveFallData: writer.UnalignedWriteBit(status.HaveFallData); break; case MovementStatusElements.HaveFallDirection: if (status.HaveFallData) writer.UnalignedWriteBit(status.HaveFallDirection); break; case MovementStatusElements.HaveTransportData: writer.UnalignedWriteBit(status.HaveTransportData); break; case MovementStatusElements.TransportHaveTime2: if (status.HaveTransportData) writer.UnalignedWriteBit(status.HaveTransportTime2); break; case MovementStatusElements.TransportHaveTime3: if (status.HaveTransportData) writer.UnalignedWriteBit(status.HaveTransportTime3); break; case MovementStatusElements.HaveSpline: writer.UnalignedWriteBit(status.HaveSpline); break; case MovementStatusElements.HaveSpline2: writer.UnalignedWriteBit(status.HaveSpline2); break; case MovementStatusElements.SplineElev: writer.UnalignedWriteBit(!status.HaveSplineElevation); break; case MovementStatusElements.SplineElev_2: if (status.HaveSplineElevation) writer.WriteSingle(status.SplineElevation); break; case MovementStatusElements.PositionX: writer.WriteSingle(status.Position.X); break; case MovementStatusElements.PositionY: writer.WriteSingle(status.Position.Y); break; case MovementStatusElements.PositionZ: writer.WriteSingle(status.Position.Z); break; case MovementStatusElements.PositionO: writer.UnalignedWriteBit(status.Orientation == 0.0f); break; case MovementStatusElements.PositionO_2: if (status.Orientation != 0.0f) writer.WriteSingle(status.Orientation); break; case MovementStatusElements.FallTime: if (status.HaveFallData) writer.WriteUInt32(status.FallTime); break; case MovementStatusElements.FallHorizontalSpeed: if (status.HaveFallDirection) writer.WriteSingle(status.FallHorizontalSpeed); break; case MovementStatusElements.FallVerticalSpeed: if (status.HaveFallData) writer.WriteSingle(status.FallVerticalSpeed); break; case MovementStatusElements.FallCosAngle: if (status.HaveFallDirection) writer.WriteSingle(status.FallCosAngle); break; case MovementStatusElements.FallSinAngle: if (status.HaveFallDirection) writer.WriteSingle(status.FallSinAngle); break; case MovementStatusElements.TransportSeat: if (status.HaveTransportData) writer.WriteSByte(status.TransportSeat); break; case MovementStatusElements.TransportPositionO: if (status.HaveTransportData) writer.WriteSingle(status.TransportFacing); break; case MovementStatusElements.TransportPositionX: if (status.HaveTransportData) writer.WriteSingle(status.TransportPosition.X); break; case MovementStatusElements.TransportPositionY: if (status.HaveTransportData) writer.WriteSingle(status.TransportPosition.Y); break; case MovementStatusElements.TransportPositionZ: if (status.HaveTransportData) writer.WriteSingle(status.TransportPosition.Z); break; case MovementStatusElements.TransportTime: if (status.HaveTransportData) writer.WriteUInt32(status.TransportTime); break; case MovementStatusElements.TransportTime2: if (status.HaveTransportTime2) writer.WriteUInt32(status.TransportTime2); break; case MovementStatusElements.TransportTime3: if (status.HaveTransportTime3) writer.WriteUInt32(status.TransportTime3); break; default: throw new InvalidOperationException("Unknown element: " + element); } }
protected virtual void ReadElement(StreamHandler reader, MovementStatusElements element, MovementStatus status, byte[] guid, byte[] tguid) { if (element >= MovementStatusElements.GuidByte0 && element <= MovementStatusElements.GuidByte7) { ReadByteMask(reader, ref guid[element - MovementStatusElements.GuidByte0]); return; } if (element >= MovementStatusElements.TransportGuidByte0 && element <= MovementStatusElements.TransportGuidByte7) { if (status.HaveTransportData) ReadByteMask(reader, ref tguid[element - MovementStatusElements.TransportGuidByte0]); return; } if (element >= MovementStatusElements.GuidByte0_2 && element <= MovementStatusElements.GuidByte7_2) { ReadByteSeq(reader, ref guid[element - MovementStatusElements.GuidByte0_2]); return; } if (element >= MovementStatusElements.TransportGuidByte0_2 && element <= MovementStatusElements.TransportGuidByte7_2) { if (status.HaveTransportData) ReadByteSeq(reader, ref tguid[element - MovementStatusElements.TransportGuidByte0_2]); return; } switch (element) { case MovementStatusElements.Flags: status.Flags = (MovementFlags)(!reader.UnalignedReadBit() ? 1 : 0); break; case MovementStatusElements.Flags_2: if (status.Flags != 0) status.Flags = (MovementFlags)reader.UnalignedReadInt(30); break; case MovementStatusElements.Flags2: status.Flags2 = (MovementFlags2)(!reader.UnalignedReadBit() ? 1 : 0); break; case MovementStatusElements.Flags2_2: if (status.Flags2 != 0) status.Flags2 = (MovementFlags2)reader.UnalignedReadSmallInt(12); break; case MovementStatusElements.Timestamp: status.TimeStamp = !reader.UnalignedReadBit() ? 1U : 0U; break; case MovementStatusElements.Timestamp_2: if (status.TimeStamp != 0) status.TimeStamp = reader.ReadUInt32(); break; case MovementStatusElements.HaveFallData: status.HaveFallData = reader.UnalignedReadBit(); break; case MovementStatusElements.HaveFallDirection: if (status.HaveFallData) status.HaveFallDirection = reader.UnalignedReadBit(); break; case MovementStatusElements.HaveTransportData: status.HaveTransportData = reader.UnalignedReadBit(); break; case MovementStatusElements.TransportHaveTime2: if (status.HaveTransportData) status.HaveTransportTime2 = reader.UnalignedReadBit(); break; case MovementStatusElements.TransportHaveTime3: if (status.HaveTransportData) status.HaveTransportTime3 = reader.UnalignedReadBit(); break; case MovementStatusElements.HaveSpline: status.HaveSpline = reader.UnalignedReadBit(); break; case MovementStatusElements.HaveSpline2: status.HaveSpline2 = reader.UnalignedReadBit(); break; case MovementStatusElements.PositionX: status.Position.X = reader.ReadSingle(); break; case MovementStatusElements.PositionY: status.Position.Y = reader.ReadSingle(); break; case MovementStatusElements.PositionZ: status.Position.Z = reader.ReadSingle(); break; case MovementStatusElements.PositionO: status.Orientation = !reader.UnalignedReadBit() ? 1.0f : 0.0f; break; case MovementStatusElements.PositionO_2: if (status.Orientation != 0.0f) status.Orientation = reader.ReadSingle(); break; case MovementStatusElements.Pitch: status.HavePitch = !reader.UnalignedReadBit(); break; case MovementStatusElements.Pitch_2: if (status.HavePitch) status.Pitch = reader.ReadSingle(); break; case MovementStatusElements.FallTime: if (status.HaveFallData) status.FallTime = reader.ReadUInt32(); break; case MovementStatusElements.SplineElev: status.HaveSplineElevation = !reader.UnalignedReadBit(); break; case MovementStatusElements.SplineElev_2: if (status.HaveSplineElevation) status.SplineElevation = reader.ReadSingle(); break; case MovementStatusElements.FallHorizontalSpeed: if (status.HaveFallDirection) status.FallHorizontalSpeed = reader.ReadSingle(); break; case MovementStatusElements.FallVerticalSpeed: if (status.HaveFallData) status.FallVerticalSpeed = reader.ReadSingle(); break; case MovementStatusElements.FallCosAngle: if (status.HaveFallDirection) status.FallCosAngle = reader.ReadSingle(); break; case MovementStatusElements.FallSinAngle: if (status.HaveFallDirection) status.FallSinAngle = reader.ReadSingle(); break; case MovementStatusElements.TransportSeat: if (status.HaveTransportData) status.TransportSeat = reader.ReadSByte(); break; case MovementStatusElements.TransportPositionO: if (status.HaveTransportData) status.TransportFacing = reader.ReadSingle(); break; case MovementStatusElements.TransportPositionX: if (status.HaveTransportData) status.TransportPosition.X = reader.ReadSingle(); break; case MovementStatusElements.TransportPositionY: if (status.HaveTransportData) status.TransportPosition.Y = reader.ReadSingle(); break; case MovementStatusElements.TransportPositionZ: if (status.HaveTransportData) status.TransportPosition.Z = reader.ReadSingle(); break; case MovementStatusElements.TransportTime: if (status.HaveTransportData) status.TransportTime = reader.ReadUInt32(); break; case MovementStatusElements.TransportTime2: if (status.HaveTransportTime2) status.TransportTime2 = reader.ReadUInt32(); break; case MovementStatusElements.TransportTime3: if (status.HaveTransportTime3) status.TransportTime3 = reader.ReadUInt32(); break; default: throw new InvalidOperationException("Unknown element: " + element); } }