From 40715b4c12d3617bc24e88e3b62dea6e99e3d25d Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Sat, 11 Dec 2021 14:49:30 +0100 Subject: [PATCH] fixed rare overwrite material index error --- CUE4Parse | 2 +- FModel/Enums.cs | 1 + FModel/ViewModels/ModelViewerViewModel.cs | 58 ++++++++--------------- FModel/ViewModels/SettingsViewModel.cs | 3 ++ FModel/Views/SettingsView.xaml.cs | 11 +++-- 5 files changed, 34 insertions(+), 41 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index 3dbe09d4..763aca66 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 3dbe09d4a83b9b3628a2a340394628c39a954eb9 +Subproject commit 763aca666c1782ce51287100641bc31d9fce0d41 diff --git a/FModel/Enums.cs b/FModel/Enums.cs index 2e63af22..943cd18b 100644 --- a/FModel/Enums.cs +++ b/FModel/Enums.cs @@ -20,6 +20,7 @@ namespace FModel { Restart, ReloadLocres, + CheckForUpdates, Nothing } diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index e2b19d43..0dcea116 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -288,34 +288,30 @@ namespace FModel.ViewModels public async Task TryOverwriteMaterial(UMaterialInstance materialInstance) { - if (SelectedModel is not { SelectedGeometry: {} geometry } model) - return false; + if (SelectedModel?.SelectedGeometry == null) return false; PBRMaterial m = null; await _threadWorkerView.Begin(_ => { - var (material, _, _) = LoadMaterial(materialInstance); - m = material; + (m, var _, var _) = LoadMaterial(materialInstance); + + var obj = new ResolvedLoadedObject(materialInstance); + switch (SelectedModel.Export) + { + case UStaticMesh { Materials: { } } st: + st.Materials[SelectedModel.SelectedGeometry.MaterialIndex] = obj; + break; + case USkeletalMesh sk: + sk.Materials[SelectedModel.SelectedGeometry.MaterialIndex].Material = obj; + break; + case UMaterialInstance: + SelectedModel.SwapExport(materialInstance); + break; + } }); - if (m == null) return false; - - var index = geometry.MaterialIndex; - var obj = new ResolvedLoadedObject(materialInstance); - switch (model.Export) - { - case UStaticMesh { Materials: { } } st: - st.Materials[index] = obj; - break; - case USkeletalMesh sk: - sk.Materials[index].Material = obj; - break; - case UMaterialInstance: - model.SwapExport(materialInstance); - break; - } - geometry.Material = m; - return true; + SelectedModel.SelectedGeometry.Material = m; + return m != null; } #endregion @@ -330,11 +326,10 @@ namespace FModel.ViewModels Application.Current.Dispatcher.Invoke(() => { - var s = FixName(materialInstance.Name); cam.Group3d.Add(new CustomMeshGeometryModel3D { Transform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1,0,0), -90)), - DisplayName = s, Geometry = builder.ToMeshGeometry3D(), MaterialIndex = 0, + DisplayName = materialInstance.Name, Geometry = builder.ToMeshGeometry3D(), MaterialIndex = 0, Material = m, IsTransparent = isTransparent, IsRendering = isRendering }); }); @@ -403,7 +398,7 @@ namespace FModel.ViewModels { cam.Group3d.Add(new CustomMeshGeometryModel3D { - DisplayName = FixName(section.MaterialName ?? material.Name), MaterialIndex = i, + DisplayName = section.MaterialName ?? material.Name, MaterialIndex = section.MaterialIndex, Geometry = builder.ToMeshGeometry3D(), Material = m, IsTransparent = isTransparent, IsRendering = isRendering }); @@ -413,7 +408,7 @@ namespace FModel.ViewModels private (PBRMaterial material, bool isRendering, bool isTransparent) LoadMaterial(UMaterialInterface unrealMaterial) { - var m = new PBRMaterial {RenderShadowMap = true, EnableAutoTangent = true, RenderEnvironmentMap = true}; // default + PBRMaterial m = null; // default Application.Current.Dispatcher.Invoke(() => // tweak this later { m = new PBRMaterial // recreate on ui thread @@ -596,17 +591,6 @@ namespace FModel.ViewModels cam.LookDirection = new Vector3D(-cam.Position.X + center.X, 0, -cam.Position.Z + center.Y); } - private string FixName(string input) - { - if (input.Length < 1) - return "Material_Has_No_Name"; - - if (int.TryParse(input[0].ToString(), out _)) - input = input[1..]; - - return input; - } - private bool CheckIfSaved(string path) { if (File.Exists(path)) diff --git a/FModel/ViewModels/SettingsViewModel.cs b/FModel/ViewModels/SettingsViewModel.cs index 860bf4d9..7c1a5922 100644 --- a/FModel/ViewModels/SettingsViewModel.cs +++ b/FModel/ViewModels/SettingsViewModel.cs @@ -250,6 +250,9 @@ namespace FModel.ViewModels if (_assetLanguageSnapshot != SelectedAssetLanguage) ret = SettingsOut.ReloadLocres; + if (_updateModeSnapshot != SelectedUpdateMode) + ret = SettingsOut.CheckForUpdates; + UserSettings.Default.UpdateMode = SelectedUpdateMode; UserSettings.Default.Presets[_game] = SelectedPreset; UserSettings.Default.OverridedGame[_game] = SelectedUeGame; diff --git a/FModel/Views/SettingsView.xaml.cs b/FModel/Views/SettingsView.xaml.cs index 772d2545..e77d63af 100644 --- a/FModel/Views/SettingsView.xaml.cs +++ b/FModel/Views/SettingsView.xaml.cs @@ -43,10 +43,15 @@ namespace FModel.Views Close(); - if (whatShouldIDo == SettingsOut.ReloadLocres) + switch (whatShouldIDo) { - _applicationView.CUE4Parse.LocalizedResourcesCount = 0; - await _applicationView.CUE4Parse.LoadLocalizedResources(); + case SettingsOut.ReloadLocres: + _applicationView.CUE4Parse.LocalizedResourcesCount = 0; + await _applicationView.CUE4Parse.LoadLocalizedResources(); + break; + case SettingsOut.CheckForUpdates: + ApplicationService.ApiEndpointView.FModelApi.CheckForUpdates(UserSettings.Default.UpdateMode); + break; } }