public EngineTransform ReadEngineTransform() { var e = new EngineTransform(); 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(); } if ((flags & 4) == 4) { e.ScaleX = ReadSingle(); e.ScaleY = ReadSingle(); e.ScaleZ = ReadSingle(); } return(e); }
public unsafe void Write(EngineTransform value) { var flags = 0; if (value.Scale.Length() > 0) { flags |= 1; } if (value.Rotation.Length() > 0) { flags |= 2; } if (value.Position.Length() > 0) { flags |= 4; } Write((byte)flags); fixed(byte *bPtr = m_buffer) { if ((flags & 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 ((flags & 2) == 2) { *((float *)bPtr) = value.Rotation.X; *((float *)bPtr + 1) = value.Rotation.Y; *((float *)bPtr + 2) = value.Rotation.Z; m_stream.Write(m_buffer, 0, 12); } if ((flags & 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 EngineTransform ReadEngineTransform() { var e = new EngineTransform(); 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(12); e.Rotation.X = *((float *)bPtr); e.Rotation.Y = *((float *)bPtr + 1); e.Rotation.Z = *((float *)bPtr + 2); } 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); }