public static void Write(this BinaryWriter writer, WDC3SectionHeader sectionHeader) { writer.Write(sectionHeader.TactKeyHash); writer.Write(sectionHeader.FileOffset); writer.Write(sectionHeader.RecordCount); writer.Write(sectionHeader.StringTableSize); writer.Write(sectionHeader.OffsetRecordsEnd); writer.Write(sectionHeader.IdListSize); writer.Write(sectionHeader.RelationshipDataSize); writer.Write(sectionHeader.OffsetMapIdCount); writer.Write(sectionHeader.CopyTableCount); }
public static void Write(this BinaryWriter writer, Section section, WDC3Header header, WDC3SectionHeader sectionHeader) { if (header.Flags.HasFlag(WDB4Flags.HasOffsetMap)) { for (int i = 0; i < section.VariableRecordData.Length; i++) { writer.Write(section.VariableRecordData); } } else { for (int i = 0; i < section.Records.Length; i++) { writer.Write(section.Records[i]); } for (int i = 0; i < sectionHeader.StringTableSize; i++) { writer.Write(section.StringData[i]); } } for (int i = 0; i < section.IdList.Length; i++) { writer.Write(section.IdList[i]); } if (section.CopyTable != null && section.CopyTable.Length > 0) { for (int i = 0; i < section.CopyTable.Length; i++) { writer.Write(section.CopyTable[i]); } } for (int i = 0; i < section.OffsetMap.Length; i++) { writer.Write(section.OffsetMap[i]); } if (section.RelationshipMap != null) { writer.Write(section.RelationshipMap); } for (int i = 0; i < section.OffsetMapIdList.Length; i++) { writer.Write(section.OffsetMapIdList[i]); } }
public static Section ReadSection(this BinaryReader reader, WDC3Header header, WDC3SectionHeader sectionHeader) { var section = new Section(); if (header.Flags.HasFlag(WDB4Flags.HasOffsetMap)) { section.VariableRecordData = new byte[sectionHeader.OffsetRecordsEnd - sectionHeader.FileOffset]; for (int i = 0; i < sectionHeader.OffsetRecordsEnd - sectionHeader.FileOffset; i++) { section.VariableRecordData[i] = reader.ReadByte(); } } else { section.Records = new RecordData[sectionHeader.RecordCount]; for (int i = 0; i < sectionHeader.RecordCount; i++) { section.Records[i] = reader.ReadRecordData(header); } section.StringData = new byte[sectionHeader.StringTableSize]; for (int i = 0; i < sectionHeader.StringTableSize; i++) { section.StringData[i] = reader.ReadByte(); } } section.IdList = new uint[sectionHeader.IdListSize / sizeof(uint)]; for (int i = 0; i < sectionHeader.IdListSize / sizeof(uint); i++) { section.IdList[i] = reader.ReadUInt32(); } if (sectionHeader.CopyTableCount > 0) { section.CopyTable = new CopyTableEntry[sectionHeader.CopyTableCount]; for (int i = 0; i < sectionHeader.CopyTableCount; i++) { section.CopyTable[i] = reader.ReadCopyTableEntry(); } } section.OffsetMap = new OffsetMapEntry[sectionHeader.OffsetMapIdCount]; for (int i = 0; i < sectionHeader.OffsetMapIdCount; i++) { section.OffsetMap[i] = reader.ReadOffsetMapEntry(); } if (sectionHeader.RelationshipDataSize > 0) { section.RelationshipMap = reader.ReadRelationshipMapping(); } section.OffsetMapIdList = new uint[sectionHeader.OffsetMapIdCount]; for (int i = 0; i < sectionHeader.OffsetMapIdCount; i++) { section.OffsetMapIdList[i] = reader.ReadUInt32(); } return(section); }