diff --git a/FModel/App.xaml.cs b/FModel/App.xaml.cs
index c66b1fc3..8dd208f5 100644
--- a/FModel/App.xaml.cs
+++ b/FModel/App.xaml.cs
@@ -43,14 +43,40 @@ namespace FModel
UserSettings.Default = new UserSettings();
}
+ var createMe = false;
if (!Directory.Exists(UserSettings.Default.OutputDirectory))
+ {
UserSettings.Default.OutputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Output");
+ }
+ if (!Directory.Exists(UserSettings.Default.RawDataDirectory))
+ {
+ createMe = true;
+ UserSettings.Default.RawDataDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
+ }
+ if (!Directory.Exists(UserSettings.Default.PropertiesDirectory))
+ {
+ createMe = true;
+ UserSettings.Default.PropertiesDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
+ }
+ if (!Directory.Exists(UserSettings.Default.TextureDirectory))
+ {
+ createMe = true;
+ UserSettings.Default.TextureDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
+ }
+ if (!Directory.Exists(UserSettings.Default.AudioDirectory))
+ {
+ createMe = true;
+ UserSettings.Default.AudioDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
+ }
if (!Directory.Exists(UserSettings.Default.ModelDirectory))
+ {
+ createMe = true;
UserSettings.Default.ModelDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
+ }
Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FModel"));
Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Backups"));
- Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Exports"));
+ if (createMe) Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Exports"));
Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Logs"));
Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, ".data"));
diff --git a/FModel/Settings/UserSettings.cs b/FModel/Settings/UserSettings.cs
index 698f2568..28041f15 100644
--- a/FModel/Settings/UserSettings.cs
+++ b/FModel/Settings/UserSettings.cs
@@ -52,6 +52,34 @@ namespace FModel.Settings
set => SetProperty(ref _outputDirectory, value);
}
+ private string _rawDataDirectory;
+ public string RawDataDirectory
+ {
+ get => _rawDataDirectory;
+ set => SetProperty(ref _rawDataDirectory, value);
+ }
+
+ private string _propertiesDirectory;
+ public string PropertiesDirectory
+ {
+ get => _propertiesDirectory;
+ set => SetProperty(ref _propertiesDirectory, value);
+ }
+
+ private string _textureDirectory;
+ public string TextureDirectory
+ {
+ get => _textureDirectory;
+ set => SetProperty(ref _textureDirectory, value);
+ }
+
+ private string _audioDirectory;
+ public string AudioDirectory
+ {
+ get => _audioDirectory;
+ set => SetProperty(ref _audioDirectory, value);
+ }
+
private string _modelDirectory;
public string ModelDirectory
{
diff --git a/FModel/ViewModels/AudioPlayerViewModel.cs b/FModel/ViewModels/AudioPlayerViewModel.cs
index 7b7d8b71..5d096225 100644
--- a/FModel/ViewModels/AudioPlayerViewModel.cs
+++ b/FModel/ViewModels/AudioPlayerViewModel.cs
@@ -307,7 +307,7 @@ namespace FModel.ViewModels
{
Title = "Save Audio",
FileName = fileToSave.FileName,
- InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports")
+ InitialDirectory = UserSettings.Default.AudioDirectory
};
if (!(bool) saveFileDialog.ShowDialog()) return;
path = saveFileDialog.FileName;
diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs
index 82b581f3..2fb70140 100644
--- a/FModel/ViewModels/CUE4ParseViewModel.cs
+++ b/FModel/ViewModels/CUE4ParseViewModel.cs
@@ -729,9 +729,8 @@ namespace FModel.ViewModels
private void SaveAndPlaySound(string fullPath, string ext, byte[] data)
{
- var userDir = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
if (fullPath.StartsWith("/")) fullPath = fullPath[1..];
- var savedAudioPath = Path.Combine(userDir,
+ var savedAudioPath = Path.Combine(UserSettings.Default.AudioDirectory,
UserSettings.Default.KeepDirectoryStructure ? fullPath : fullPath.SubstringAfterLast('/')).Replace('\\', '/') + $".{ext.ToLower()}";
if (!UserSettings.Default.IsAutoOpenSounds)
@@ -776,13 +775,11 @@ namespace FModel.ViewModels
public void ExportData(string fullPath)
{
var fileName = fullPath.SubstringAfterLast('/');
- var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports");
-
if (Provider.TrySavePackage(fullPath, out var assets))
{
foreach (var kvp in assets)
{
- var path = Path.Combine(directory, UserSettings.Default.KeepDirectoryStructure ? kvp.Key : kvp.Key.SubstringAfterLast('/')).Replace('\\', '/');
+ var path = Path.Combine(UserSettings.Default.RawDataDirectory, UserSettings.Default.KeepDirectoryStructure ? kvp.Key : kvp.Key.SubstringAfterLast('/')).Replace('\\', '/');
Directory.CreateDirectory(path.SubstringBeforeLast('/'));
File.WriteAllBytes(path, kvp.Value);
}
diff --git a/FModel/ViewModels/SettingsViewModel.cs b/FModel/ViewModels/SettingsViewModel.cs
index 8fe1a5d9..984b0b2c 100644
--- a/FModel/ViewModels/SettingsViewModel.cs
+++ b/FModel/ViewModels/SettingsViewModel.cs
@@ -133,6 +133,10 @@ namespace FModel.ViewModels
private readonly FGame _game;
private Game _gamePreset;
private string _outputSnapshot;
+ private string _rawDataSnapshot;
+ private string _propertiesSnapshot;
+ private string _textureSnapshot;
+ private string _audioSnapshot;
private string _modelSnapshot;
private string _gameSnapshot;
private EUpdateMode _updateModeSnapshot;
@@ -155,6 +159,10 @@ namespace FModel.ViewModels
public void Initialize()
{
_outputSnapshot = UserSettings.Default.OutputDirectory;
+ _rawDataSnapshot = UserSettings.Default.RawDataDirectory;
+ _propertiesSnapshot = UserSettings.Default.PropertiesDirectory;
+ _textureSnapshot = UserSettings.Default.TextureDirectory;
+ _audioSnapshot = UserSettings.Default.AudioDirectory;
_modelSnapshot = UserSettings.Default.ModelDirectory;
_gameSnapshot = UserSettings.Default.GameDirectory;
_updateModeSnapshot = UserSettings.Default.UpdateMode;
@@ -252,6 +260,10 @@ namespace FModel.ViewModels
if (_ueGameSnapshot != SelectedUeGame || // combobox
_customVersionsSnapshot != SelectedCustomVersions || _optionsSnapshot != SelectedOptions ||
_outputSnapshot != UserSettings.Default.OutputDirectory || // textbox
+ _rawDataSnapshot != UserSettings.Default.RawDataDirectory || // textbox
+ _propertiesSnapshot != UserSettings.Default.PropertiesDirectory || // textbox
+ _textureSnapshot != UserSettings.Default.TextureDirectory || // textbox
+ _audioSnapshot != UserSettings.Default.AudioDirectory || // textbox
_modelSnapshot != UserSettings.Default.ModelDirectory || // textbox
_gameSnapshot != UserSettings.Default.GameDirectory) // textbox
ret = SettingsOut.Restart;
diff --git a/FModel/ViewModels/TabControlViewModel.cs b/FModel/ViewModels/TabControlViewModel.cs
index 1f0f2ab8..26570a3a 100644
--- a/FModel/ViewModels/TabControlViewModel.cs
+++ b/FModel/ViewModels/TabControlViewModel.cs
@@ -266,7 +266,7 @@ namespace FModel.ViewModels
{
if (image == null) return;
var fileName = $"{image.ExportName}.png";
- var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports",
+ var directory = Path.Combine(UserSettings.Default.TextureDirectory,
UserSettings.Default.KeepDirectoryStructure ? Directory : "", fileName!).Replace('\\', '/');
if (!autoSave)
@@ -275,7 +275,7 @@ namespace FModel.ViewModels
{
Title = "Save Texture",
FileName = fileName,
- InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"),
+ InitialDirectory = UserSettings.Default.TextureDirectory,
Filter = "PNG Files (*.png)|*.png|All Files (*.*)|*.*"
};
var result = saveFileDialog.ShowDialog();
@@ -298,7 +298,7 @@ namespace FModel.ViewModels
public void SaveProperty(bool autoSave)
{
var fileName = Path.ChangeExtension(Header, ".json");
- var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports",
+ var directory = Path.Combine(UserSettings.Default.PropertiesDirectory,
UserSettings.Default.KeepDirectoryStructure ? Directory : "", fileName).Replace('\\', '/');
if (!autoSave)
@@ -307,7 +307,7 @@ namespace FModel.ViewModels
{
Title = "Save Property",
FileName = fileName,
- InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"),
+ InitialDirectory = UserSettings.Default.PropertiesDirectory,
Filter = "JSON Files (*.json)|*.json|INI Files (*.ini)|*.ini|XML Files (*.xml)|*.xml|All Files (*.*)|*.*"
};
var result = saveFileDialog.ShowDialog();
diff --git a/FModel/Views/AudioPlayer.xaml.cs b/FModel/Views/AudioPlayer.xaml.cs
index 290c0b07..c510408d 100644
--- a/FModel/Views/AudioPlayer.xaml.cs
+++ b/FModel/Views/AudioPlayer.xaml.cs
@@ -59,7 +59,7 @@ namespace FModel.Views
var openFileDialog = new OpenFileDialog
{
Title = "Select an audio file",
- InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"),
+ InitialDirectory = UserSettings.Default.AudioDirectory,
Filter = "OGG Files (*.ogg)|*.ogg|WAV Files (*.wav)|*.wav|WEM Files (*.wem)|*.wem|ADPCM Files (*.adpcm)|*.adpcm|All Files (*.*)|*.*",
Multiselect = true
};
diff --git a/FModel/Views/MapViewer.xaml.cs b/FModel/Views/MapViewer.xaml.cs
index de81a677..d679f099 100644
--- a/FModel/Views/MapViewer.xaml.cs
+++ b/FModel/Views/MapViewer.xaml.cs
@@ -30,7 +30,7 @@ namespace FModel.Views
private void OnClick(object sender, RoutedEventArgs e)
{
if (_applicationView.MapViewer.MapImage == null) return;
- var path = Path.Combine(UserSettings.Default.OutputDirectory, "Exports", "MiniMap.png");
+ var path = Path.Combine(UserSettings.Default.TextureDirectory, "MiniMap.png");
var saveFileDialog = new SaveFileDialog
{
diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml
index c9ef4b2d..2b33ae47 100644
--- a/FModel/Views/SettingsView.xaml
+++ b/FModel/Views/SettingsView.xaml
@@ -39,6 +39,7 @@
+
@@ -46,18 +47,53 @@
+
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -66,8 +102,8 @@
-
-
+
@@ -76,8 +112,8 @@
-
-
+
@@ -86,15 +122,15 @@
-
+
-
-
+
-
-
+
@@ -104,8 +140,8 @@
-
-
+
+
@@ -116,8 +152,8 @@
-
-
+
@@ -126,7 +162,7 @@
-
-
-
@@ -190,11 +226,11 @@
-
-
-
diff --git a/FModel/Views/SettingsView.xaml.cs b/FModel/Views/SettingsView.xaml.cs
index e77d63af..015de7c5 100644
--- a/FModel/Views/SettingsView.xaml.cs
+++ b/FModel/Views/SettingsView.xaml.cs
@@ -63,6 +63,22 @@ namespace FModel.Views
{
if (TryBrowse(out var path)) UserSettings.Default.GameDirectory = path;
}
+ private void OnBrowseRawData(object sender, RoutedEventArgs e)
+ {
+ if (TryBrowse(out var path)) UserSettings.Default.RawDataDirectory = path;
+ }
+ private void OnBrowseProperties(object sender, RoutedEventArgs e)
+ {
+ if (TryBrowse(out var path)) UserSettings.Default.PropertiesDirectory = path;
+ }
+ private void OnBrowseTexture(object sender, RoutedEventArgs e)
+ {
+ if (TryBrowse(out var path)) UserSettings.Default.TextureDirectory = path;
+ }
+ private void OnBrowseAudio(object sender, RoutedEventArgs e)
+ {
+ if (TryBrowse(out var path)) UserSettings.Default.AudioDirectory = path;
+ }
private void OnBrowseModels(object sender, RoutedEventArgs e)
{
if (TryBrowse(out var path)) UserSettings.Default.ModelDirectory = path;