diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs index 469aa6b..09aba5a 100644 --- a/AssetStudio/AssetsManager.cs +++ b/AssetStudio/AssetsManager.cs @@ -692,6 +692,9 @@ namespace AssetStudio case ClassIDType.AssetBundle: obj = new AssetBundle(objectReader); break; + case ClassIDType.AssetBundleManifest: + obj = new AssetBundleManifest(objectReader); + break; case ClassIDType.AudioClip: obj = new AudioClip(objectReader); break; diff --git a/AssetStudio/Classes/AssetBundleManifest.cs b/AssetStudio/Classes/AssetBundleManifest.cs new file mode 100644 index 0000000..1d6d49c --- /dev/null +++ b/AssetStudio/Classes/AssetBundleManifest.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; + +namespace AssetStudio +{ + public class AssetBundleInfo + { + public string AssetBundleHash; + public int[] AssetBundleDependencies; + + public AssetBundleInfo(ObjectReader reader) + { + AssetBundleHash = reader.ReadBytesAsHexString(16); + AssetBundleDependencies = reader.ReadInt32Array(); + } + } + + public sealed class AssetBundleManifest : NamedObject + { + public List> AssetBundleNames; + public int[] AssetBundlesWithVariant; + public List> AssetBundleInfos; + + public AssetBundleManifest(ObjectReader reader) : base(reader) + { + var AssetBundleNamesCount = reader.ReadInt32(); + AssetBundleNames = new List>(); + for (var i = 0; i < AssetBundleNamesCount; i++) + { + AssetBundleNames.Add(new KeyValuePair(reader.ReadInt32(), reader.ReadAlignedString())); + } + + AssetBundlesWithVariant = reader.ReadInt32Array(); + + var AssetBundleInfosCount = reader.ReadInt32(); + AssetBundleInfos = new List>(); + for (var i = 0; i < AssetBundleInfosCount; i++) + { + AssetBundleInfos.Add(new KeyValuePair(reader.ReadInt32(), new AssetBundleInfo(reader))); + } + } + } +}