コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
 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;
     }
 }
コード例 #4
0
        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;
            }
            }
        }
コード例 #5
0
        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);
            }
        }