Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 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]);
     }
 }
Esempio n. 3
0
        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);
        }