コード例 #1
0
        public void Read(FileReader reader)
        {
            reader.ReadSignature(4, "GMX2");
            reader.SetByteOrder(true);
            HeaderSize = reader.ReadUInt32();

            while (reader.Position < reader.BaseStream.Length)
            {
                long pos = reader.Position;

                string Magic       = reader.ReadString(4);
                uint   SectionSize = reader.ReadUInt32();

                reader.SeekBegin(pos);
                switch (Magic)
                {
                case "PADX":
                    PADX padding = new PADX();
                    padding.Read(reader);
                    break;

                case "INDX":
                    INDX indexGrp = new INDX();
                    indexGrp.Read(reader, GetLastMesh());
                    GetLastMesh().IndexGroup = indexGrp;
                    break;

                case "VMAP":
                    VMAP vmap = new VMAP();
                    vmap.Read(reader);
                    GetLastMesh().VMapGroup = vmap;
                    break;

                case "MESH":
                    MESH mesh = new MESH();
                    mesh.Read(reader);
                    Meshes.Add(mesh);

                    Console.WriteLine($"MESH {mesh.VertexCount} {mesh.FaceCount} {mesh.SkinningFlags} {mesh.VertexSize}");
                    break;

                case "VERT":
                    VERT vert = new VERT();
                    vert.Read(reader, GetLastMesh());
                    GetLastMesh().VertexGroup = vert;
                    break;

                case "ENDX":
                    reader.ReadSignature(4, "ENDX");
                    uint EndSectionSize = reader.ReadUInt32();
                    break;

                default:
                    throw new Exception("Unknown section! " + Magic);
                }

                reader.SeekBegin(pos + SectionSize);
            }
            Console.WriteLine("MESHES " + Meshes.Count);
        }
コード例 #2
0
        public void Write(FileWriter writer)
        {
            writer.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian;

            PADX padding = new PADX();

            Console.WriteLine("Saving GMX");
            writer.WriteSignature("GMX2");
            writer.Write(HeaderSize);
            for (int i = 0; i < Meshes.Count; i++)
            {
                //Write mesh header
                padding.Write(writer, 32);
                Meshes[i].Write(writer);

                if (Meshes[i].VertexGroup != null)
                {
                    //Write Vertices
                    padding.Write(writer, 64);
                    Meshes[i].VertexGroup.Write(writer, Meshes[i]);
                }

                if (Meshes[i].IndexGroup != null)
                {
                    //Write Faces
                    padding.Write(writer, 64);
                    Meshes[i].IndexGroup.Write(writer);
                }

                if (Meshes[i].VMapGroup != null)
                {
                    //Write VMAPS
                    padding.Write(writer, 32);
                    Meshes[i].VMapGroup.Write(writer);
                }
            }
            writer.WriteSignature("ENDX");
            writer.Write(8); //Last section size
            writer.Close();
            writer.Dispose();
        }