This commit is contained in:
Not Officer
2021-11-21 15:32:31 +01:00
parent 94e2ad3cc6
commit d37c5a922f
4 changed files with 46 additions and 19 deletions

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -6,7 +6,9 @@ using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using AdonisUI.Controls;
using CUE4Parse.Encryption.Aes;
using CUE4Parse.FileProvider;
using CUE4Parse.FileProvider.Vfs;
@@ -26,10 +28,13 @@ using CUE4Parse.UE4.Oodle.Objects;
using CUE4Parse.UE4.Shaders;
using CUE4Parse.UE4.Versions;
using CUE4Parse.UE4.Wwise;
using CUE4Parse_Conversion;
using CUE4Parse_Conversion.Sounds;
using CUE4Parse_Conversion.Textures;
using EpicManifestParser.Objects;
using FModel.Creator;
using FModel.Extensions;
using FModel.Framework;
@@ -37,8 +42,11 @@ using FModel.Services;
using FModel.Settings;
using FModel.Views;
using FModel.Views.Resources.Controls;
using Newtonsoft.Json;
using Serilog;
using SkiaSharp;
namespace FModel.ViewModels
@@ -147,7 +155,7 @@ namespace FModel.ViewModels
byte[] manifestData;
var chunksDir = Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, ".data"));
var manifestPath = Path.Combine(chunksDir.FullName, manifestInfo.Filename);
var manifestPath = Path.Combine(chunksDir.FullName, manifestInfo.FileName);
if (File.Exists(manifestPath))
{
manifestData = File.ReadAllBytes(manifestPath);
@@ -679,19 +687,21 @@ namespace FModel.ViewModels
export.Owner.Name.EndsWith($"/RenderSwitch_Materials/{export.Name}", StringComparison.OrdinalIgnoreCase) ||
export.Owner.Name.EndsWith($"/MI_BPTile/{export.Name}", StringComparison.OrdinalIgnoreCase))):
{
Application.Current.Dispatcher.InvokeAsync(() =>
Application.Current.Dispatcher.Invoke(async () =>
{
var modelViewer = Helper.GetWindow<ModelViewer>("Model Viewer", () => new ModelViewer().Show());
modelViewer.Load(export);
await Task.Delay(100).ConfigureAwait(true);
await modelViewer.Load(export).ConfigureAwait(true);
});
return true;
}
case UMaterialInstance m when ModelIsSwappingMaterial:
{
Application.Current.Dispatcher.InvokeAsync(() =>
Application.Current.Dispatcher.Invoke(async () =>
{
var modelViewer = Helper.GetWindow<ModelViewer>("Model Viewer", () => new ModelViewer().Show());
modelViewer.Swap(m);
await Task.Delay(100).ConfigureAwait(true);
await modelViewer.Swap(m).ConfigureAwait(true);
});
return true;
}

View File

@@ -3,29 +3,40 @@ using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media.Media3D;
using CUE4Parse.UE4.Assets.Exports;
using CUE4Parse.UE4.Assets.Exports.Material;
using CUE4Parse.UE4.Assets.Exports.SkeletalMesh;
using CUE4Parse.UE4.Assets.Exports.StaticMesh;
using CUE4Parse.UE4.Assets.Exports.Texture;
using CUE4Parse.UE4.Objects.Core.Math;
using CUE4Parse_Conversion.Meshes;
using CUE4Parse_Conversion.Meshes.PSK;
using CUE4Parse_Conversion.Textures;
using FModel.Extensions;
using FModel.Framework;
using FModel.Services;
using FModel.Settings;
using FModel.Views.Resources.Controls;
using HelixToolkit.SharpDX.Core;
using HelixToolkit.Wpf.SharpDX;
using Ookii.Dialogs.Wpf;
using Serilog;
using SharpDX;
using SkiaSharp;
using Camera = HelixToolkit.Wpf.SharpDX.Camera;
using Geometry3D = HelixToolkit.SharpDX.Core.Geometry3D;
using PerspectiveCamera = HelixToolkit.Wpf.SharpDX.PerspectiveCamera;
@@ -141,8 +152,8 @@ namespace FModel.ViewModels
}
bool valid = false;
await _threadWorkerView.Begin(_ =>
{
//await _threadWorkerView.Begin(_ =>
//{
valid = export switch
{
UStaticMesh st => TryLoadStaticMesh(st, p),
@@ -150,7 +161,7 @@ namespace FModel.ViewModels
UMaterialInstance mi => TryLoadMaterialInstance(mi, p),
_ => throw new ArgumentOutOfRangeException(nameof(export))
};
});
//}).ConfigureAwait(true);
if (!valid) return;
SelectedModel = p;
}
@@ -247,7 +258,7 @@ namespace FModel.ViewModels
{
var (material, _, _) = LoadMaterial(materialInstance);
m = material;
});
}).ConfigureAwait(true);
if (m == null) return false;
model.SelectedGeometry.Material = m;

View File

@@ -1,10 +1,12 @@
using FModel.Framework;
using FModel.Services;
using System;
using System.Threading;
using System.Threading.Tasks;
using FModel.Extensions;
using FModel.Framework;
using FModel.Services;
using FModel.Views.Resources.Controls;
using Serilog;
namespace FModel.ViewModels
@@ -57,7 +59,7 @@ namespace FModel.ViewModels
CurrentCancellationTokenSource ??= new CancellationTokenSource();
_jobs.Enqueue(action);
await ProcessQueues();
await ProcessQueues().ConfigureAwait(true);
}
public void Cancel()
@@ -76,12 +78,12 @@ namespace FModel.ViewModels
if (_jobs.Count > 0)
{
_applicationView.Status = EStatusKind.Loading;
await foreach (var job in _jobs)
await foreach (var job in _jobs.ConfigureAwait(true))
{
try
{
// will end in "catch" if canceled
await Task.Run(() => job(CurrentCancellationTokenSource.Token));
await Task.Run(() => job(CurrentCancellationTokenSource.Token)).ConfigureAwait(true);
}
catch (OperationCanceledException)
{

View File

@@ -1,12 +1,16 @@
using System.ComponentModel;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using AdonisUI.Controls;
using CUE4Parse.UE4.Assets.Exports;
using CUE4Parse.UE4.Assets.Exports.Material;
using FModel.Services;
using FModel.Settings;
using FModel.ViewModels;
using MessageBox = AdonisUI.Controls.MessageBox;
using MessageBoxImage = AdonisUI.Controls.MessageBoxImage;
@@ -23,10 +27,10 @@ namespace FModel.Views
InitializeComponent();
}
public async void Load(UObject export) => await _applicationView.ModelViewer.LoadExport(export);
public async void Swap(UMaterialInstance materialInstance)
public async Task Load(UObject export) => await _applicationView.ModelViewer.LoadExport(export).ConfigureAwait(true);
public async Task Swap(UMaterialInstance materialInstance)
{
var sucess = await _applicationView.ModelViewer.TryChangeSelectedMaterial(materialInstance);
var sucess = await _applicationView.ModelViewer.TryChangeSelectedMaterial(materialInstance).ConfigureAwait(true);
if (sucess)
{
_applicationView.CUE4Parse.ModelIsSwappingMaterial = false;