internal FAssetIdentifier(FNameTableArchiveReader reader) { PackageName = default; PrimaryAssetType = default; ObjectName = default; ValueName = default; byte FieldBits = reader.Loader.ReadByte(); if ((FieldBits & (1 << 0)) != 0) { PackageName = reader.ReadFName(); } if ((FieldBits & (1 << 1)) != 0) { PrimaryAssetType = reader.ReadFName(); } if ((FieldBits & (1 << 2)) != 0) { ObjectName = reader.ReadFName(); } if ((FieldBits & (1 << 3)) != 0) { ValueName = reader.ReadFName(); } }
internal FAssetData(FNameTableArchiveReader reader) { ObjectPath = reader.ReadFName(); PackagePath = reader.ReadFName(); AssetClass = reader.ReadFName(); PackageName = reader.ReadFName(); AssetName = reader.ReadFName(); TagsAndValues = new FAssetDataTagMapSharedView(reader); ChunkIDs = reader.Loader.ReadTArray(() => reader.Loader.ReadInt32()); PackageFlags = reader.Loader.ReadInt32(); }
internal FAssetPackageData(FNameTableArchiveReader reader, bool bSerializeHash) { PackageName = reader.ReadFName(); DiskSize = reader.Loader.ReadInt64(); PackageGuid = new FGuid(reader.Loader); if (bSerializeHash) { CookedHash = new FMD5Hash(reader.Loader); } else { CookedHash = default; } }
public FAssetRegistryState(FArchive Ar) { FAssetRegistryVersion.TrySerializeVersion(Ar, out var version); switch (version) { case < FAssetRegistryVersionType.RemovedMD5Hash: Log.Warning($"Cannot read registry state before '{version}'"); break; case < FAssetRegistryVersionType.FixedTags: { var nameTableReader = new FNameTableArchiveReader(Ar); Load(nameTableReader, version); break; } default: { var reader = new FAssetRegistryReader(Ar); Load(reader, version); break; } } }
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); } }