private void Load(FAssetRegistryArchive Ar, FAssetRegistryVersionType version) { PreallocatedAssetDataBuffers = Ar.ReadArray(() => new FAssetData(Ar)); if (version < FAssetRegistryVersionType.AddedDependencyFlags) { var localNumDependsNodes = Ar.Read <int>(); PreallocatedDependsNodeDataBuffers = new FDependsNode[localNumDependsNodes]; for (int i = 0; i < localNumDependsNodes; i++) { PreallocatedDependsNodeDataBuffers[i] = new FDependsNode(i); } if (localNumDependsNodes > 0) { LoadDependencies_BeforeFlags(Ar, version); } } else { var dependencySectionSize = Ar.Read <long>(); var dependencySectionEnd = Ar.Position + dependencySectionSize; var localNumDependsNodes = Ar.Read <int>(); PreallocatedDependsNodeDataBuffers = new FDependsNode[localNumDependsNodes]; for (int i = 0; i < localNumDependsNodes; i++) { PreallocatedDependsNodeDataBuffers[i] = new FDependsNode(i); } if (localNumDependsNodes > 0) { LoadDependencies(Ar); } Ar.Position = dependencySectionEnd; } PreallocatedPackageDataBuffers = Ar.ReadArray(() => new FAssetPackageData(Ar, version)); }
public AssetRegistryFile(BinaryReader reader) { var Version = FAssetRegistryVersion.DeserializeVersion(reader); if (Version < FAssetRegistryVersion.Type.AddedCookedMD5Hash) { throw new FileLoadException("Cannot read states before this version"); } var nameReader = new FNameTableArchiveReader(reader); var LocalNumAssets = reader.ReadInt32(); PreallocatedAssetDataBuffer = new FAssetData[LocalNumAssets]; for (int i = 0; i < LocalNumAssets; i++) { PreallocatedAssetDataBuffer[i] = new FAssetData(nameReader); } var LocalNumDependsNodes = reader.ReadInt32(); PreallocatedDependsNodeDataBuffer = new FDependsNode[LocalNumDependsNodes]; for (int i = 0; i < LocalNumDependsNodes; i++) { PreallocatedDependsNodeDataBuffer[i] = new FDependsNode(); } SortedList <EAssetRegistryDependencyType, int> DepCounts = new SortedList <EAssetRegistryDependencyType, int>(); for (int i = 0; i < LocalNumDependsNodes; i++) { FAssetIdentifier AssetIdentifier = new FAssetIdentifier(nameReader); DepCounts[EAssetRegistryDependencyType.Hard] = reader.ReadInt32(); DepCounts[EAssetRegistryDependencyType.Soft] = reader.ReadInt32(); DepCounts[EAssetRegistryDependencyType.SearchableName] = reader.ReadInt32(); DepCounts[EAssetRegistryDependencyType.SoftManage] = reader.ReadInt32(); DepCounts[EAssetRegistryDependencyType.HardManage] = Version < FAssetRegistryVersion.Type.AddedHardManage ? 0 : reader.ReadInt32(); DepCounts[0] = reader.ReadInt32(); PreallocatedDependsNodeDataBuffer[i].Identifier = AssetIdentifier; PreallocatedDependsNodeDataBuffer[i].Reserve(DepCounts); SerializeDependencyType(EAssetRegistryDependencyType.Hard, i); SerializeDependencyType(EAssetRegistryDependencyType.Soft, i); SerializeDependencyType(EAssetRegistryDependencyType.SearchableName, i); SerializeDependencyType(EAssetRegistryDependencyType.SoftManage, i); SerializeDependencyType(EAssetRegistryDependencyType.HardManage, i); SerializeDependencyType(0, i); } void SerializeDependencyType(EAssetRegistryDependencyType InDependencyType, int AssetIndex) { for (int i = 0; i < DepCounts[InDependencyType]; ++i) { int index = reader.ReadInt32(); if (index < 0 || index >= LocalNumDependsNodes) { throw new FileLoadException("could you please serialize your assetregistry correctly"); } PreallocatedDependsNodeDataBuffer[AssetIndex].Add(index, InDependencyType); } } int LocalNumPackageData = reader.ReadInt32(); PreallocatedPackageDataBuffer = new FAssetPackageData[LocalNumPackageData]; var bSerializeHash = Version < FAssetRegistryVersion.Type.AddedCookedMD5Hash; for (int i = 0; i < LocalNumPackageData; i++) { PreallocatedPackageDataBuffer[i] = new FAssetPackageData(nameReader, bSerializeHash); } }