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); } } } }
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); } } }