diff --git a/packages/game/src/classes/BlitzFileProvider.cs b/packages/game/src/classes/BlitzFileProvider.cs new file mode 100644 index 000000000..b58f1b63f --- /dev/null +++ b/packages/game/src/classes/BlitzFileProvider.cs @@ -0,0 +1,49 @@ +using CUE4Parse.FileProvider; +using CUE4Parse.MappingsProvider; +using CUE4Parse.UE4.Exceptions; +using CUE4Parse.UE4.Versions; +using CUE4Parse.Utils; + +namespace game.src.classes; + +public class BlitzFileProvider : DefaultFileProvider +{ + public BlitzFileProvider(string directory) + : base( + directory: directory, + searchOption: SearchOption.AllDirectories, + versions: new(EGame.GAME_UE5_5), + pathComparer: StringComparer.OrdinalIgnoreCase + ) + { + MappingsContainer = new FileUsmapTypeMappingsProvider("../../packages/closed/blitz.usmap"); + } + + public new int Mount() + { + var countNewMounts = 0; + + foreach (var reader in _unloadedVfs.Keys) + { + if (reader.IsEncrypted && CustomEncryption == null || !reader.HasDirectoryIndex) + continue; + + try + { + reader.MountTo(Files, PathComparer); + _unloadedVfs.TryRemove(reader, out _); + countNewMounts++; + } + catch (InvalidAesKeyException) { } + catch (Exception e) + { + Log.Warning( + e, + $"Uncaught exception while loading file {reader.Path.SubstringAfterLast('/')}" + ); + } + } + + return countNewMounts; + } +} diff --git a/packages/game/src/classes/BlitzProvider.cs b/packages/game/src/classes/GameInterface.cs similarity index 65% rename from packages/game/src/classes/BlitzProvider.cs rename to packages/game/src/classes/GameInterface.cs index 50af0ddaf..77106277f 100644 --- a/packages/game/src/classes/BlitzProvider.cs +++ b/packages/game/src/classes/GameInterface.cs @@ -1,31 +1,20 @@ using System.Runtime.InteropServices; using CUE4Parse.Compression; -using CUE4Parse.FileProvider; -using CUE4Parse.MappingsProvider; -using CUE4Parse.UE4.Versions; using Microsoft.JavaScript.NodeApi; namespace game.src.classes; [JSExport] -public class BlitzProvider +public class GameInterface { - private readonly DefaultFileProvider provider; + private readonly BlitzFileProvider provider; public string[] files; public string[] tanksDirectoryNations; - public BlitzProvider(string directory) + public GameInterface(string directory) { - provider = new( - directory: directory, - searchOption: SearchOption.AllDirectories, - versions: new(EGame.GAME_UE5_5), - pathComparer: StringComparer.OrdinalIgnoreCase - ) - { - MappingsContainer = new FileUsmapTypeMappingsProvider("../../packages/closed/blitz.usmap"), - }; + provider = new(directory); provider.Initialize(); provider.Mount(); @@ -47,22 +36,8 @@ public class BlitzProvider OodleHelper.DownloadOodleDll($"temp/oodle.{libraryExtension}"); OodleHelper.Initialize($"temp/oodle.{libraryExtension}"); - // Console.WriteLine( - // provider.Files.Keys.Contains( - // "Blitz/Content/Tanks/USA/A97_M41_Bulldog/PDA_A97_M41_Bulldog.uasset" - // ) - // ); - - // var pda = provider.LoadPackageObject( - // "Blitz/Content/Tanks/USA/A97_M41_Bulldog/PDA_A97_M41_Bulldog.PDA_A97_M41_Bulldog" - // ); - - // Console.WriteLine(pda); - files = [.. provider.Files.Keys]; - Console.WriteLine(string.Join("\n", files)); - var tanksBase = "Blitz/Content/Tanks/"; tanksDirectoryNations = [