From e94f558d6f838ca22d84f4ae04da80bddba9e66a Mon Sep 17 00:00:00 2001 From: Asval Date: Sun, 19 May 2024 20:31:36 +0200 Subject: [PATCH] split EGames --- CUE4Parse | 2 +- FModel/Extensions/EnumExtensions.cs | 17 +++++++++++++++-- FModel/ViewModels/SettingsViewModel.cs | 18 +++++++++++++++--- FModel/Views/SettingsView.xaml | 15 ++++++++++++++- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index ef969ec1..d11401ea 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit ef969ec1d5e2078233d042d61570bbfe5eaf2573 +Subproject commit d11401ea0ac61ca6dd32343b64e93095334e9689 diff --git a/FModel/Extensions/EnumExtensions.cs b/FModel/Extensions/EnumExtensions.cs index 3c3fa9a9..9b764f02 100644 --- a/FModel/Extensions/EnumExtensions.cs +++ b/FModel/Extensions/EnumExtensions.cs @@ -11,8 +11,21 @@ public static class EnumExtensions { var fi = value.GetType().GetField(value.ToString()); if (fi == null) return $"{value} ({value:D})"; + var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); - return attributes.Length > 0 ? attributes[0].Description : $"{value} ({value:D})"; + if (attributes.Length > 0) return attributes[0].Description; + + + var suffix = $"{value:D}"; + var current = Convert.ToInt32(suffix); + var target = current & ~0xF; + if (current != target) + { + var values = Enum.GetValues(value.GetType()); + var index = Array.IndexOf(values, value); + suffix = values.GetValue(index - (current - target))?.ToString(); + } + return $"{value} ({suffix})"; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -43,4 +56,4 @@ public static class EnumExtensions var i = Array.IndexOf(values, value) - 1; return i == -1 ? (T) values.GetValue(values.Length - 1) : (T) values.GetValue(i); } -} \ No newline at end of file +} diff --git a/FModel/ViewModels/SettingsViewModel.cs b/FModel/ViewModels/SettingsViewModel.cs index b75ebf5b..e76c59b5 100644 --- a/FModel/ViewModels/SettingsViewModel.cs +++ b/FModel/ViewModels/SettingsViewModel.cs @@ -27,6 +27,13 @@ public class SettingsViewModel : ViewModel set => SetProperty(ref _useCustomOutputFolders, value); } + private bool _useCustomEGames; + public bool UseCustomEGames + { + get => _useCustomEGames; + set => SetProperty(ref _useCustomEGames, value); + } + private EUpdateMode _selectedUpdateMode; public EUpdateMode SelectedUpdateMode { @@ -170,6 +177,7 @@ public class SettingsViewModel : ViewModel public ReadOnlyObservableCollection UpdateModes { get; private set; } public ReadOnlyObservableCollection UeGames { get; private set; } + public ReadOnlyObservableCollection CustomUeGames { get; private set; } public ReadOnlyObservableCollection AssetLanguages { get; private set; } public ReadOnlyObservableCollection AesReloads { get; private set; } public ReadOnlyObservableCollection DiscordRpcs { get; private set; } @@ -265,8 +273,12 @@ public class SettingsViewModel : ViewModel SelectedAesReload = UserSettings.Default.AesReload; SelectedDiscordRpc = UserSettings.Default.DiscordRpc; + var ueGames = EnumerateUeGames().ToArray(); + UseCustomEGames = ueGames[1].Contains(SelectedUeGame); + UpdateModes = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateUpdateModes())); - UeGames = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateUeGames())); + UeGames = new ReadOnlyObservableCollection(new ObservableCollection(ueGames[0])); + CustomUeGames = new ReadOnlyObservableCollection(new ObservableCollection(ueGames[1])); AssetLanguages = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateAssetLanguages())); AesReloads = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateAesReloads())); DiscordRpcs = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateDiscordRpcs())); @@ -331,11 +343,11 @@ public class SettingsViewModel : ViewModel } private IEnumerable EnumerateUpdateModes() => Enum.GetValues(); - private IEnumerable EnumerateUeGames() + private IEnumerable> EnumerateUeGames() => Enum.GetValues() .GroupBy(value => (int)value) .Select(group => group.First()) - .OrderBy(value => (int)value == ((int)value & ~0xF)); + .GroupBy(value => (int)value == ((int)value & ~0xF)); private IEnumerable EnumerateAssetLanguages() => Enum.GetValues(); private IEnumerable EnumerateAesReloads() => Enum.GetValues(); private IEnumerable EnumerateDiscordRpcs() => Enum.GetValues(); diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index 1b331007..660d85ed 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -122,15 +122,28 @@