コード例 #1
0
        private SerializedFileScheme(SmartStream stream, long offset, long size, string filePath, string fileName, TransferInstructionFlags flags) :
            base(stream, offset, size, filePath, fileName)
        {
            Flags = flags;

            Header   = new SerializedFileHeader(Name);
            Metadata = new SerializedFileMetadata(Name);
        }
コード例 #2
0
        private SerializedFile(IFileCollection collection, IAssemblyManager manager, string filePath, string name, TransferInstructionFlags flags)
        {
            if (collection == null)
            {
                throw new ArgumentNullException(nameof(collection));
            }
            if (string.IsNullOrEmpty(filePath))
            {
                throw new ArgumentNullException(nameof(filePath));
            }

            Collection      = collection;
            AssemblyManager = manager;
            FilePath        = filePath;
            Name            = FilenameUtils.FixFileIdentifier(name);
            Flags           = flags;

            Header   = new SerializedFileHeader(Name);
            Metadata = new SerializedFileMetadata(Name);
        }
コード例 #3
0
        private void ReadAssets(EndianReader reader)
        {
            HashSet <long> preloaded = new HashSet <long>();

            using (AssetReader assetReader = new AssetReader(reader, Version, Platform, Flags))
            {
                if (SerializedFileMetadata.IsReadPreload(Header.Generation))
                {
                    foreach (ObjectPtr ptr in Metadata.Preloads)
                    {
                        if (ptr.FileID == 0)
                        {
                            AssetEntry info = Metadata.Entries[ptr.PathID];
                            ReadAsset(assetReader, info);
                            preloaded.Add(ptr.PathID);
                        }
                    }
                }

                foreach (KeyValuePair <long, AssetEntry> infoPair in Metadata.Entries)
                {
                    if (infoPair.Value.ClassID == ClassIDType.MonoScript)
                    {
                        if (!preloaded.Contains(infoPair.Key))
                        {
                            ReadAsset(assetReader, infoPair.Value);
                            preloaded.Add(infoPair.Key);
                        }
                    }
                }

                foreach (AssetEntry info in Metadata.Entries.Values)
                {
                    if (!preloaded.Contains(info.PathID))
                    {
                        ReadAsset(assetReader, info);
                    }
                }
            }
        }
コード例 #4
0
        private void ReadAssets(EndianReader reader, long startPosition)
        {
            HashSet <long> preloaded = new HashSet <long>();

            if (SerializedFileMetadata.IsReadPreload(Header.Generation))
            {
                foreach (ObjectPtr ptr in Metadata.Preloads)
                {
                    if (ptr.FileID == 0)
                    {
                        AssetEntry info = Metadata.Objects[ptr.PathID];
                        ReadAsset(reader, info, startPosition);
                        preloaded.Add(ptr.PathID);
                    }
                }
            }

            foreach (KeyValuePair <long, AssetEntry> infoPair in Metadata.Objects)
            {
                ClassIDType classID = AssetEntryToClassIDType(infoPair.Value);
                if (classID == ClassIDType.MonoScript)
                {
                    if (!preloaded.Contains(infoPair.Key))
                    {
                        ReadAsset(reader, infoPair.Value, startPosition);
                        preloaded.Add(infoPair.Key);
                    }
                }
            }

            foreach (AssetEntry info in Metadata.Objects.Values)
            {
                if (!preloaded.Contains(info.PathID))
                {
                    ReadAsset(reader, info, startPosition);
                }
            }
        }