public EngineQsTransform ReadEngineQsTransform() { var e = new EngineQsTransform(); var flags = ReadByte(); if ((flags & 1) == 1) { e.PositionX = ReadSingle(); e.PositionY = ReadSingle(); e.PositionZ = ReadSingle(); } if ((flags & 2) == 2) { e.Pitch = ReadSingle(); e.Roll = ReadSingle(); e.Yaw = ReadSingle(); e.RotW = ReadSingle(); } if ((flags & 4) == 4) { e.ScaleX = ReadSingle(); e.ScaleY = ReadSingle(); e.ScaleZ = ReadSingle(); } return(e); }
public unsafe void Write(EngineQsTransform value) { var header = 0; if (value.Scale.Length() > 0) { header |= 1; } if (value.Rotation.Length() > 0) { header |= 2; } if (value.Position.Length() > 0) { header |= 4; } Write((byte)header); fixed(byte *bPtr = m_buffer) { if ((header & 1) == 1) { *((float *)bPtr) = value.Scale.X; *((float *)bPtr + 1) = value.Scale.Y; *((float *)bPtr + 2) = value.Scale.Z; m_stream.Write(m_buffer, 0, 12); } if ((header & 2) == 2) { *((float *)bPtr) = value.Rotation.X; *((float *)bPtr + 1) = value.Rotation.Y; *((float *)bPtr + 2) = value.Rotation.Z; *((float *)bPtr + 3) = value.Rotation.W; m_stream.Write(m_buffer, 0, 16); } if ((header & 4) == 4) { *((float *)bPtr) = value.Position.X; *((float *)bPtr + 1) = value.Position.Y; *((float *)bPtr + 2) = value.Position.Z; m_stream.Write(m_buffer, 0, 12); } } }
public EngineQsTransform ReadEngineQsTransform() { var e = new EngineQsTransform(); var header = ReadByte(); if (header == 0) { return(e); } unsafe { fixed(byte *bPtr = m_buffer) { if ((header & 1) == 1) { FillBuffer(12); e.Scale.X = *((float *)bPtr); e.Scale.Y = *((float *)bPtr + 1); e.Scale.Z = *((float *)bPtr + 2); } if ((header & 2) == 2) { FillBuffer(16); e.Rotation.X = *((float *)bPtr); e.Rotation.Y = *((float *)bPtr + 1); e.Rotation.Z = *((float *)bPtr + 2); e.Rotation.W = *((float *)bPtr + 3); } if ((header & 4) == 4) { FillBuffer(12); e.Position.X = *((float *)bPtr); e.Position.Y = *((float *)bPtr + 1); e.Position.Z = *((float *)bPtr + 2); } } } return(e); }