Exemplo n.º 1
0
        public TexturedPolygonBlock(ByteBufferReader reader)
        {
            reader.FastForward(sizeof(int));
            size         = reader.ReadInt();
            normal       = reader.ReadVector3();
            center       = reader.ReadVector3();
            radius       = reader.ReadFloat();
            vertexCount  = reader.ReadInt();
            textureIndex = reader.ReadInt();

            vertexMap = new PolygonVertex[vertexCount];

            for (int i = 0; i < vertexCount; i++)
            {
                vertexMap[i].vertexIndex = reader.ReadUShort();
                vertexMap[i].normalIndex = reader.ReadUShort();
                vertexMap[i].u           = reader.ReadFloat();
                vertexMap[i].v           = reader.ReadFloat();
            }
        }
    ClipMeshData GetMeshData(ByteBufferReader bbuffer)
    {
        ClipMeshData meshData = new ClipMeshData();

        meshData.timeLenth       = bbuffer.ReadFloat();
        meshData.Frame2TimePoint = bbuffer.ReadFloat();
        meshData.Frame3TimePoint = bbuffer.ReadFloat();
        // meshData.Frame4TimePoint = bbuffer.ReadFloat();

        meshData.subMeshCount        = bbuffer.ReadInt();
        meshData.subMeshTriangleLens = new int[meshData.subMeshCount];
        for (int m = 0; m < meshData.subMeshCount; m++)
        {
            meshData.subMeshTriangleLens[m] = bbuffer.ReadInt();
        }

        int triangleBufferCount = bbuffer.ReadInt();

        meshData.triangleBuffer = new int[triangleBufferCount];
        for (int m = 0; m < triangleBufferCount; m++)
        {
            meshData.triangleBuffer[m] = bbuffer.ReadInt();
        }

        int vertexBufferCount = bbuffer.ReadInt();

        meshData.vertexBuffer = new float[vertexBufferCount];
        for (int m = 0; m < vertexBufferCount; m++)
        {
            meshData.vertexBuffer[m] = bbuffer.ReadFloat();
        }

        int normalBufferCount = bbuffer.ReadInt();

        meshData.normalBuffer = new float[normalBufferCount];
        for (int m = 0; m < normalBufferCount; m++)
        {
            meshData.normalBuffer[m] = bbuffer.ReadFloat();
        }

        int tangentBufferCount = bbuffer.ReadInt();

        meshData.tangentBuffer = new float[tangentBufferCount];
        for (int m = 0; m < tangentBufferCount; m++)
        {
            meshData.tangentBuffer[m] = bbuffer.ReadFloat();
        }

        int uvBufferCount = bbuffer.ReadInt();

        meshData.uvBuffer = new float[uvBufferCount];
        for (int m = 0; m < uvBufferCount; m++)
        {
            meshData.uvBuffer[m] = bbuffer.ReadFloat();
        }

        int uv2BufferCount = bbuffer.ReadInt();

        meshData.uv2Buffer = new float[uv2BufferCount];
        for (int m = 0; m < uv2BufferCount; m++)
        {
            meshData.uv2Buffer[m] = bbuffer.ReadFloat();
        }

        //int colorBufferCount = bbuffer.ReadInt();
        //meshData.colorBuffer = new float[colorBufferCount];
        //for (int m = 0; m < colorBufferCount; m++)
        //{
        //    meshData.colorBuffer[m] = bbuffer.ReadFloat();
        //}

        return(meshData);
    }
Exemplo n.º 3
0
        private int readDataByteBuffer(ByteBufferReader reader, List <object> data)
        {
            Assert.IsNotNull(reader);
            Assert.IsNotNull(data);
            int count = 0;

            while (reader.Position < reader.Buffer.Count)
            {
                int    index = (int)reader.ReadVarint32();
                object value = null;
                switch (index)
                {
                case 0:
                    value = reader.ReadBool();
                    break;

                case 1:
                    value = reader.ReadByte();
                    break;

                case 2:
                    value = reader.ReadUint16();
                    break;

                case 3:
                    value = reader.ReadUint32();
                    break;

                case 4:
                    value = reader.ReadUint64();
                    break;

                case 5:
                    value = reader.ReadInt16();
                    break;

                case 6:
                    value = reader.ReadInt32();
                    break;

                case 7:
                    value = reader.ReadInt64();
                    break;

                case 8:
                    value = reader.ReadVarint32();
                    break;

                case 9:
                    value = reader.ReadVarint64();
                    break;

                case 10:
                    value = reader.ReadSVarint32();
                    break;

                case 11:
                    value = reader.ReadSVarint64();
                    break;

                case 12:
                    value = reader.ReadFloat();
                    break;

                case 13:
                    value = reader.ReadDouble();
                    break;

                case 14:
                    value = reader.ReadString();
                    break;

                case 15: {
                    int length = (int)reader.ReadVarint32();
                    value = new byte[length];
                    reader.ReadBuffer((byte[])value, 0, length);
                }
                break;

                case 16: {
                    int size = (int)reader.ReadVarint32();
                    reader.Skip(size);
                    value = size;
                }
                break;

                default:
                    Assert.Fail();
                    break;
                }

                Assert.AreEqual(value, data[index], "index: " + index);
                count++;
            }

            return(count);
        }
Exemplo n.º 4
0
        private void ParseHeaderSection()
        {
            Header header = model.header;

            header.maxRadius      = reader.ReadFloat();
            header.objectFlags    = reader.ReadInt();
            header.subObjectCount = reader.ReadInt();
            header.minBounding    = reader.ReadVector3();
            header.maxBounding    = reader.ReadVector3();
            int detailLevels = reader.ReadInt();

            header.detailLevelIndices = new int[detailLevels];

            for (int i = 0; i < detailLevels; i++)
            {
                header.detailLevelIndices[i] = reader.ReadInt();
            }

            int debrisCount = reader.ReadInt();

            header.debrisCountIndices = new int[debrisCount];

            for (int i = 0; i < debrisCount; i++)
            {
                header.debrisCountIndices[i] = reader.ReadInt();
            }

            header.mass            = reader.ReadFloat();
            header.centerOfMass    = reader.ReadVector3();
            header.momentOfInertia = reader.ReadFloatArray(9);
            int crossSectionCount = reader.ReadInt();

            if (crossSectionCount < 0)
            {
                crossSectionCount = 0;
            }
            header.crossSections = new CrossSection[crossSectionCount];

            for (int i = 0; i < header.crossSections.Length; i++)
            {
                header.crossSections[i].depth  = reader.ReadFloat();
                header.crossSections[i].radius = reader.ReadFloat();
            }

            header.muzzleLights = new MuzzleLight[reader.ReadInt()];

            for (int i = 0; i < header.muzzleLights.Length; i++)
            {
                header.muzzleLights[i].location  = reader.ReadVector3();
                header.muzzleLights[i].lightType = reader.ReadInt();
            }
        }