From 722110dbc6dd8899c620ca07a6a8406403f06860 Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Wed, 13 Oct 2021 22:29:35 +0200 Subject: [PATCH] ui changes --- CUE4Parse | 2 +- FModel/Creator/Bases/FN/BaseCommunity.cs | 4 +- FModel/Creator/Bases/FN/BaseIcon.cs | 4 +- FModel/Enums.cs | 8 -- FModel/Settings/UserSettings.cs | 15 ++- FModel/ViewModels/CUE4ParseViewModel.cs | 6 +- FModel/ViewModels/MapViewerViewModel.cs | 41 +-------- FModel/ViewModels/SettingsViewModel.cs | 43 ++------- FModel/ViewModels/TabControlViewModel.cs | 14 +-- FModel/Views/MapViewer.xaml | 3 - .../Resources/Controls/AvalonEditor.xaml.cs | 3 +- .../Converters/BoolToToggleConverter.cs | 25 +++++ FModel/Views/SettingsView.xaml | 91 +++++++++---------- 13 files changed, 104 insertions(+), 155 deletions(-) create mode 100644 FModel/Views/Resources/Converters/BoolToToggleConverter.cs diff --git a/CUE4Parse b/CUE4Parse index bfb8ce44..51a840f2 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit bfb8ce44dbf993fc2b0bb6438bb0804397ce7e43 +Subproject commit 51a840f200bbf74db623c6feb015feeefa892dba diff --git a/FModel/Creator/Bases/FN/BaseCommunity.cs b/FModel/Creator/Bases/FN/BaseCommunity.cs index 018ea547..d0066e94 100644 --- a/FModel/Creator/Bases/FN/BaseCommunity.cs +++ b/FModel/Creator/Bases/FN/BaseCommunity.cs @@ -30,7 +30,7 @@ namespace FModel.Creator.Bases.FN public override void ParseForInfo() { - ParseForReward(UserSettings.Default.CosmeticDisplayAsset == EEnabledDisabled.Enabled); + ParseForReward(UserSettings.Default.CosmeticDisplayAsset); if (Object.TryGetValue(out FPackageIndex series, "Series") && Utils.TryGetPackageIndexExport(series, out UObject export)) _rarityName = export.Name; @@ -264,4 +264,4 @@ namespace FModel.Creator.Bases.FN } } } -} \ No newline at end of file +} diff --git a/FModel/Creator/Bases/FN/BaseIcon.cs b/FModel/Creator/Bases/FN/BaseIcon.cs index 84c48dd8..a58a0aa0 100644 --- a/FModel/Creator/Bases/FN/BaseIcon.cs +++ b/FModel/Creator/Bases/FN/BaseIcon.cs @@ -78,7 +78,7 @@ namespace FModel.Creator.Bases.FN public override void ParseForInfo() { - ParseForReward(UserSettings.Default.CosmeticDisplayAsset == EEnabledDisabled.Enabled); + ParseForReward(UserSettings.Default.CosmeticDisplayAsset); if (Object.TryGetValue(out FGameplayTagContainer gameplayTags, "GameplayTags")) CheckGameplayTags(gameplayTags); @@ -275,4 +275,4 @@ namespace FModel.Creator.Bases.FN } } } -} \ No newline at end of file +} diff --git a/FModel/Enums.cs b/FModel/Enums.cs index 3bdf53f2..8dd1d82a 100644 --- a/FModel/Enums.cs +++ b/FModel/Enums.cs @@ -51,14 +51,6 @@ namespace FModel Never } - public enum EEnabledDisabled - { - [Description("Disabled")] - Disabled, - [Description("Enabled")] - Enabled - } - public enum FGame { [Description("Unknown")] diff --git a/FModel/Settings/UserSettings.cs b/FModel/Settings/UserSettings.cs index 4d524066..83298e49 100644 --- a/FModel/Settings/UserSettings.cs +++ b/FModel/Settings/UserSettings.cs @@ -156,8 +156,8 @@ namespace FModel.Settings set => SetProperty(ref _updateMode, value); } - private EEnabledDisabled _keepDirectoryStructure = EEnabledDisabled.Enabled; - public EEnabledDisabled KeepDirectoryStructure + private bool _keepDirectoryStructure = true; + public bool KeepDirectoryStructure { get => _keepDirectoryStructure; set => SetProperty(ref _keepDirectoryStructure, value); @@ -198,8 +198,8 @@ namespace FModel.Settings set => SetProperty(ref _cosmeticStyle, value); } - private EEnabledDisabled _cosmeticDisplayAsset = EEnabledDisabled.Disabled; - public EEnabledDisabled CosmeticDisplayAsset + private bool _cosmeticDisplayAsset; + public bool CosmeticDisplayAsset { get => _cosmeticDisplayAsset; set => SetProperty(ref _cosmeticDisplayAsset, value); @@ -554,6 +554,13 @@ namespace FModel.Settings set => SetProperty(ref _lodExportFormat, value); } + private bool _saveSkeletonAsMesh; + public bool SaveSkeletonAsMesh + { + get => _saveSkeletonAsMesh; + set => SetProperty(ref _saveSkeletonAsMesh, value); + } + private ETextureFormat _textureExportFormat = ETextureFormat.Png; public ETextureFormat TextureExportFormat { diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index e3bbaa8e..6e5a6d04 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -696,8 +696,7 @@ namespace FModel.ViewModels var userDir = Path.Combine(UserSettings.Default.OutputDirectory, "Sounds"); if (fullPath.StartsWith("/")) fullPath = fullPath[1..]; var savedAudioPath = Path.Combine(userDir, - UserSettings.Default.KeepDirectoryStructure == EEnabledDisabled.Enabled - ? fullPath : fullPath.SubstringAfterLast('/')).Replace('\\', '/') + $".{ext.ToLower()}"; + UserSettings.Default.KeepDirectoryStructure ? fullPath : fullPath.SubstringAfterLast('/')).Replace('\\', '/') + $".{ext.ToLower()}"; if (!UserSettings.Default.IsAutoOpenSounds) { @@ -747,8 +746,7 @@ namespace FModel.ViewModels { foreach (var kvp in assets) { - var path = Path.Combine(directory, UserSettings.Default.KeepDirectoryStructure == EEnabledDisabled.Enabled - ? kvp.Key : kvp.Key.SubstringAfterLast('/')).Replace('\\', '/'); + var path = Path.Combine(directory, UserSettings.Default.KeepDirectoryStructure ? kvp.Key : kvp.Key.SubstringAfterLast('/')).Replace('\\', '/'); Directory.CreateDirectory(path.SubstringBeforeLast('/')); File.WriteAllBytes(path, kvp.Value); } diff --git a/FModel/ViewModels/MapViewerViewModel.cs b/FModel/ViewModels/MapViewerViewModel.cs index dde9b2e7..556650c3 100644 --- a/FModel/ViewModels/MapViewerViewModel.cs +++ b/FModel/ViewModels/MapViewerViewModel.cs @@ -95,13 +95,6 @@ namespace FModel.ViewModels set => SetProperty(ref _brFireflies, value, "ApolloGameplay_Fireflies"); } - private bool _brCorruptionZones; - public bool BrCorruptionZones - { - get => _brCorruptionZones; - set => SetProperty(ref _brCorruptionZones, value, "ApolloGameplay_CorruptionZones"); - } - private bool _brCubeMovements; public bool BrCubeMovements { @@ -237,11 +230,7 @@ namespace FModel.ViewModels if (!value.IsEnabled || !withMap && key == _FIRST_BITMAP) continue; - SKPaint p = null; - if (key == "ApolloGameplay_CorruptionZones") - p = new SKPaint { BlendMode = SKBlendMode.Difference }; - - c.DrawBitmap(value.Layer, new SKRect(0, 0, _widthHeight, _widthHeight), p); + c.DrawBitmap(value.Layer, new SKRect(0, 0, _widthHeight, _widthHeight)); } return ret; @@ -287,9 +276,6 @@ namespace FModel.ViewModels case "ApolloGameplay_Fireflies": await LoadFireflies(); break; - case "ApolloGameplay_CorruptionZones": - await LoadCorruptionZones(); - break; case "ApolloGameplay_CubeMovements": await LoadCubeMovements(); break; @@ -889,31 +875,6 @@ namespace FModel.ViewModels }); } - private async Task LoadCorruptionZones() - { - await _threadWorkerView.Begin(_ => - { - _fillPaint.StrokeWidth = 5; - if (!Utils.TryLoadObject("FortniteGame/Content/Athena/Apollo/Environments/Landscape/Materials/Corruption/T_InitialCorruptionAreas.T_InitialCorruptionAreas", out UTexture2D corruption)) - return; - - var overlay = Utils.GetBitmap(corruption); - var width = overlay.Width; - var height = overlay.Height; - var rotatedBitmap = new SKBitmap(width, height, SKColorType.Rgba8888, SKAlphaType.Opaque); - - using var c = new SKCanvas(rotatedBitmap); - c.Clear(); - c.Translate(0, width); - c.RotateDegrees(-90); - - overlay.ClearToTransparent(SKColors.Lime); - c.DrawBitmap(overlay, 0, 0); - - _bitmaps[0]["ApolloGameplay_CorruptionZones"] = new MapLayer {Layer = rotatedBitmap.Resize(_widthHeight, _widthHeight), IsEnabled = false}; - }); - } - /// /// FortniteGame/Plugins/GameFeatures/CorruptionGameplay/Content/CorruptionGameplay_LevelOverlay.uasset /// too lazy to filters diff --git a/FModel/ViewModels/SettingsViewModel.cs b/FModel/ViewModels/SettingsViewModel.cs index c2a2125c..e047a7e1 100644 --- a/FModel/ViewModels/SettingsViewModel.cs +++ b/FModel/ViewModels/SettingsViewModel.cs @@ -53,14 +53,14 @@ 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 { @@ -89,13 +89,6 @@ namespace FModel.ViewModels set => SetProperty(ref _selectedDiscordRpc, value); } - private EEnabledDisabled _selectedDirectoryStructure; - public EEnabledDisabled SelectedDirectoryStructure - { - get => _selectedDirectoryStructure; - set => SetProperty(ref _selectedDirectoryStructure, value); - } - private ECompressedAudio _selectedCompressedAudio; public ECompressedAudio SelectedCompressedAudio { @@ -110,27 +103,20 @@ namespace FModel.ViewModels set => SetProperty(ref _selectedCosmeticStyle, value); } - private EEnabledDisabled _selectedCosmeticDisplayAsset; - public EEnabledDisabled SelectedCosmeticDisplayAsset - { - get => _selectedCosmeticDisplayAsset; - set => SetProperty(ref _selectedCosmeticDisplayAsset, value); - } - private EMeshFormat _selectedMeshExportFormat; public EMeshFormat SelectedMeshExportFormat { get => _selectedMeshExportFormat; set => SetProperty(ref _selectedMeshExportFormat, value); } - + private ELodFormat _selectedLodExportFormat; public ELodFormat SelectedLodExportFormat { get => _selectedLodExportFormat; set => SetProperty(ref _selectedLodExportFormat, value); } - + private ETextureFormat _selectedTextureExportFormat; public ETextureFormat SelectedTextureExportFormat { @@ -145,10 +131,8 @@ namespace FModel.ViewModels public ReadOnlyObservableCollection AssetLanguages { get; private set; } public ReadOnlyObservableCollection AesReloads { get; private set; } public ReadOnlyObservableCollection DiscordRpcs { get; private set; } - public ReadOnlyObservableCollection DirectoryStructures { get; private set; } public ReadOnlyObservableCollection CompressedAudios { get; private set; } public ReadOnlyObservableCollection CosmeticStyles { get; private set; } - public ReadOnlyObservableCollection CosmeticDisplayAssets { get; private set; } public ReadOnlyObservableCollection MeshExportFormats { get; private set; } public ReadOnlyObservableCollection LodExportFormats { get; private set; } public ReadOnlyObservableCollection TextureExportFormats { get; private set; } @@ -166,10 +150,8 @@ namespace FModel.ViewModels private List _customVersionsSnapshot; private Dictionary _optionsSnapshot; private ELanguage _assetLanguageSnapshot; - private EEnabledDisabled _directoryStructureSnapshot; private ECompressedAudio _compressedAudioSnapshot; private EIconStyle _cosmeticStyleSnapshot; - private EEnabledDisabled _cosmeticDisplayAssetSnapshot; private EMeshFormat _meshExportFormatSnapshot; private ELodFormat _lodExportFormatSnapshot; private ETextureFormat _textureExportFormatSnapshot; @@ -190,10 +172,8 @@ namespace FModel.ViewModels _customVersionsSnapshot = UserSettings.Default.OverridedCustomVersions[_game]; _optionsSnapshot = UserSettings.Default.OverridedOptions[_game]; _assetLanguageSnapshot = UserSettings.Default.AssetLanguage; - _directoryStructureSnapshot = UserSettings.Default.KeepDirectoryStructure; _compressedAudioSnapshot = UserSettings.Default.CompressedAudioMode; _cosmeticStyleSnapshot = UserSettings.Default.CosmeticStyle; - _cosmeticDisplayAssetSnapshot = UserSettings.Default.CosmeticDisplayAsset; _meshExportFormatSnapshot = UserSettings.Default.MeshExportFormat; _lodExportFormatSnapshot = UserSettings.Default.LodExportFormat; _textureExportFormatSnapshot = UserSettings.Default.TextureExportFormat; @@ -205,10 +185,8 @@ namespace FModel.ViewModels SelectedCustomVersions = _customVersionsSnapshot; SelectedOptions = _optionsSnapshot; SelectedAssetLanguage = _assetLanguageSnapshot; - SelectedDirectoryStructure = _directoryStructureSnapshot; SelectedCompressedAudio = _compressedAudioSnapshot; SelectedCosmeticStyle = _cosmeticStyleSnapshot; - SelectedCosmeticDisplayAsset = _cosmeticDisplayAssetSnapshot; SelectedMeshExportFormat = _meshExportFormatSnapshot; SelectedLodExportFormat = _lodExportFormatSnapshot; SelectedTextureExportFormat = _textureExportFormatSnapshot; @@ -222,10 +200,8 @@ namespace FModel.ViewModels AssetLanguages = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateAssetLanguages())); AesReloads = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateAesReloads())); DiscordRpcs = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateDiscordRpcs())); - DirectoryStructures = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateEnabledDisabled())); CompressedAudios = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateCompressedAudios())); CosmeticStyles = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateCosmeticStyles())); - CosmeticDisplayAssets = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateEnabledDisabled())); MeshExportFormats = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateMeshExportFormat())); LodExportFormats = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateLodExportFormat())); TextureExportFormats = new ReadOnlyObservableCollection(new ObservableCollection(EnumerateTextureExportFormat())); @@ -238,7 +214,7 @@ namespace FModel.ViewModels if (string.IsNullOrEmpty(gameName)) return; _gamePreset = _apiEndpointView.FModelApi.GetGames(cancellationToken, gameName); }); - + if (_gamePreset?.Versions == null) return; foreach (var version in _gamePreset.Versions.Keys) { @@ -251,7 +227,7 @@ 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) { @@ -264,7 +240,7 @@ namespace FModel.ViewModels SelectedOptions[k] = v; } } - + public void ResetPreset() { SelectedUeGame = _ueGameSnapshot; @@ -293,10 +269,8 @@ namespace FModel.ViewModels UserSettings.Default.OverridedCustomVersions[_game] = SelectedCustomVersions; UserSettings.Default.OverridedOptions[_game] = SelectedOptions; UserSettings.Default.AssetLanguage = SelectedAssetLanguage; - UserSettings.Default.KeepDirectoryStructure = SelectedDirectoryStructure; UserSettings.Default.CompressedAudioMode = SelectedCompressedAudio; UserSettings.Default.CosmeticStyle = SelectedCosmeticStyle; - UserSettings.Default.CosmeticDisplayAsset = SelectedCosmeticDisplayAsset; UserSettings.Default.MeshExportFormat = SelectedMeshExportFormat; UserSettings.Default.LodExportFormat = SelectedLodExportFormat; UserSettings.Default.TextureExportFormat = SelectedTextureExportFormat; @@ -321,9 +295,8 @@ namespace FModel.ViewModels private IEnumerable EnumerateDiscordRpcs() => Enum.GetValues(SelectedDiscordRpc.GetType()).Cast(); private IEnumerable EnumerateCompressedAudios() => Enum.GetValues(SelectedCompressedAudio.GetType()).Cast(); private IEnumerable EnumerateCosmeticStyles() => Enum.GetValues(SelectedCosmeticStyle.GetType()).Cast(); - private IEnumerable EnumerateEnabledDisabled() => Enum.GetValues(SelectedCosmeticDisplayAsset.GetType()).Cast(); private IEnumerable EnumerateMeshExportFormat() => Enum.GetValues(SelectedMeshExportFormat.GetType()).Cast(); private IEnumerable EnumerateLodExportFormat() => Enum.GetValues(SelectedLodExportFormat.GetType()).Cast(); private IEnumerable EnumerateTextureExportFormat() => Enum.GetValues(SelectedTextureExportFormat.GetType()).Cast(); } -} \ No newline at end of file +} diff --git a/FModel/ViewModels/TabControlViewModel.cs b/FModel/ViewModels/TabControlViewModel.cs index f0ba784c..a70d30f1 100644 --- a/FModel/ViewModels/TabControlViewModel.cs +++ b/FModel/ViewModels/TabControlViewModel.cs @@ -119,7 +119,7 @@ namespace FModel.ViewModels SetProperty(ref _highlighter, value); } } - + public byte[] ImageBuffer { get; private set; } private BitmapImage _image; @@ -133,7 +133,7 @@ namespace FModel.ViewModels RaisePropertyChanged("HasImage"); } } - + private bool _noAlpha; public bool NoAlpha { @@ -193,7 +193,7 @@ namespace FModel.ViewModels { var fileName = Path.ChangeExtension(Header, ".json"); var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Saves", - UserSettings.Default.KeepDirectoryStructure == EEnabledDisabled.Enabled ? Directory : "", fileName).Replace('\\', '/'); + UserSettings.Default.KeepDirectoryStructure ? Directory : "", fileName).Replace('\\', '/'); if (!autoSave) { @@ -222,7 +222,7 @@ namespace FModel.ViewModels public void SetImage(SKImage img) { _img = img; - + using var data = _img.Encode(NoAlpha ? SKEncodedImageFormat.Jpeg : SKEncodedImageFormat.Png, 100); using var stream = new MemoryStream(ImageBuffer = data.ToArray(), false); var image = new BitmapImage(); @@ -242,7 +242,7 @@ namespace FModel.ViewModels if (!HasImage) return; var fileName = Path.ChangeExtension(Header, ".png"); var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Textures", - UserSettings.Default.KeepDirectoryStructure == EEnabledDisabled.Enabled ? Directory : "", fileName!).Replace('\\', '/'); + UserSettings.Default.KeepDirectoryStructure ? Directory : "", fileName!).Replace('\\', '/'); if (!autoSave) { @@ -324,7 +324,7 @@ namespace FModel.ViewModels SelectedTab.Directory = d; return; } - + Application.Current.Dispatcher.Invoke(() => { _tabItems.Add(new TabItem(h, d)); @@ -380,4 +380,4 @@ namespace FModel.ViewModels yield return new TabItem("New Tab", string.Empty); } } -} \ No newline at end of file +} diff --git a/FModel/Views/MapViewer.xaml b/FModel/Views/MapViewer.xaml index 083914ed..a19778f7 100644 --- a/FModel/Views/MapViewer.xaml +++ b/FModel/Views/MapViewer.xaml @@ -39,9 +39,6 @@ DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.MapViewer}}}" IsEnabled="{Binding IsReady}" /> - diff --git a/FModel/Views/Resources/Controls/AvalonEditor.xaml.cs b/FModel/Views/Resources/Controls/AvalonEditor.xaml.cs index 385b697c..aced1b7c 100644 --- a/FModel/Views/Resources/Controls/AvalonEditor.xaml.cs +++ b/FModel/Views/Resources/Controls/AvalonEditor.xaml.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Input; @@ -226,4 +225,4 @@ namespace FModel.Views.Resources.Controls SaveCaretLoc(MyAvalonEditor.CaretOffset); } } -} \ No newline at end of file +} diff --git a/FModel/Views/Resources/Converters/BoolToToggleConverter.cs b/FModel/Views/Resources/Converters/BoolToToggleConverter.cs new file mode 100644 index 00000000..88d1811a --- /dev/null +++ b/FModel/Views/Resources/Converters/BoolToToggleConverter.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Windows.Data; + +namespace FModel.Views.Resources.Converters +{ + public class BoolToToggleConverter : IValueConverter + { + public static readonly BoolToToggleConverter Instance = new(); + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return value switch + { + true => "Enabled", + _ => "Disabled" + }; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index 838f40ca..db0a1921 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -20,7 +20,7 @@ - + @@ -46,7 +46,7 @@ - +