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; } }
public PackedFileSource(PackedFileSourceParent parent, long offset, long length) { Offset = offset; _parent = parent; Size = length; }