From a80052ef77953e2bfded320384f880aef383325d Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Sat, 5 Jun 2021 00:50:55 +0200 Subject: [PATCH] saving this --- CUE4Parse | 2 +- FModel/Creator/Bases/FN/BaseCommunity.cs | 11 ++-- FModel/Creator/Bases/FN/BaseIcon.cs | 18 +++--- FModel/FModel.csproj | 4 -- FModel/Resources/city_pin.png | Bin 5567 -> 0 bytes FModel/Resources/pin.png | Bin 5310 -> 0 bytes FModel/ViewModels/MapViewerViewModel.cs | 68 ++++++++++++++++------- FModel/Views/MapViewer.xaml | 28 +++++----- FModel/Views/MapViewer.xaml.cs | 6 ++ FModel/Views/SettingsView.xaml | 4 +- 10 files changed, 85 insertions(+), 56 deletions(-) delete mode 100644 FModel/Resources/city_pin.png delete mode 100644 FModel/Resources/pin.png diff --git a/CUE4Parse b/CUE4Parse index 038f3736..f17ea8bb 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 038f373650a2e7b05506d10060fe79e136b23eb8 +Subproject commit f17ea8bbf946a8319758759118c1e46b863eab33 diff --git a/FModel/Creator/Bases/FN/BaseCommunity.cs b/FModel/Creator/Bases/FN/BaseCommunity.cs index 9bda0742..78c2fe30 100644 --- a/FModel/Creator/Bases/FN/BaseCommunity.cs +++ b/FModel/Creator/Bases/FN/BaseCommunity.cs @@ -1,5 +1,4 @@ -using System.Linq; -using CUE4Parse.UE4.Assets.Exports; +using CUE4Parse.UE4.Assets.Exports; using CUE4Parse.UE4.Objects.GameplayTags; using CUE4Parse.UE4.Objects.UObject; using CUE4Parse.UE4.Versions; @@ -21,7 +20,6 @@ namespace FModel.Creator.Bases.FN private string _source; private string _season; private bool _lowerDrawn; - private bool _hasStyle; public BaseCommunity(UObject uObject, EIconStyle style, string designName) : base(uObject, style) { @@ -89,8 +87,9 @@ namespace FModel.Creator.Bases.FN Description += GetCosmeticSet(set.Text, _design.DrawSetShort); if (_design.DrawSeason && gameplayTags.TryGetGameplayTag("Cosmetics.Filter.Season.", out var season)) _season = GetCosmeticSeason(season.Text, _design.DrawSeasonShort); - if (gameplayTags.Any(x => x.Text.StartsWith("Cosmetics.UserFacingFlags."))) - _hasStyle = true; + + var triggers = _design.GameplayTags.DrawCustomOnly ? new[] {"Cosmetics.UserFacingFlags."} : new[] {"Cosmetics.UserFacingFlags.", "Homebase.Class.", "NPC.CharacterType.Survivor.Defender."}; + GetUserFacingFlags(gameplayTags.GetAllGameplayTags(triggers)); } private string GetCosmeticSet(string setName, bool bShort) @@ -291,7 +290,7 @@ namespace FModel.Creator.Bases.FN private void DrawUserFacingFlags(SKCanvas c, bool customOnly) { - if (!_hasStyle) return; + if (UserFacingFlags == null || UserFacingFlags.Count < 1) return; if (customOnly) { c.DrawBitmap(_design.GameplayTags.Custom, 0, 0, ImagePaint); diff --git a/FModel/Creator/Bases/FN/BaseIcon.cs b/FModel/Creator/Bases/FN/BaseIcon.cs index be861db1..6ecfce2b 100644 --- a/FModel/Creator/Bases/FN/BaseIcon.cs +++ b/FModel/Creator/Bases/FN/BaseIcon.cs @@ -23,7 +23,7 @@ namespace FModel.Creator.Bases.FN public SKBitmap SeriesBackground { get; protected set; } protected string ShortDescription { get; set; } protected string CosmeticSource { get; set; } - protected SKBitmap[] UserFacingFlags { get; set; } + protected Dictionary UserFacingFlags { get; set; } public BaseIcon(UObject uObject, EIconStyle style) : base(uObject, style) { @@ -269,24 +269,24 @@ namespace FModel.Creator.Bases.FN if (!itemCategories.TryGetValue(out FStructFallback[] tertiaryCategories, "TertiaryCategories")) return; - UserFacingFlags = new SKBitmap[userFacingFlags.Count]; - for (var i = 0; i < UserFacingFlags.Length; i++) + UserFacingFlags = new Dictionary(userFacingFlags.Count); + foreach (var flag in userFacingFlags) { - if (userFacingFlags[i].Equals("Cosmetics.UserFacingFlags.HasUpgradeQuests", StringComparison.OrdinalIgnoreCase)) + if (flag.Equals("Cosmetics.UserFacingFlags.HasUpgradeQuests", StringComparison.OrdinalIgnoreCase)) { if (Object.ExportType.Equals("AthenaPetCarrierItemDefinition", StringComparison.OrdinalIgnoreCase)) - UserFacingFlags[i] = SKBitmap.Decode(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/T-Icon-Pets-64.png"))?.Stream); - else UserFacingFlags[i] = SKBitmap.Decode(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/T-Icon-Quests-64.png"))?.Stream); + UserFacingFlags[flag] = SKBitmap.Decode(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/T-Icon-Pets-64.png"))?.Stream); + else UserFacingFlags[flag] = SKBitmap.Decode(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/T-Icon-Quests-64.png"))?.Stream); } else { foreach (var category in tertiaryCategories) { - if (category.TryGetValue(out FGameplayTagContainer tagContainer, "TagContainer") && tagContainer.TryGetGameplayTag(userFacingFlags[i], out _) && + if (category.TryGetValue(out FGameplayTagContainer tagContainer, "TagContainer") && tagContainer.TryGetGameplayTag(flag, out _) && category.TryGetValue(out FStructFallback categoryBrush, "CategoryBrush") && categoryBrush.TryGetValue(out FStructFallback brushXxs, "Brush_XXS") && brushXxs.TryGetValue(out FPackageIndex resourceObject, "ResourceObject") && Utils.TryGetPackageIndexExport(resourceObject, out UTexture2D texture)) { - UserFacingFlags[i] = Utils.GetBitmap(texture); + UserFacingFlags[flag] = Utils.GetBitmap(texture); } } } @@ -299,7 +299,7 @@ namespace FModel.Creator.Bases.FN const int size = 25; var x = Margin * (int) 2.5; - foreach (var flag in UserFacingFlags) + foreach (var flag in UserFacingFlags.Values) { if (flag == null) continue; diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index fa1bbfe5..3c3dbaf5 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -78,8 +78,6 @@ - - @@ -170,8 +168,6 @@ - - diff --git a/FModel/Resources/city_pin.png b/FModel/Resources/city_pin.png deleted file mode 100644 index 1595e70b8d1e227bd5d4f29ccb038d135e8b7069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5567 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 N002ovPDHLkV1mfo)w2Kq diff --git a/FModel/Resources/pin.png b/FModel/Resources/pin.png deleted file mode 100644 index 502e2b565e7dca4952dda7dfff8b1f893e36e59b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5310 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 ApplicationService.ThreadWorkerView; private int _mapIndex = -1; @@ -48,13 +56,23 @@ namespace FModel.ViewModels get => _mapImage; set => SetProperty(ref _mapImage, value); } + private BitmapImage _layerImage; + public BitmapImage LayerImage + { + get => _layerImage; + set => SetProperty(ref _layerImage, value); + } - private readonly List[] _bitmaps; // first bitmap is the displayed map, others are overlays of the map + private readonly Dictionary[] _bitmaps; // first bitmap is the displayed map, others are overlays of the map private readonly CUE4ParseViewModel _cue4Parse; public MapViewerViewModel(CUE4ParseViewModel cue4Parse) { - _bitmaps = new[] {new List(), new List()}; + _bitmaps = new[] + { + new Dictionary(), + new Dictionary() + }; _cue4Parse = cue4Parse; } @@ -69,27 +87,35 @@ namespace FModel.ViewModels public BitmapImage GetImageToSave() { - var ret = new SKBitmap(_bitmaps[MapIndex][0].Width, _bitmaps[MapIndex][0].Height, SKColorType.Rgba8888, SKAlphaType.Premul); + var ret = new SKBitmap(_bitmaps[MapIndex][_FIRST_BITMAP].Layer.Width, _bitmaps[MapIndex][_FIRST_BITMAP].Layer.Height, SKColorType.Rgba8888, SKAlphaType.Premul); using var c = new SKCanvas(ret); - c.DrawBitmap(_bitmaps[MapIndex][0], 0, 0); + foreach (var layer in _bitmaps[MapIndex].Values.Where(layer => layer.IsEnabled)) + { + c.DrawBitmap(layer.Layer, 0, 0); + } return GetImageSource(ret); } - protected override bool SetProperty(ref T storage, T value, string propertyName = null) + public async Task GenericToggle(string key, bool enabled) { - var ret = base.SetProperty(ref storage, value, propertyName); - CheckForStuffToDraw(propertyName); - return ret; + if (_bitmaps[MapIndex].TryGetValue(key, out var layer) && layer.Layer != null) + { + layer.IsEnabled = enabled; + } + else // load layer + { + switch (key) + { + + } + } } - private async void CheckForStuffToDraw(string propertyName = null) + protected override bool SetProperty(ref T storage, T value, string propertyName = null) // don't delete, else nothing will update for some reason { - switch (propertyName) - { - - } + return base.SetProperty(ref storage, value, propertyName); } private BitmapImage GetImageSource(SKBitmap bitmap) @@ -120,14 +146,14 @@ namespace FModel.ViewModels private FVector2D GetMapPosition(FVector vector) { - var nx = (vector.Y + _mapRadius) / (_mapRadius * 2) * _bitmaps[MapIndex][0].Width; - var ny = (1 - (vector.X + _mapRadius) / (_mapRadius * 2)) * _bitmaps[MapIndex][0].Height; + var nx = (vector.Y + _mapRadius) / (_mapRadius * 2) * _bitmaps[MapIndex][_FIRST_BITMAP].Layer.Width; + var ny = (1 - (vector.X + _mapRadius) / (_mapRadius * 2)) * _bitmaps[MapIndex][_FIRST_BITMAP].Layer.Height; return new FVector2D(nx, ny); } private async Task LoadBrMiniMap() { - if (_bitmaps[0].Count > 0) return; + if (_bitmaps[0].TryGetValue(_FIRST_BITMAP, out var layer) && layer.Layer != null) return; await _threadWorkerView.Begin(_ => { if (!Utils.TryLoadObject("FortniteGame/Content/UI/IngameMap/UIMapManagerBR.Default__UIMapManagerBR_C", out UObject mapManager) || @@ -136,22 +162,22 @@ namespace FModel.ViewModels !cachedExpressionData.TryGetValue(out FStructFallback parameters, "Parameters") || !parameters.TryGetValue(out UTexture2D[] textureValues, "TextureValues")) return; - _bitmaps[0].Add(Utils.GetBitmap(textureValues[0])); - _brMiniMapImage = GetImageSource(_bitmaps[0][0]); + _bitmaps[0][_FIRST_BITMAP] = new MapLayer{Layer = Utils.GetBitmap(textureValues[0]), IsEnabled = true}; + _brMiniMapImage = GetImageSource(_bitmaps[0][_FIRST_BITMAP].Layer); }); } private async Task LoadPrMiniMap() { - if (_bitmaps[1].Count > 0) return; + if (_bitmaps[1].TryGetValue(_FIRST_BITMAP, out var layer) && layer.Layer != null) return; await _threadWorkerView.Begin(_ => { if (!Utils.TryLoadObject("FortniteGame/Content/UI/IngameMap/UIMapManagerPapaya.Default__UIMapManagerPapaya_C", out UObject mapManager) || !mapManager.TryGetValue(out UMaterial mapMaterial, "MapMaterial") || mapMaterial.ReferencedTextures.Count < 1) return; - _bitmaps[1].Add(Utils.GetBitmap(mapMaterial.ReferencedTextures[0] as UTexture2D)); - _prMiniMapImage = GetImageSource(_bitmaps[1][0]); + _bitmaps[1][_FIRST_BITMAP] = new MapLayer{Layer = Utils.GetBitmap(mapMaterial.ReferencedTextures[0] as UTexture2D), IsEnabled = true}; + _prMiniMapImage = GetImageSource(_bitmaps[1][_FIRST_BITMAP].Layer); }); } } diff --git a/FModel/Views/MapViewer.xaml b/FModel/Views/MapViewer.xaml index d31bee9a..b3097de6 100644 --- a/FModel/Views/MapViewer.xaml +++ b/FModel/Views/MapViewer.xaml @@ -22,23 +22,23 @@ - - - + + + - - - - - - - - - - + + + + + + + + + + @@ -99,6 +99,8 @@ + diff --git a/FModel/Views/MapViewer.xaml.cs b/FModel/Views/MapViewer.xaml.cs index 16da3b4b..74507a26 100644 --- a/FModel/Views/MapViewer.xaml.cs +++ b/FModel/Views/MapViewer.xaml.cs @@ -74,5 +74,11 @@ namespace FModel.Views break; } } + + private async void ToggleOnChange(object sender, RoutedEventArgs e) + { + if (sender is not CheckBox checkBox) return; + await _applicationView.MapViewer.GenericToggle(checkBox.Content.ToString(), checkBox.IsChecked ?? true); + } } } \ No newline at end of file diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index ad88f3a7..7888f2bb 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -45,11 +45,11 @@ - +