Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
        }