示例#1
0
        public int Read(ByteBufferReader reader)
        {
            BlockHeader header = new BlockHeader(reader);

            vertexCount = reader.ReadInt();
            reader.ReadInt(); //normal count
            reader.ReadInt(); //offset
            vertexData   = new VertexData[vertexCount];
            normalCounts = new int[vertexCount];
            normals      = new List <Vector3>();

            for (int i = 0; i < normalCounts.Length; i++)
            {
                normalCounts[i] = reader.ReadByte();
            }

            for (int i = 0; i < vertexCount; i++)
            {
                int normalCountForVertex = normalCounts[i];
                vertexData[i].vertex  = reader.ReadVector3();
                vertexData[i].normals = new Vector3[normalCountForVertex];

                for (int j = 0; j < normalCountForVertex; j++)
                {
                    Vector3 normal = reader.ReadVector3();
                    vertexData[i].normals[j] = normal;
                    normals.Add(normal);
                }
            }

            return(header.size);
        }
示例#2
0
        public FlatPolygonBlock(ByteBufferReader reader)
        {
            reader.FastForward(sizeof(int));
            size        = reader.ReadInt();
            normal      = reader.ReadVector3();
            center      = reader.ReadVector3();
            radius      = reader.ReadFloat();
            vertexCount = reader.ReadInt();
            red         = reader.ReadByte();
            green       = reader.ReadByte();
            blue        = reader.ReadByte();
            pad         = reader.ReadByte();
            vertexMap   = new PolygonVertex[vertexCount];

            for (int i = 0; i < vertexCount; i++)
            {
                vertexMap[i].vertexIndex = reader.ReadUShort();
                vertexMap[i].normalIndex = reader.ReadUShort();
            }
        }
示例#3
0
 public SortNormalBlock(ByteBufferReader reader)
 {
     reader.FastForward(sizeof(int));
     size           = reader.ReadInt();
     planeNormal    = reader.ReadVector3();
     planePoint     = reader.ReadVector3();
     reserved       = reader.ReadInt();
     frontOffset    = reader.ReadInt();
     backOffset     = reader.ReadInt();
     preListOffset  = reader.ReadInt();
     postListOffset = reader.ReadInt();
     onlineOffset   = reader.ReadInt();
     boundingBoxMin = reader.ReadVector3();
     boundingBoxMax = reader.ReadVector3();
 }
    VertexAnimationClipInfo getOrAddAnimationInfo(string aniResName)
    {
        aniResName = aniResName.ToLower();
        VertexAnimationClipInfo clipInfo = null;

        AnimationClipInfos.TryGetValue(aniResName, out clipInfo);

        if (clipInfo != null)
        {
            return(clipInfo);
        }

        var asset = Resources.Load <TextAsset>(aniResName);

        byte[] clipData = null;
        if (asset != null)
        {
            clipData = Resources.Load <TextAsset>(aniResName).bytes;
        }
        if (clipData == null)
        {
            Debug.LogError("animation clip data is null:" + aniResName);
            return(null);
        }

        clipInfo = new VertexAnimationClipInfo();

        ByteBufferReader bbuffer = new ByteBufferReader(clipData);
        int Count = bbuffer.ReadInt();

        for (int i = 0; i < Count; i++)
        {
            ClipMeshData meshData = GetMeshData(bbuffer);
            clipInfo.clipTotalTimeLen += meshData.timeLenth;
            clipInfo.clipLenghts.Add(meshData.timeLenth);
            clipInfo.everyClipFrameTimePoints.Add(new Vector2(meshData.Frame2TimePoint, meshData.Frame3TimePoint)); //,meshData.Frame4TimePoint
            clipInfo.clipMeshs.Add(meshData.GenMesh());
        }

        bbuffer.Close();
        clipData = null;

        AnimationClipInfos.Add(aniResName, clipInfo);
        return(clipInfo);
    }
    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);
    }
示例#6
0
 public BlockHeader(ByteBufferReader reader)
 {
     id   = reader.ReadInt();
     size = reader.ReadInt();
 }
示例#7
0
        private POFModel ParseFile(string filePath)
        {
            byte[] bytes = File.ReadAllBytes(filePath);

            reader = new ByteBufferReader(bytes);
            string signature = reader.ReadString(4);
            int    version   = reader.ReadInt();

            if (signature != "PSPO")
            {
                Debug.LogError("Invalid POF file signature: " + signature);
                return(null);
            }

            if (version < 2117)
            {
                Debug.LogError("Invalid POF file version: " + version);
                return(null);
            }

            while (!reader.ReachedEOF)
            {
                string blockType = reader.ReadString(4);
                int    blockSize = reader.ReadInt();
                int    startPtr  = reader.GetPtr();

                switch (blockType)
                {
                case "TXTR":
                    ParseTextureSection();
                    break;

                case "HDR2":
                    ParseHeaderSection();
                    break;

                case "OBJ2":
                    ParseSubObjectSection();
                    break;

                case "SPCL":
                    ParseSpecialPointSection();
                    break;

                case "GPNT":
                    ParseGunPointSection();
                    break;

                case "MPNT":
                    ParseMissilePointSection();
                    break;

                case "TGUN":
                    ParseTurretGunSection();
                    break;

                case "TMIS":
                    ParseTurretMissileSection();
                    break;

                case "DOCK":
                    ParseDockPointSection();
                    break;

                case "FUEL":
                    ParseFuelSection();
                    break;

                case "SHLD":
                    ParseShieldSection();
                    break;

                case "EYE ":
                    ParseEyeSection();
                    break;

                case "ACEN":
                    ParseAutoCenterSection();
                    break;

                case "INSG":
                    ParseInsigniaSection();
                    break;

                case "PATH":
                    ParsePathSection();
                    break;

                case "GLOW":
                    ParseGlowSection();
                    break;

                case "SLDC":
                    ParseShieldCollisionBSPSection();
                    break;

                case "PINF":
                    ParsePOFInfoSection(blockSize);
                    break;

                default:
                    Debug.LogError("UNKNOWN BLOCK TYPE " + blockType);
                    return(null);
                }

                AssertSectionFullyRead(blockType, startPtr, blockSize);
            }

            return(model);
        }
示例#8
0
        private void ParseTextureSection()
        {
            int textureCount = reader.ReadInt();

            model.textureList = new string[textureCount];

            for (int i = 0; i < textureCount; i++)
            {
                model.textureList[i] = reader.ReadString();
            }
        }