using Newtonsoft.Json; using System.Collections.Generic; namespace AssetStudio { public class AssetInfo { public int preloadIndex; public int preloadSize; public PPtr asset; public AssetInfo(ObjectReader reader) { preloadIndex = reader.ReadInt32(); preloadSize = reader.ReadInt32(); asset = new PPtr(reader); } } public sealed class AssetBundle : NamedObject { public static bool Exportable; public PPtr[] PreloadTable; public KeyValuePair[] Container; public AssetInfo MainAsset; public uint RuntimeComaptability; public string AssetBundleName; public int DependencyCount; public string[] Dependencies; public bool IsStreamedScenessetBundle; public int ExplicitDataLayout; public int PathFlags; public int SceneHashCount; public KeyValuePair[] SceneHashes; public AssetBundle(ObjectReader reader) : base(reader) { var m_PreloadTableSize = reader.ReadInt32(); PreloadTable = new PPtr[m_PreloadTableSize]; for (int i = 0; i < m_PreloadTableSize; i++) { PreloadTable[i] = new PPtr(reader); } var m_ContainerSize = reader.ReadInt32(); Container = new KeyValuePair[m_ContainerSize]; for (int i = 0; i < m_ContainerSize; i++) { Container[i] = new KeyValuePair(reader.ReadAlignedString(), new AssetInfo(reader)); } if (reader.Game.Name == "GI" || reader.Game.Name == "GI_CB1" || reader.Game.Name == "GI_CB2" || reader.Game.Name == "GI_CB3") { MainAsset = new AssetInfo(reader); RuntimeComaptability = reader.ReadUInt32(); } AssetBundleName = reader.ReadAlignedString(); DependencyCount = reader.ReadInt32(); Dependencies = new string[DependencyCount]; for (int k = 0; k < DependencyCount; k++) { Dependencies[k] = reader.ReadAlignedString(); } if (reader.Game.Name == "GI_CB1" || reader.Game.Name == "GI_CB2") { IsStreamedScenessetBundle = reader.ReadBoolean(); reader.AlignStream(); PathFlags = reader.ReadInt32(); } else if (reader.Game.Name == "GI_CB3") { IsStreamedScenessetBundle = reader.ReadBoolean(); reader.AlignStream(); ExplicitDataLayout = reader.ReadInt32(); PathFlags = reader.ReadInt32(); } else if (reader.Game.Name == "GI") { IsStreamedScenessetBundle = reader.ReadBoolean(); reader.AlignStream(); ExplicitDataLayout = reader.ReadInt32(); PathFlags = reader.ReadInt32(); SceneHashCount = reader.ReadInt32(); SceneHashes = new KeyValuePair[SceneHashCount]; for (int l = 0; l < SceneHashCount; l++) { SceneHashes[l] = new KeyValuePair(reader.ReadAlignedString(), reader.ReadAlignedString()); } } } } }