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(); }