mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 10:14:06 +02:00
fix classinfo
This commit is contained in:
parent
d7f14a70aa
commit
21a2e09030
4 changed files with 22 additions and 9 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)?),
|
||||
|
|
|
|||
|
|
@ -34,7 +34,10 @@ impl Parse for MessagePacket {
|
|||
let mut messages: Vec<Message> = Vec::new();
|
||||
while packet_data.bits_left() > 6 {
|
||||
let message = Message::parse(&mut packet_data, state)?;
|
||||
messages.push(message);
|
||||
match message {
|
||||
Message::Empty => {}
|
||||
_ => messages.push(message)
|
||||
}
|
||||
}
|
||||
|
||||
let packet = MessagePacket {
|
||||
|
|
|
|||
|
|
@ -75,10 +75,10 @@ pub struct StringTableEntry {
|
|||
impl fmt::Debug for StringTableEntry {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match &self.extra_data {
|
||||
None => write!(f, "StringTableEntry {{ text: {} }}", self.text),
|
||||
None => write!(f, "StringTableEntry {{ text: \"{}\" }}", self.text),
|
||||
Some(extra_data) => write!(
|
||||
f,
|
||||
"StringTableEntry{{ text: {} extra_data: {} bits }}",
|
||||
"StringTableEntry{{ text: \"{}\" extra_data: {} bits }}",
|
||||
self.text, extra_data.len
|
||||
),
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue