public PackFileContainer(string packFileSystemPath, BinaryReader reader)
        {
            SystemFilePath = packFileSystemPath;
            Name           = Path.GetFileNameWithoutExtension(packFileSystemPath);
            Header         = new PFHeader(reader);

            FileList = new Dictionary <string, IPackFile>(Header.FileCount);

            PackedFileSourceParent packedFileSourceParent = new PackedFileSourceParent()
            {
                FilePath = packFileSystemPath,
            };

            long offset = Header.DataStart;

            for (int i = 0; i < Header.FileCount; i++)
            {
                uint size = reader.ReadUInt32();

                if (Header.HasAdditionalInfo)
                {
                    reader.ReadUInt32();
                }

                byte isCompressed = 0;
                if (Header.Version == "PFH5")
                {
                    isCompressed = reader.ReadByte();   // For warhammer 2, terrain files are compressed
                }
                string packedFileName = IOFunctions.TheadUnsafeReadZeroTerminatedAscii(reader).ToLower();

                var packFileName = Path.GetFileName(packedFileName);
                var fileContent  = new PackFile(packFileName, new PackedFileSource(packedFileSourceParent, offset, size));

                FileList.Add(packedFileName, fileContent);
                offset += size;
            }
        }
Example #2
0
 public PackedFileSource(PackedFileSourceParent parent, long offset, long length)
 {
     Offset  = offset;
     _parent = parent;
     Size    = length;
 }