public DDTDirectoryEntry(BinaryReader reader, DDTEntry parent, int nameOffset, uint dataOffset, int numChildren) { _parent = parent; _nameOffset = nameOffset; _dataOffset = dataOffset; _name = reader.ReadCStringAtOffset(_nameOffset); _numChildren = numChildren; _childEntries = new DDTEntry[numChildren]; reader.Seek(dataOffset, SeekOrigin.Begin); for (int i = 0; i < numChildren; i++) { _childEntries[i] = DDTEntryFactory.GetEntry(this, reader); } }
public static DDTEntry GetEntry(DDTEntry parent, BinaryReader reader) { int nameOffset = reader.ReadInt32(); uint dataOffset = reader.ReadUInt32(); int numData = reader.ReadInt32(); long posNextEntry = reader.GetPosition(); DDTEntry entry; if (numData < 0) { int numChildren = ~numData + 1; entry = new DDTDirectoryEntry(reader, parent, nameOffset, dataOffset, numChildren); } else { entry = new DDTFileEntry(reader, parent, nameOffset, dataOffset, numData); } reader.Seek(posNextEntry, SeekOrigin.Begin); return entry; }
public DDTFileEntry(BinaryReader reader, DDTEntry parent, int nameOffset, uint dataOffset, int size) { _parent = parent; _nameOffset = nameOffset; _name = reader.ReadCStringAtOffset(_nameOffset); _dataOffset = dataOffset * DDTFile.IMG_BLOCKSIZE; _size = size; }