Пример #1
0
        private async void ExtractBinaries_Click(object sender, RoutedEventArgs e)
        {
            ButtonExtractBinaries.IsEnabled = false;

            await Task.WhenAll(_controls.Where(c => c.CheckBoxEnable.IsChecked()).Select(c => ExtractBinary(c, _outputPath)));

            ButtonExtractBinaries.IsEnabled = true;

            if (!string.IsNullOrWhiteSpace(_outputPath) && Directory.Exists(_outputPath))
            {
                if (UserHandler.Instance.Settings.CreateModFileWhenExtracting)
                {
                    ModFileUtils.CreateModFileFromPath(_outputPath);
                }

                if (UserHandler.Instance.Settings.OpenModFolderAfterExtracting)
                {
                    string?windir = Environment.GetEnvironmentVariable("WINDIR");
                    if (windir == null)
                    {
                        App.Instance.ShowMessage("Environment variable not found", $"Cannot open path \"{_outputPath}\" in Windows Explorer because the WINDIR environment variable was not found.");
                    }
                    else
                    {
                        Process.Start(Path.Combine(windir, "explorer.exe"), _outputPath);
                    }
                }
            }
        }
        private void OpenMod_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog {
                Filter = _modFileFilter
            };

            dialog.OpenModsRootFolder();

            bool?openResult = dialog.ShowDialog();

            if (!openResult.HasValue || !openResult.Value)
            {
                return;
            }

            List <UserAsset> userAssets = ModFileUtils.GetAssetsFromModFilePath(dialog.FileName);

            if (userAssets.Count == 0)
            {
                return;
            }

            foreach (AssetTabControl assetTabControl in App.Instance.MainWindow !.AssetTabControls)
            {
                foreach (AssetRowControl rowHandler in assetTabControl.RowControls)
                {
                    AbstractAsset asset     = rowHandler.Asset;
                    UserAsset?    userAsset = userAssets.Find(a => a.AssetName == asset.AssetName && a.AssetType == asset.AssetType);
                    if (userAsset != null)
                    {
                        asset.ImportValuesFromUserAsset(userAsset);

                        rowHandler.UpdateGui();
                    }
                }
            }
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            AudioAudioAssetTabControl        = new AssetTabControl(BinaryFileType.Audio, AssetType.Audio, "Audio files (*.wav)|*.wav", "Audio");
            CoreShadersAssetTabControl       = new AssetTabControl(BinaryFileType.Core, AssetType.Shader, "Shader files (*.glsl)|*.glsl", "Shaders");
            DdModelBindingsAssetTabControl   = new AssetTabControl(BinaryFileType.Dd, AssetType.ModelBinding, "Model binding files (*.txt)|*.txt", "Model Bindings");
            DdModelsAssetTabControl          = new AssetTabControl(BinaryFileType.Dd, AssetType.Model, "Model files (*.obj)|*.obj", "Models");
            DdShadersAssetTabControl         = new AssetTabControl(BinaryFileType.Dd, AssetType.Shader, "Shader files (*.glsl)|*.glsl", "Shaders");
            DdTexturesAssetTabControl        = new AssetTabControl(BinaryFileType.Dd, AssetType.Texture, "Texture files (*.png)|*.png", "Textures");
            ParticleParticlesAssetTabControl = new AssetTabControl(BinaryFileType.Particle, AssetType.Particle, "Particle files (*.bin)|*.bin", "Particles");

            AssetTabControls = new List <AssetTabControl> {
                AudioAudioAssetTabControl, CoreShadersAssetTabControl, DdModelBindingsAssetTabControl, DdModelsAssetTabControl, DdShadersAssetTabControl, DdTexturesAssetTabControl, ParticleParticlesAssetTabControl
            };

            UpdateTextBoxSizes();

            TabControl.Items.Add(new TabItem {
                Header = "audio/Audio", Content = AudioAudioAssetTabControl
            });
            TabControl.Items.Add(new TabItem {
                Header = "core/Shaders", Content = CoreShadersAssetTabControl
            });
            TabControl.Items.Add(new TabItem {
                Header = "dd/Model Bindings", Content = DdModelBindingsAssetTabControl
            });
            TabControl.Items.Add(new TabItem {
                Header = "dd/Models", Content = DdModelsAssetTabControl
            });
            TabControl.Items.Add(new TabItem {
                Header = "dd/Shaders", Content = DdShadersAssetTabControl
            });
            TabControl.Items.Add(new TabItem {
                Header = "dd/Textures", Content = DdTexturesAssetTabControl
            });
            TabControl.Items.Add(new TabItem {
                Header = "particle/Particles", Content = ParticleParticlesAssetTabControl
            });

            TabControl.SelectedIndex = Math.Clamp(UserHandler.Instance.Cache.ActiveTabIndex, 0, AssetTabControls.Count - 1);

            if (NetworkHandler.Instance.Tool != null && App.LocalVersion < Version.Parse(NetworkHandler.Instance.Tool.VersionNumber))
            {
                UpdateRecommendedWindow updateRecommendedWindow = new UpdateRecommendedWindow(NetworkHandler.Instance.Tool.VersionNumber, App.LocalVersion.ToString(), App.ApplicationName, App.ApplicationDisplayName);
                updateRecommendedWindow.ShowDialog();
            }

            // After the window has loaded, some user controls still need to finish loading, so set a timer to make sure everything has loaded.
            // TODO: Find a better way to do this.
            DispatcherTimer timer = new DispatcherTimer {
                Interval = new TimeSpan(0, 0, 0, 0, 10)
            };

            timer.Tick += (sender, e) =>
            {
                if (File.Exists(UserHandler.Instance.Cache.OpenedModFilePath))
                {
                    List <UserAsset> assets = ModFileUtils.GetAssetsFromModFilePath(UserHandler.Instance.Cache.OpenedModFilePath);
                    if (assets.Count > 0)
                    {
                        foreach (AssetTabControl tabHandler in AssetTabControls)
                        {
                            tabHandler.UpdateAssetTabControls(assets);
                        }
                    }
                }

                timer.Stop();
            };
            timer.Start();
        }