From 724c95aae1031611d37008b736ffee5d4e11a65d Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Mon, 9 Aug 2021 21:10:19 +0200 Subject: [PATCH] Versioning Configuration --- CUE4Parse | 2 +- FModel/Constants.cs | 2 + FModel/Settings/UserSettings.cs | 79 +++++++++++++---- FModel/ViewModels/CUE4ParseViewModel.cs | 18 +++- FModel/ViewModels/SettingsViewModel.cs | 49 ++++++++++- .../Resources/Controls/DictionaryEditor.xaml | 49 +++++++++++ .../Controls/DictionaryEditor.xaml.cs | 86 +++++++++++++++++++ .../Resources/Controls/PropertiesPopout.xaml | 2 +- FModel/Views/SettingsView.xaml | 10 ++- FModel/Views/SettingsView.xaml.cs | 29 ++++++- README.md | 2 +- 11 files changed, 300 insertions(+), 28 deletions(-) create mode 100644 FModel/Views/Resources/Controls/DictionaryEditor.xaml create mode 100644 FModel/Views/Resources/Controls/DictionaryEditor.xaml.cs diff --git a/CUE4Parse b/CUE4Parse index 059f4a06..1f4b957e 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 059f4a06ed9eb84560f7cb2381b989ecc2c1f671 +Subproject commit 1f4b957ee9d6d4b3d73eab6e98a84041b1123bc6 diff --git a/FModel/Constants.cs b/FModel/Constants.cs index 66e3bd14..5d2955b7 100644 --- a/FModel/Constants.cs +++ b/FModel/Constants.cs @@ -21,5 +21,7 @@ namespace FModel public const string _FN_LIVE_TRIGGER = "fortnite-live.manifest"; public const string _VAL_LIVE_TRIGGER = "valorant-live.manifest"; + + public const string _NO_PRESET_TRIGGER = "Hand Made"; } } \ No newline at end of file diff --git a/FModel/Settings/UserSettings.cs b/FModel/Settings/UserSettings.cs index d617661a..79087089 100644 --- a/FModel/Settings/UserSettings.cs +++ b/FModel/Settings/UserSettings.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Windows.Input; +using CUE4Parse.UE4.Objects.Core.Serialization; using CUE4Parse.UE4.Versions; using CUE4Parse_Conversion.Meshes; using CUE4Parse_Conversion.Textures; @@ -206,21 +207,21 @@ namespace FModel.Settings private IDictionary _presets = new Dictionary { - {FGame.Unknown, "None"}, - {FGame.FortniteGame, "None"}, - {FGame.ShooterGame, "None"}, - {FGame.DeadByDaylight, "None"}, - {FGame.OakGame, "None"}, - {FGame.Dungeons, "None"}, - {FGame.WorldExplorers, "None"}, - {FGame.g3, "None"}, - {FGame.StateOfDecay2, "None"}, - {FGame.Prospect, "None"}, - {FGame.Indiana, "None"}, - {FGame.RogueCompany, "None"}, - {FGame.SwGame, "None"}, - {FGame.Platform, "None"}, - {FGame.BendGame, "None"} + {FGame.Unknown, Constants._NO_PRESET_TRIGGER}, + {FGame.FortniteGame, Constants._NO_PRESET_TRIGGER}, + {FGame.ShooterGame, Constants._NO_PRESET_TRIGGER}, + {FGame.DeadByDaylight, Constants._NO_PRESET_TRIGGER}, + {FGame.OakGame, Constants._NO_PRESET_TRIGGER}, + {FGame.Dungeons, Constants._NO_PRESET_TRIGGER}, + {FGame.WorldExplorers, Constants._NO_PRESET_TRIGGER}, + {FGame.g3, Constants._NO_PRESET_TRIGGER}, + {FGame.StateOfDecay2, Constants._NO_PRESET_TRIGGER}, + {FGame.Prospect, Constants._NO_PRESET_TRIGGER}, + {FGame.Indiana, Constants._NO_PRESET_TRIGGER}, + {FGame.RogueCompany, Constants._NO_PRESET_TRIGGER}, + {FGame.SwGame, Constants._NO_PRESET_TRIGGER}, + {FGame.Platform, Constants._NO_PRESET_TRIGGER}, + {FGame.BendGame, Constants._NO_PRESET_TRIGGER} }; public IDictionary Presets { @@ -275,6 +276,54 @@ namespace FModel.Settings get => _overridedUEVersion; set => SetProperty(ref _overridedUEVersion, value); } + + private IDictionary> _overridedCustomVersions = new Dictionary> + { + {FGame.Unknown, null}, + {FGame.FortniteGame, null}, + {FGame.ShooterGame, null}, + {FGame.DeadByDaylight, null}, + {FGame.OakGame, null}, + {FGame.Dungeons, null}, + {FGame.WorldExplorers, null}, + {FGame.g3, null}, + {FGame.StateOfDecay2, null}, + {FGame.Prospect, null}, + {FGame.Indiana, null}, + {FGame.RogueCompany, null}, + {FGame.SwGame, null}, + {FGame.Platform, null}, + {FGame.BendGame, null} + }; + public IDictionary> OverridedCustomVersions + { + get => _overridedCustomVersions; + set => SetProperty(ref _overridedCustomVersions, value); + } + + private IDictionary> _overridedOptions = new Dictionary> + { + {FGame.Unknown, null}, + {FGame.FortniteGame, null}, + {FGame.ShooterGame, null}, + {FGame.DeadByDaylight, null}, + {FGame.OakGame, null}, + {FGame.Dungeons, null}, + {FGame.WorldExplorers, null}, + {FGame.g3, null}, + {FGame.StateOfDecay2, null}, + {FGame.Prospect, null}, + {FGame.Indiana, null}, + {FGame.RogueCompany, null}, + {FGame.SwGame, null}, + {FGame.Platform, null}, + {FGame.BendGame, null} + }; + public IDictionary> OverridedOptions + { + get => _overridedOptions; + set => SetProperty(ref _overridedOptions, value); + } private IDictionary> _customDirectories = new Dictionary> { diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index b3ff68a3..0543ab48 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -71,19 +71,31 @@ namespace FModel.ViewModels case Constants._FN_LIVE_TRIGGER: { Game = FGame.FortniteGame; - Provider = new StreamedFileProvider("FortniteLive", true, new VersionContainer(UserSettings.Default.OverridedGame[Game], UserSettings.Default.OverridedUEVersion[Game])); + Provider = new StreamedFileProvider("FortniteLive", true, + new VersionContainer( + UserSettings.Default.OverridedGame[Game], + UserSettings.Default.OverridedUEVersion[Game], + UserSettings.Default.OverridedCustomVersions[Game], + UserSettings.Default.OverridedOptions[Game])); break; } case Constants._VAL_LIVE_TRIGGER: { Game = FGame.ShooterGame; - Provider = new StreamedFileProvider("ValorantLive", true, new VersionContainer(UserSettings.Default.OverridedGame[Game], UserSettings.Default.OverridedUEVersion[Game])); + Provider = new StreamedFileProvider("ValorantLive", true, + new VersionContainer( + UserSettings.Default.OverridedGame[Game], + UserSettings.Default.OverridedUEVersion[Game], + UserSettings.Default.OverridedCustomVersions[Game], + UserSettings.Default.OverridedOptions[Game])); break; } default: { Game = gameDirectory.SubstringBeforeLast("\\Content").SubstringAfterLast("\\").ToEnum(FGame.Unknown); - var versions = new VersionContainer(UserSettings.Default.OverridedGame[Game], UserSettings.Default.OverridedUEVersion[Game]); + var versions = new VersionContainer( + UserSettings.Default.OverridedGame[Game], UserSettings.Default.OverridedUEVersion[Game], + UserSettings.Default.OverridedCustomVersions[Game], UserSettings.Default.OverridedOptions[Game]); if (Game == FGame.StateOfDecay2) Provider = new DefaultFileProvider(new DirectoryInfo(gameDirectory), new List diff --git a/FModel/ViewModels/SettingsViewModel.cs b/FModel/ViewModels/SettingsViewModel.cs index 84956277..c2a2125c 100644 --- a/FModel/ViewModels/SettingsViewModel.cs +++ b/FModel/ViewModels/SettingsViewModel.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; +using CUE4Parse.UE4.Objects.Core.Misc; +using CUE4Parse.UE4.Objects.Core.Serialization; using CUE4Parse.UE4.Versions; using CUE4Parse_Conversion.Meshes; using CUE4Parse_Conversion.Textures; @@ -31,7 +33,11 @@ namespace FModel.ViewModels public string SelectedPreset { get => _selectedPreset; - set => SetProperty(ref _selectedPreset, value); + set + { + SetProperty(ref _selectedPreset, value); + RaisePropertyChanged("EnableElements"); + } } private EGame _selectedUeGame; @@ -47,6 +53,20 @@ namespace FModel.ViewModels get => _selectedUeVersion; set => SetProperty(ref _selectedUeVersion, value); } + + private List _selectedCustomVersions; + public List SelectedCustomVersions + { + get => _selectedCustomVersions; + set => SetProperty(ref _selectedCustomVersions, value); + } + + private Dictionary _selectedOptions; + public Dictionary SelectedOptions + { + get => _selectedOptions; + set => SetProperty(ref _selectedOptions, value); + } private ELanguage _selectedAssetLanguage; public ELanguage SelectedAssetLanguage @@ -133,6 +153,8 @@ namespace FModel.ViewModels public ReadOnlyObservableCollection LodExportFormats { get; private set; } public ReadOnlyObservableCollection TextureExportFormats { get; private set; } + public bool EnableElements => SelectedPreset == Constants._NO_PRESET_TRIGGER; + private readonly FGame _game; private Game _gamePreset; private string _outputSnapshot; @@ -141,6 +163,8 @@ namespace FModel.ViewModels private string _presetSnapshot; private EGame _ueGameSnapshot; private UE4Version _ueVersionSnapshot; + private List _customVersionsSnapshot; + private Dictionary _optionsSnapshot; private ELanguage _assetLanguageSnapshot; private EEnabledDisabled _directoryStructureSnapshot; private ECompressedAudio _compressedAudioSnapshot; @@ -163,6 +187,8 @@ namespace FModel.ViewModels _presetSnapshot = UserSettings.Default.Presets[_game]; _ueGameSnapshot = UserSettings.Default.OverridedGame[_game]; _ueVersionSnapshot = UserSettings.Default.OverridedUEVersion[_game]; + _customVersionsSnapshot = UserSettings.Default.OverridedCustomVersions[_game]; + _optionsSnapshot = UserSettings.Default.OverridedOptions[_game]; _assetLanguageSnapshot = UserSettings.Default.AssetLanguage; _directoryStructureSnapshot = UserSettings.Default.KeepDirectoryStructure; _compressedAudioSnapshot = UserSettings.Default.CompressedAudioMode; @@ -176,6 +202,8 @@ namespace FModel.ViewModels SelectedPreset = _presetSnapshot; SelectedUeGame = _ueGameSnapshot; SelectedUeVersion = _ueVersionSnapshot; + SelectedCustomVersions = _customVersionsSnapshot; + SelectedOptions = _optionsSnapshot; SelectedAssetLanguage = _assetLanguageSnapshot; SelectedDirectoryStructure = _directoryStructureSnapshot; SelectedCompressedAudio = _compressedAudioSnapshot; @@ -223,12 +251,26 @@ namespace FModel.ViewModels if (_gamePreset?.Versions == null || !_gamePreset.Versions.TryGetValue(key, out var version)) return; SelectedUeGame = version.GameEnum.ToEnum(EGame.GAME_UE4_LATEST); SelectedUeVersion = (UE4Version)version.UeVer; + + SelectedCustomVersions = new List(); + foreach (var (guid, v) in version.CustomVersions) + { + SelectedCustomVersions.Add(new FCustomVersion {Key = new FGuid(guid), Version = v}); + } + + SelectedOptions = new Dictionary(); + foreach (var (k, v) in version.Options) + { + SelectedOptions[k] = v; + } } public void ResetPreset() { SelectedUeGame = _ueGameSnapshot; SelectedUeVersion = _ueVersionSnapshot; + SelectedCustomVersions = _customVersionsSnapshot; + SelectedOptions = _optionsSnapshot; } public SettingsOut Save() @@ -236,6 +278,7 @@ namespace FModel.ViewModels var ret = SettingsOut.Nothing; if (_ueGameSnapshot != SelectedUeGame || _ueVersionSnapshot != SelectedUeVersion || // comboboxes + _customVersionsSnapshot != SelectedCustomVersions || _optionsSnapshot != SelectedOptions || _outputSnapshot != UserSettings.Default.OutputDirectory || // textbox _gameSnapshot != UserSettings.Default.GameDirectory) // textbox ret = SettingsOut.Restart; @@ -247,6 +290,8 @@ namespace FModel.ViewModels UserSettings.Default.Presets[_game] = SelectedPreset; UserSettings.Default.OverridedGame[_game] = SelectedUeGame; UserSettings.Default.OverridedUEVersion[_game] = SelectedUeVersion; + UserSettings.Default.OverridedCustomVersions[_game] = SelectedCustomVersions; + UserSettings.Default.OverridedOptions[_game] = SelectedOptions; UserSettings.Default.AssetLanguage = SelectedAssetLanguage; UserSettings.Default.KeepDirectoryStructure = SelectedDirectoryStructure; UserSettings.Default.CompressedAudioMode = SelectedCompressedAudio; @@ -267,7 +312,7 @@ namespace FModel.ViewModels private IEnumerable EnumerateUpdateModes() => Enum.GetValues(SelectedUpdateMode.GetType()).Cast(); private IEnumerable EnumeratePresets() { - yield return "None"; + yield return Constants._NO_PRESET_TRIGGER; } private IEnumerable EnumerateUeGames() => Enum.GetValues(SelectedUeGame.GetType()).Cast(); private IEnumerable EnumerateUeVersions() => Enum.GetValues(SelectedUeVersion.GetType()).Cast(); diff --git a/FModel/Views/Resources/Controls/DictionaryEditor.xaml b/FModel/Views/Resources/Controls/DictionaryEditor.xaml new file mode 100644 index 00000000..8e12a075 --- /dev/null +++ b/FModel/Views/Resources/Controls/DictionaryEditor.xaml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +