public static void ExtractResources(BIFPlugin plugin, string bifFile, string extractionDirectory) { using (var filestream = new FileStream(bifFile, FileMode.Open)) { var bifResource = plugin.Import(filestream); var resourceCount = 0; foreach(var fileEntry in bifResource.FileEntries) { byte[] fileBytes = GetFileBytes(filestream, fileEntry.Offset, fileEntry.Size); string extractedFilename = GenerateResourceFilename(extractionDirectory, resourceCount, fileEntry.Type); WriteFile(fileBytes, extractedFilename); resourceCount++; } foreach(var tileEntry in bifResource.TilesetEntries) { byte[] fileBytes = GetFileBytes(filestream, tileEntry.Offset, tileEntry.Size); var extractedFilename = GenerateResourceFilename(extractionDirectory, resourceCount, tileEntry.Type); WriteFile(fileBytes, extractedFilename); resourceCount++; } } }
public void should_correctly_read_bif_stream() { var dummyStream = CreateDummyBIFStream(); var plugin = new BIFPlugin(); var expectedBIF = new BIFResource(); expectedBIF.FileEntries.Add(new BIFFileEntry(0x1, 0x2, 0x3, 0x4, 0x5)); expectedBIF.FileEntries.Add(new BIFFileEntry(0x6, 0x7, 0x8, 0x9, 0xA)); expectedBIF.TilesetEntries.Add(new BIFTilesetEntry(0x1,0x2,0x3,0x4,0x5,0x6)); expectedBIF.TilesetEntries.Add(new BIFTilesetEntry(0x7,0x8,0x9,0xA,0xB,0xC)); var result = plugin.Import(dummyStream); Assert.That(result, Is.EqualTo(expectedBIF)); }