public static void Write(this BinaryWriter writer, MdbPacket packet) { writer.WriteAscii(packet.Signature, 4); writer.Write(packet.Size); long mark1 = writer.BaseStream.Position; switch (packet.Signature) { case "RIGD": writer.WriteMdbPacket((MdbPacket_RIGD)packet); break; case "SKIN": writer.WriteMdbPacket((MdbPacket_SKIN)packet); break; case "COL2": case "COL3": writer.WriteMdbPacket((MdbPacket_COLN)packet); break; case "COLS": writer.WriteMdbPacket((MdbPacket_COLS)packet); break; case "WALK": writer.WriteMdbPacket((MdbPacket_WALK)packet); break; case "HOOK": writer.WriteMdbPacket((MdbPacket_HOOK)packet); break; case "TRRN": writer.WriteMdbPacket((MdbPacket_TRRN)packet); break; case "HELM": writer.WriteMdbPacket((MdbPacket_HELM)packet); break; case "HAIR": writer.WriteMdbPacket((MdbPacket_HAIR)packet); break; default: CTDebug.Error("Unrecognized object format: {0}", packet.Signature); break; } long mark2 = writer.BaseStream.Position; if (mark2 - mark1 != packet.Size) { CTDebug.Error("Incorrectly sized packet!"); } }
public static MdbPacket ReadMdbPacket(this BinaryReader reader) { string Signature = reader.ReadAscii(4); UInt32 Size = reader.ReadUInt32(); MdbPacket ret = null; long debugCheckPos = reader.BaseStream.Position; switch (Signature) { case "RIGD": ret = reader.ReadMdbPacket_RIGD(Size); break; case "SKIN": ret = reader.ReadMdbPacket_SKIN(Size); break; case "COL2": case "COL3": ret = reader.ReadMdbPacket_COLN(Size); break; case "COLS": ret = reader.ReadMdbPacket_COLS(Size); break; case "WALK": ret = reader.ReadMdbPacket_WALK(Size); break; case "HOOK": ret = reader.ReadMdbPacket_HOOK(Size); break; case "TRRN": ret = reader.ReadMdbPacket_TRRN(Size); break; case "HELM": ret = reader.ReadMdbPacket_HELM(Size); break; case "HAIR": ret = reader.ReadMdbPacket_HAIR(Size); break; default: CTDebug.Error("Unrecognized object format: {0}", Signature); break; } long diff = reader.BaseStream.Position - debugCheckPos; if (diff != Size) { CTDebug.Warn("Invalid size of MDB Packet."); } ret.Size = Size; ret.Signature = Signature; return(ret); }