コード例 #1
0
        /* Application Load */
        public MainWindow()
        {
            InitializeComponent();

            /* Hide Main Window while we load */
            this.Hide();

            /* Check if OpenJK Directory has been set and if not ask for it */
            if (Settings.GetValue("OpenJKDirectory") == null)
            {
                Settings.FindOpenJKDirectory();
            }

            /* Create Home Directory for projects and settings */
            if (!Directory.Exists(Settings.UsersProjectHome))
            {
                Directory.CreateDirectory(Settings.UsersProjectHome);
            }

            /* Show Splash Screen While we load */
            SplashLoading splashLoading = new SplashLoading();

            splashLoading.Show();
            splashLoading.Activate();

            /* Runs Import Job which fetches our imported data */
            Thread ImportJob = new Thread(() => {
                ImportJob import = new ImportJob();
                import.BeginImport();
            });

            ImportJob.Start();

            /* Now hide these until a project is loaded / created */
            ProjectDataTree.Visibility  = Visibility.Hidden;
            ImportedDataTree.Visibility = Visibility.Hidden;
        }
コード例 #2
0
        /* Handles importing of all files from existing PK3 Files */
        public void BeginImport()
        {
            string[] pk3s = Directory.GetFiles(Settings.MBIIDirectory, "*.pk3");

            SiegeDeserializer seigeDeserializer = new SiegeDeserializer();

            UpdateProgressMax(pk3s.Count());

            foreach (string pk3 in pk3s)
            {
                Log($"Importing {Path.GetFileName(pk3)}");

                using (ZipArchive zipFile = ZipFile.OpenRead(pk3))
                {
                    foreach (ZipArchiveEntry entry in zipFile.Entries)
                    {
                        // Import Character File (.MBCH)
                        if (entry.FullName.Contains("ext_data/mb2/character/"))
                        {
                            if (entry.FullName.ToLower().Contains(".mbch"))
                            {
                                Log($"Importing {Path.GetFileName(entry.FullName)}");

                                using (var stream = entry.Open())
                                {
                                    StreamReader reader = new StreamReader(stream);
                                    string       text   = reader.ReadToEnd();

                                    try
                                    {
                                        ImportedData.importedCharacters.Add(seigeDeserializer.Deserialize <Character>(text));
                                    }
                                    catch (Exception e)
                                    {
                                        failedImports.Add($"{System.IO.Path.GetFileName(pk3)}/{entry.FullName}: {e.Message}");
                                    }
                                }
                            }
                        }

                        // Import Team File (.MBTC)
                        if (entry.FullName.Contains("ext_data/mb2/teamconfig/"))
                        {
                            if (entry.FullName.ToLower().Contains(".mbtc"))
                            {
                                Log($"Importing {Path.GetFileName(entry.FullName)}");

                                using (var stream = entry.Open())
                                {
                                    StreamReader reader = new StreamReader(stream);
                                    string       text   = reader.ReadToEnd();

                                    try
                                    {
                                        ImportedData.importedTeams.Add(seigeDeserializer.Deserialize <Team>(text));
                                    }
                                    catch (Exception e)
                                    {
                                        failedImports.Add($"{System.IO.Path.GetFileName(pk3)}/{entry.FullName}: {e.Message}");
                                    }
                                }
                            }
                        }

                        // Import Siege File (.SIEGE)
                        if (entry.FullName.Contains("maps/"))
                        {
                            if (entry.FullName.ToLower().Contains(".siege"))
                            {
                                Log($"Importing {Path.GetFileName(entry.FullName)}");

                                using (var stream = entry.Open())
                                {
                                    StreamReader reader = new StreamReader(stream);
                                    string       text   = reader.ReadToEnd();

                                    try
                                    {
                                        Siege siege = seigeDeserializer.Deserialize <Siege>(text);

                                        /* This allows us to keep track of what map this siege file belongs to */
                                        siege.map = entry.FullName.ToLower().Replace(".siege", "").Replace(@"maps/", "");

                                        ImportedData.importedSieges.Add(siege);
                                    }
                                    catch (Exception e)
                                    {
                                        failedImports.Add($"{System.IO.Path.GetFileName(pk3)}/{entry.FullName}: {e.Message}");
                                    }
                                }
                            }
                        }

                        // Import a map file (.BSP) */
                        if (entry.FullName.ToLower().Contains(".bsp"))
                        {
                            Log($"Importing {Path.GetFileName(entry.FullName)}");

                            ImportedData.importedMaps.Add(new Map()
                            {
                                parentPK3 = pk3,
                                fileName  = Path.GetFileName(entry.FullName),
                                name      = Path.GetFileNameWithoutExtension(entry.FullName),
                                entryPath = entry.FullName
                            });
                        }

                        // Import a map file (.skin) */
                        if (entry.FullName.ToLower().Contains(".skin"))
                        {
                            Log($"Importing {Path.GetFileName(entry.FullName)}");

                            ImportedData.importedSkins.Add(new Skin()
                            {
                                parentPK3 = pk3,
                                fileName  = Path.GetFileName(entry.FullName),
                                name      = Path.GetFileNameWithoutExtension(entry.FullName),
                                entryPath = entry.FullName,
                                modelName = Directory.GetParent(entry.FullName).Name
                            });
                        }

                        // Import a player model file (.gml) */
                        if (entry.FullName.ToLower().Contains(".glm") && entry.FullName.ToLower().Contains("players"))
                        {
                            Log($"Importing {Path.GetFileName(entry.FullName)}");

                            ImportedData.importedPlayerModels.Add(new PlayerModel()
                            {
                                parentPK3 = pk3,
                                fileName  = Path.GetFileName(entry.FullName),
                                name      = Directory.GetParent(entry.FullName).Name,
                                entryPath = entry.FullName,
                            });
                        }

                        // Import a weapon model file (.gml) */
                        if (entry.FullName.ToLower().Contains(".glm") && entry.FullName.ToLower().Contains("weapon"))
                        {
                            Log($"Importing {Path.GetFileName(entry.FullName)}");

                            ImportedData.importedWeaponModels.Add(new WeaponModel()
                            {
                                parentPK3 = pk3,
                                fileName  = Path.GetFileName(entry.FullName),
                                name      = Directory.GetParent(entry.FullName).Name,
                                entryPath = entry.FullName,
                            });
                        }
                    }
                }

                IncrementProgress();
            }

            Log($"Importing Complete...");

            /* Write latest failed imports to a log file */
            if (File.Exists(Settings.FailedImportLog))
            {
                File.Delete(Settings.FailedImportLog);
            }

            using (StreamWriter sw = File.CreateText(Settings.FailedImportLog))
            {
                sw.WriteLine("Failed Imports from Base Game Files");
                sw.WriteLine($"Last Run: {DateTime.Now.ToString("MM/dd/yyyy H:mm")}");
                sw.WriteLine("-----------------------------------------------------");

                foreach (string failedImport in failedImports)
                {
                    sw.WriteLine(failedImport);
                }
            }

            /* Any Additional Filtering or manipulation of imported data */
            ImportedData.importedCharacters = new ObservableCollection <Character>(ImportedData.importedCharacters
                                                                                   .Where(x => x.name != null && x.name.Trim() != "")
                                                                                   .OrderBy(x => x.name).ToList());

            Application.Current.Dispatcher.Invoke(() => {
                /* Close Splash */
                SplashLoading splashLoading = WindowFinder.FindOpenWindowByType <SplashLoading>();
                splashLoading.Close();

                MainWindow mainWindow = WindowFinder.FindOpenWindowByType <MainWindow>();

                /* Setup Imported Data Treeview Datasources */
                mainWindow.ImportedCharacters.ItemsSource = ImportedData.importedCharacters;

                /* Show Window */
                mainWindow.Show();
                mainWindow.Activate();
            });
        }