1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-04 02:24:12 +02:00

fix classinfo

This commit is contained in:
Robin Appelman 2019-03-02 19:00:08 +01:00
commit 21a2e09030
4 changed files with 22 additions and 9 deletions

View file

@ -1,6 +1,7 @@
use bitstream_reader::{BitRead, BitReadSized, LittleEndian};
use crate::{ReadResult, Stream};
use crate::demo::message::stringtable::log_base2;
#[derive(BitReadSized, Debug)]
pub struct ClassInfoEntry {
@ -20,12 +21,17 @@ pub struct ClassInfoMessage {
impl BitRead<LittleEndian> for ClassInfoMessage {
fn read(stream: &mut Stream) -> ReadResult<Self> {
let count: u16 = stream.read()?;
let create = stream.read()?;
let mut entries = Vec::with_capacity(count as usize);
let bits = 16 - count.leading_zeros();
for _ in 0..count {
entries.push(stream.read_sized(bits as usize)?);
}
let create: bool = stream.read()?;
let entries = if !create {
let mut entries = Vec::with_capacity(count as usize);
let bits = log_base2(count);
for _ in 0..count {
entries.push(stream.read_sized(bits as usize)?);
}
entries
} else {
Vec::new()
};
Ok(ClassInfoMessage {
count,

View file

@ -27,6 +27,7 @@ pub mod tempentities;
#[derive(Primitive, Debug)]
pub enum MessageType {
Empty = 0,
File = 2,
NetTick = 3,
StringCmd = 4,
@ -66,6 +67,7 @@ impl Parse for MessageType {
#[derive(Debug)]
pub enum Message {
Empty,
File(FileMessage),
NetTick(NetTickMessage),
StringCmd(StringCmdMessage),
@ -98,7 +100,9 @@ pub enum Message {
impl Parse for Message {
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
let message_type = MessageType::parse(stream, state)?;
dbg!(&message_type);
Ok(match message_type {
MessageType::Empty => Message::Empty,
MessageType::File => Message::File(FileMessage::parse(stream, state)?),
MessageType::NetTick => Message::NetTick(NetTickMessage::parse(stream, state)?),
MessageType::StringCmd => Message::StringCmd(StringCmdMessage::parse(stream, state)?),