diff --git a/FModel/Grabber/Paks/PaksGrabber.cs b/FModel/Grabber/Paks/PaksGrabber.cs index 09700453..b34b88dd 100644 --- a/FModel/Grabber/Paks/PaksGrabber.cs +++ b/FModel/Grabber/Paks/PaksGrabber.cs @@ -24,7 +24,10 @@ namespace FModel.Grabber.Paks public static async Task PopulateMenu() { - PopulateBase(); + await Application.Current.Dispatcher.InvokeAsync(delegate + { + PopulateBase(); + }); await Task.Run(async () => { diff --git a/FModel/MainWindow.xaml.cs b/FModel/MainWindow.xaml.cs index e0e1fc7a..e947c06b 100644 --- a/FModel/MainWindow.xaml.cs +++ b/FModel/MainWindow.xaml.cs @@ -77,14 +77,13 @@ namespace FModel if (!Properties.Settings.Default.SkipVersion) Updater.CheckForUpdate(); DebugHelper.WriteUserSettings(); Folders.CheckWatermarks(); - - LoadMappings(); await Task.WhenAll(Init()).ContinueWith(t => { Keys.NoKeyGoodBye(); MenuItems.FeedCustomGoTos(); AeConfiguration(); + LoadMappings(); if (t.Exception != null) Tasks.TaskCompleted(t.Exception); else StatusBarVm.statusBarViewModel.Set($"{Properties.Resources.Hello} {Environment.UserName}!", Properties.Resources.State); @@ -97,11 +96,11 @@ namespace FModel private async Task Init() { - await PaksGrabber.PopulateMenu().ConfigureAwait(false); - if (Properties.Settings.Default.UseDiscordRpc) DiscordIntegration.StartClient(); - await AesGrabber.Load(Properties.Settings.Default.ReloadAesKeys).ConfigureAwait(false); await CdnDataGrabber.DoCDNStuff().ConfigureAwait(false); + await PaksGrabber.PopulateMenu().ConfigureAwait(false); + await AesGrabber.Load(Properties.Settings.Default.ReloadAesKeys).ConfigureAwait(false); await Folders.DownloadAndExtractVgm().ConfigureAwait(false); + if (Properties.Settings.Default.UseDiscordRpc) DiscordIntegration.StartClient(); } private async void LoadMappings() diff --git a/FModel/PakReader/Parsers/Class/UCurveTable.cs b/FModel/PakReader/Parsers/Class/UCurveTable.cs index 0585f07b..0674effb 100644 --- a/FModel/PakReader/Parsers/Class/UCurveTable.cs +++ b/FModel/PakReader/Parsers/Class/UCurveTable.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.IO; using System.Runtime.CompilerServices; using FModel.PakReader.IO; using FModel.PakReader.Parsers.Objects; @@ -10,7 +11,7 @@ namespace FModel.PakReader.Parsers.Class { public ECurveTableMode CurveTableMode { get; } readonly Dictionary RowMap; - + internal UCurveTable(PackageReader reader) { new UObject(reader); //will break @@ -33,13 +34,19 @@ namespace FModel.PakReader.Parsers.Class } } - internal UCurveTable(IoPackageReader reader, IReadOnlyDictionary properties) + internal UCurveTable(IoPackageReader reader) { reader.ReadUInt16(); // don't ask me reader.ReadUInt32(); // what this is int NumRows = reader.ReadInt32(); CurveTableMode = (ECurveTableMode)reader.ReadByte(); + Dictionary properties = CurveTableMode switch + { + ECurveTableMode.RichCurves => Globals.TypeMappings["RichCurve"], + ECurveTableMode.SimpleCurves => Globals.TypeMappings["SimpleCurve"], + _ => throw new FileLoadException($"This table has an unknown mode ({CurveTableMode})") + }; RowMap = new Dictionary(); for (int i = 0; i < NumRows; i++) diff --git a/FModel/PakReader/Parsers/IoPackageReader.cs b/FModel/PakReader/Parsers/IoPackageReader.cs index 200933a3..d3d922d2 100644 --- a/FModel/PakReader/Parsers/IoPackageReader.cs +++ b/FModel/PakReader/Parsers/IoPackageReader.cs @@ -166,7 +166,7 @@ namespace FModel.PakReader.Parsers "Texture2D" => new UTexture2D(this, properties, _ubulk, ExportMap.Sum(e => (long)e.CookedSerialSize) + beginExportOffset), "TextureCube" => new UTexture2D(this, properties, _ubulk, ExportMap.Sum(e => (long)e.CookedSerialSize) + beginExportOffset), "VirtualTexture2D" => new UTexture2D(this, properties, _ubulk, ExportMap.Sum(e => (long)e.CookedSerialSize) + beginExportOffset), - "CurveTable" => new UCurveTable(this, properties), + "CurveTable" => new UCurveTable(this), "DataTable" => new UDataTable(this, properties, exportType.String), "SoundWave" => new USoundWave(this, properties, _ubulk, ExportMap.Sum(e => (long)e.CookedSerialSize) + beginExportOffset), _ => new UObject(this, properties, type: exportType.String),