internal Message(AssetLoader loader)
: base(loader)
{
using (BinaryReader reader = loader.Reader) {
Version = (MessageVersion)reader.ReadInt32();
int fileLength, addonOffset = -1;
int count;
Codex <MessageItem> items = new Codex <MessageItem>();
Items = items;
switch (MajorVersion)
{
case 3:
fileLength = reader.ReadUInt16() + 6;
count = reader.ReadUInt16();
break;
case 4:
addonOffset = reader.ReadUInt16() + 6;
Unknowns.ReadInt16s(reader, 1);
count = reader.ReadUInt16();
break;
case 5:
addonOffset = reader.ReadInt32() + 6;
count = reader.ReadUInt16();
break;
default:
throw new NotImplementedException("Unimplemented version " + Version);
}
for (int index = 0; index < count; index++)
{
MessageItem item = new MessageItem(this, index, loader);
items.Add(item);
AddChild(item);
}
foreach (MessageItem item in items)
{
item.ReadText(reader);
}
if (addonOffset >= 0)
{
reader.BaseStream.Position = addonOffset;
foreach (MessageItem item in items)
{
item.ReadAddOn(reader);
}
}
}
}