예제 #1
0
 private void LoadDependencies_BeforeFlags(FAssetRegistryArchive Ar, FAssetRegistryVersionType version)
 {
     foreach (var dependsNode in PreallocatedDependsNodeDataBuffers)
     {
         dependsNode.SerializeLoad_BeforeFlags(Ar, version, PreallocatedDependsNodeDataBuffers);
     }
 }
예제 #2
0
        private void Load(FAssetRegistryArchive Ar, FAssetRegistryVersionType version)
        {
            PreallocatedAssetDataBuffers = Ar.ReadArray(() => new FAssetData(Ar));

            if (version < FAssetRegistryVersionType.AddedDependencyFlags)
            {
                var localNumDependsNodes = Ar.Read <int>();
                PreallocatedDependsNodeDataBuffers = Ar.ReadArray(localNumDependsNodes, () => new FDependsNode());
                if (localNumDependsNodes > 0)
                {
                    LoadDependencies_BeforeFlags(Ar, version);
                }
            }
            else
            {
                var dependencySectionSize = Ar.Read <long>();
                var dependencySectionEnd  = Ar.Position + dependencySectionSize;
                var localNumDependsNodes  = Ar.Read <int>();
                PreallocatedDependsNodeDataBuffers = Ar.ReadArray(localNumDependsNodes, () => new FDependsNode());
                if (localNumDependsNodes > 0)
                {
                    LoadDependencies(Ar);
                }
                Ar.Seek(dependencySectionEnd, SeekOrigin.Begin);
            }

            var serializeHash = version < FAssetRegistryVersionType.AddedCookedMD5Hash;

            PreallocatedPackageDataBuffers = Ar.ReadArray(() => new FAssetPackageData(Ar, serializeHash));
        }
예제 #3
0
        public FAssetPackageData(FAssetRegistryArchive Ar, FAssetRegistryVersionType version)
        {
            PackageName = Ar.ReadFName();
            DiskSize    = Ar.Read <long>();
            PackageGuid = Ar.Read <FGuid>();
            if (version >= FAssetRegistryVersionType.AddedCookedMD5Hash)
            {
                CookedHash = new FMD5Hash(Ar);
            }
            if (version >= FAssetRegistryVersionType.WorkspaceDomain)
            {
                if (version >= FAssetRegistryVersionType.PackageFileSummaryVersionChange)
                {
                    FileVersionUE = Ar.Read <FPackageFileVersion>();
                }
                else
                {
                    var ue4Version = Ar.Read <int>();
                    FileVersionUE = FPackageFileVersion.CreateUE4Version(ue4Version);
                }

                FileVersionLicenseeUE = Ar.Read <int>();
                Flags          = Ar.Read <uint>();
                CustomVersions = Ar.ReadArray <FCustomVersion>();
            }
            if (version >= FAssetRegistryVersionType.PackageImportedClasses)
            {
                ImportedClasses = Ar.ReadArray(Ar.ReadFName);
            }
        }
예제 #4
0
        public void SerializeLoad_BeforeFlags(FAssetRegistryArchive Ar, FAssetRegistryVersionType version, FDependsNode[] a)
        {
            Identifier = new FAssetIdentifier(Ar);

            var numHard        = Ar.Read <int>();
            var numSoft        = Ar.Read <int>();
            var numName        = Ar.Read <int>();
            var numSoftManage  = Ar.Read <int>();
            var numHardManage  = version >= FAssetRegistryVersionType.AddedHardManage ? Ar.Read <int>() : 0;
            var numReferencers = Ar.Read <int>();

            PackageDependencies = new List <FDependsNode>(numHard + numSoft);
            NameDependencies    = new List <FDependsNode>(numName);
            ManageDependencies  = new List <FDependsNode>(numSoftManage + numHardManage);
            Referencers         = new List <FDependsNode>(numReferencers);

            void SerializeNodeArray(int num, ref List <FDependsNode> dependencies)
            {
                for (var i = 0; i < num; i++)
                {
                    var index = Ar.Read <int>();
                    if (index < 0 || index >= a.Length)
                    {
                        throw new ParserException("");
                    }
                    var dependsNodes = a[index];
                    dependencies.Add(dependsNodes);
                }
            }

            SerializeNodeArray(numHard, ref PackageDependencies);
            SerializeNodeArray(numSoft, ref PackageDependencies);
            SerializeNodeArray(numName, ref NameDependencies);
            SerializeNodeArray(numSoftManage, ref ManageDependencies);
            SerializeNodeArray(numHardManage, ref ManageDependencies);
            SerializeNodeArray(numReferencers, ref Referencers);
        }
예제 #5
0
        public void SerializeLoad_BeforeFlags(FAssetRegistryArchive Ar, FAssetRegistryVersionType version, FDependsNode[] preallocatedDependsNodeDataBuffer)
        {
            Identifier = new FAssetIdentifier(Ar);

            var numHard        = Ar.Read <int>();
            var numSoft        = Ar.Read <int>();
            var numName        = Ar.Read <int>();
            var numSoftManage  = Ar.Read <int>();
            var numHardManage  = version >= FAssetRegistryVersionType.AddedHardManage ? Ar.Read <int>() : 0;
            var numReferencers = Ar.Read <int>();

            PackageDependencies = new List <FDependsNode>(numHard + numSoft);
            NameDependencies    = new List <FDependsNode>(numName);
            ManageDependencies  = new List <FDependsNode>(numSoftManage + numHardManage);
            Referencers         = new List <FDependsNode>(numReferencers);

            void SerializeNodeArray(int num, ref List <FDependsNode> outNodes)
            {
                for (var dependencyIndex = 0; dependencyIndex < num; ++dependencyIndex)
                {
                    var index = Ar.Read <int>();
                    if (index < 0 || index >= preallocatedDependsNodeDataBuffer.Length)
                    {
                        throw new ParserException($"Index {index} doesn't exist in 'PreallocatedDependsNodeDataBuffers'");
                    }
                    var dependsNode = preallocatedDependsNodeDataBuffer[index];
                    outNodes.Add(dependsNode);
                }
            }

            SerializeNodeArray(numHard, ref PackageDependencies);
            SerializeNodeArray(numSoft, ref PackageDependencies);
            SerializeNodeArray(numName, ref NameDependencies);
            SerializeNodeArray(numSoftManage, ref ManageDependencies);
            SerializeNodeArray(numHardManage, ref ManageDependencies);
            SerializeNodeArray(numReferencers, ref Referencers);
        }
예제 #6
0
        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));
        }