Exemplo n.º 1
0
        private static ComplexMesh TryComplexMesh(DatReader reader, uint fileId)
        {
            EmbeddedFile file = reader.LocateFile(fileId);

            if (file == null)
            {
                throw new Exception("Unable to locate file");
            }
            ComplexMesh mesh = new ComplexMesh(file);

            mesh.ReadComplexMesh();
            return(mesh);
        }
Exemplo n.º 2
0
        public ComplexMesh LoadComplexMesh(uint id)
        {
            EmbeddedFile file = m_portalReader.LocateFile(id);

            if (file == null)
            {
                return(null);
            }
            ComplexMesh mesh = new ComplexMesh(file);

            mesh.ReadComplexMesh();
            return(mesh);
        }
Exemplo n.º 3
0
        private void DumpMesh(uint id)
        {
            EmbeddedFile file = DataProvider.Instance.PortalDatReader.LocateFile(id);
            ComplexMesh  mesh = new ComplexMesh(file);

            mesh.ReadComplexMesh();
            try
            {
                file.PrepareFileForReading();
                rtbMeshDump.Clear();
                rtbMeshDump.AppendText(String.Format("Flags: 0x{1:X2}  Count: {2}{0}{0}", Environment.NewLine, mesh.Flags, mesh.SimpleMeshCount));
                WriteLineNumber(0, 0);
                for (int i = 0; i < file.m_debugData.Length; i++)
                {
                    if (i != 0 && i % 8 == 0)
                    {
                        // line break;
                        rtbMeshDump.AppendText(Environment.NewLine);
                        WriteLineNumber(i / 8, i * 4);
                    }
                    rtbMeshDump.AppendText(String.Format("{0:X8} ", file.m_debugData[i]));
                }
                rtbMeshDump.AppendText(String.Format("{0}{0}", Environment.NewLine));
                WriteLineNumber(0, 0);
                for (int i = 0; i < file.m_debugDataFloats.Length; i++)
                {
                    if (i != 0 && i % 8 == 0)
                    {
                        // line break;
                        rtbMeshDump.AppendText(Environment.NewLine);
                        WriteLineNumber(i / 8, i * 4);
                    }
                    rtbMeshDump.AppendText(String.Format("{0,8:0.00000} ", file.m_debugDataFloats[i]));
                }
            }
            finally
            {
                file.FileReadingComplete();
            }
        }
Exemplo n.º 4
0
        public static void TestComplexMeshes()
        {
            DatReader reader = DataProvider.Instance.PortalDatReader;

            //EmbeddedFile file = reader.LocateFile(0x0200001e);
            EmbeddedFile file = reader.LocateFile(0x020000A1);

            //EmbeddedFile file = reader.LocateFile(0x0200012c);
            if (file == null)
            {
                Console.WriteLine("File not found.");
            }
            else
            {
                Console.WriteLine("File found, has length of {0}.", file.FileLength);

                // dump the file data

                byte[] data = reader.RetrieveFileData(file);
                Dump(data, "mesh 0x" + file.FileId.ToString("X8"));

                ComplexMesh mesh = new ComplexMesh(file);
                mesh.ReadComplexMesh();

                //TreeOutput.OutputTree(@"D:\", mesh, mesh.ID);

                List <EmbeddedFileEntry> fileList = MeshProvider.Instance.GetComplexMeshList();
                fileList.Sort();
                uint             minS = UInt32.MinValue, minF = 0;
                List <CMDBGData> dbgList = new List <CMDBGData>();
                foreach (EmbeddedFileEntry fileEntry in fileList)
                {
                    try
                    {
                        if (fileEntry.Size == 164)
                        {
                            TryComplexMesh(reader, fileEntry.FileID);
                            //Debugger.Break();
                        }
                        if (fileEntry.Size > minS)
                        {
                            minS = fileEntry.Size;
                            minF = fileEntry.FileID;
                        }
                        ComplexMesh listMesh = TryComplexMesh(reader, fileEntry.FileID);
                        dbgList.Add(new CMDBGData(fileEntry.FileID, fileEntry.Size, listMesh.Flags, listMesh.SimpleMeshCount));
                    }
                    catch (Exception)
                    {
                        //Debugger.Break();
                        //Console.WriteLine("Failed on object 0x{0:X8}, error: {1}", fileEntry.FileID, ex.Message);
                    }
                }
                dbgList.Sort();

                FileInfo exportFile = new FileInfo(Settings.TreeExportDir + "\\complex_listing.txt");
                if (exportFile.Exists)
                {
                    exportFile.Delete();
                }
                using (FileStream stream = exportFile.OpenWrite())
                {
                    using (StreamWriter writer = new StreamWriter(stream))
                    {
                        writer.WriteLine(String.Format("Flag\tCount\tSize\tID"));
                        foreach (CMDBGData dbgData in dbgList)
                        {
                            writer.WriteLine(String.Format("{1:X1}\t{3:000}\t{4:000}\t{2:X8}", writer.NewLine, dbgData.Flags, dbgData.ID, dbgData.SimpleCount, dbgData.Size));
                        }
                    }
                }

                //Debugger.Break();
            }
        }