private int CalculateIMGsSize() { int size = 0; foreach (DictionaryEntry entry in Directories) { WZDirectory directory = (WZDirectory)entry.Value; size += directory.CalculateIMGsSize(); } foreach (DictionaryEntry entry in IMGs) { IMGFile img = (IMGFile)entry.Value; size += img.Size; } return(size); }
public override void Write(BinaryWriter file) { if (dirOffsets.Contains(this)) { WriteOffsetAt(file, (int)dirOffsets[this], (int)file.BaseStream.Position); } WritePackedInt(file, Directories.Count + IMGs.Count); foreach (DictionaryEntry entry in Directories) { WZDirectory directory = (WZDirectory)entry.Value; WriteString(file, directory.Name, 3, 1, true); WritePackedInt(file, directory.CalculateIMGsSize()); WritePackedInt(file, 0); // checksum dirOffsets[directory] = (int)file.BaseStream.Position; file.Write((int)0); // keep place for the offset } foreach (DictionaryEntry entry in IMGs) { IMGFile img = (IMGFile)entry.Value; img.CalculateChecksum(); WriteString(file, img.Name, 4, 2, true); WritePackedInt(file, img.Size); WritePackedInt(file, img.Checksum); imgOffsets[img] = (int)file.BaseStream.Position; file.Write((int)0); // keep place for the offset } foreach (DictionaryEntry entry in Directories) { WZDirectory directory = (WZDirectory)entry.Value; directory.Write(file); } /*foreach (DictionaryEntry entry in IMGs) * { * IMGFile img = (IMGFile)entry.Value; * img.Write(file); * }*/ }