コード例 #1
0
        public void Write()
        {
            using (FileStream fs = new FileStream(LevSavePath, FileMode.Create, FileAccess.Write))
            {
                using (BinaryWriterEx bw = new BinaryWriterEx(fs))
                {
                    bw.Flush();
                    bw.Seek((int)0, SeekOrigin.Begin);
                    bw.Write(fileSize);
                    header.Write(bw);
                    bw.Seek((int)header.ptrMeshInfo + 4, SeekOrigin.Begin);
                    meshinfo.Write(bw);
                    bw.Seek((int)meshinfo.ptrVertexArray + 4, SeekOrigin.Begin);
                    foreach (Vertex vert in verts)
                    {
                        vert.Write(bw);
                    }
                    bw.Seek((int)header.ptrRestartPts + 4, SeekOrigin.Begin);
                    foreach (var restartPoint in restartPts)
                    {
                        restartPoint.Write(bw);
                    }
                    bw.Seek((int)meshinfo.ptrVisDataArray + 4, SeekOrigin.Begin);
                    foreach (var visdat in visdata)
                    {
                        visdat.Write(bw);
                    }
                    bw.Seek((int)meshinfo.ptrQuadBlockArray + 4, SeekOrigin.Begin);
                    foreach (var quad in quads)
                    {
                        quad.Write(bw);
                    }

                    /*
                     * if (header.ptrSkybox != 0) {
                     *  bw.Seek((int) header.ptrSkybox + 4, SeekOrigin.Begin);
                     *  skybox.Write(bw);
                     * }*/


                    if (header.ptrVcolAnim != 0)
                    {
                        bw.Seek((int)header.ptrVcolAnim + 4, SeekOrigin.Begin);
                        foreach (var vertanim in vertanims)
                        {
                            vertanim.Write(bw);
                        }
                    }

                    if (header.ptrAiNav != 0)
                    {
                        bw.Seek((int)header.ptrAiNav + 4, SeekOrigin.Begin);
                        nav.Write(bw);
                    }

                    if (header.ptrTrialData != 0)
                    {
                        bw.Seek((int)header.ptrTrialData + 4, SeekOrigin.Begin);
                        trial.Write(bw);
                    }

                    if (header.cntSpawnPts != 0)
                    {
                        bw.Seek((int)header.ptrSpawnPts + 4, SeekOrigin.Begin);
                        unkadv.Write(bw);
                    }

                    bw.Seek((int)posu1_ptr + 4, SeekOrigin.Begin);
                    for (int i = 0; i < posu1_cnt; i++)
                    {
                        posu1[i].Write(bw);
                    }


                    //write pickup models
                    //starts out right, but anims ruin it
                    bw.Seek((int)(header.ptrModelsPtr + 4), SeekOrigin.Begin);
                    for (int i = 0; i < header.numModels; i++)
                    {
                        bw.Seek((int)pickUpModelDataLocation[i * 2 + 0] + 4, SeekOrigin.Begin);
                        bw.Write(pickUpModelDataLocation[i * 2 + 1]);
                        bw.Seek((int)pickUpModelDataLocation[i * 2 + 1] + 4, SeekOrigin.Begin);
                        //dynamics[i].Write(bw);
                    }

                    bw.Close();
                }
                fs.Close();
            }
        }