mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
read some common, but rarely important for us, values lazily
This commit is contained in:
parent
3c6d814e9b
commit
5886debbfb
4 changed files with 44 additions and 32 deletions
|
|
@ -1,11 +1,11 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian, LazyBitReadSized};
|
||||||
|
|
||||||
use crate::{ReadResult, Stream};
|
use crate::{ReadResult, Stream};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ConsoleCmdPacket {
|
pub struct ConsoleCmdPacket {
|
||||||
tick: u32,
|
tick: u32,
|
||||||
command: String,
|
command: LazyBitReadSized<String, LittleEndian>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for ConsoleCmdPacket {
|
impl BitRead<LittleEndian> for ConsoleCmdPacket {
|
||||||
|
|
@ -13,7 +13,7 @@ impl BitRead<LittleEndian> for ConsoleCmdPacket {
|
||||||
let tick = stream.read_int(32)?;
|
let tick = stream.read_int(32)?;
|
||||||
let len = stream.read_int::<usize>(32)?;
|
let len = stream.read_int::<usize>(32)?;
|
||||||
let mut packet_data = stream.read_bits(len * 8)?;
|
let mut packet_data = stream.read_bits(len * 8)?;
|
||||||
let command = packet_data.read_string(Some(len))?;
|
let command = packet_data.read_sized(len)?;
|
||||||
Ok(ConsoleCmdPacket { tick, command })
|
Ok(ConsoleCmdPacket { tick, command })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,54 @@
|
||||||
|
use bitstream_reader::{BitRead, BitSize, LittleEndian, LazyBitRead};
|
||||||
|
|
||||||
|
use crate::{Parse, ParseError, ParserState, Result, Stream, ReadResult};
|
||||||
use crate::demo::message::Message;
|
use crate::demo::message::Message;
|
||||||
use crate::demo::vector::Vector;
|
use crate::demo::vector::Vector;
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct MessagePacket {
|
pub struct MessagePacket {
|
||||||
pub tick: u32,
|
pub tick: u32,
|
||||||
pub messages: Vec<Message>,
|
pub messages: Vec<Message>,
|
||||||
pub view_origin: (Vector, Vector),
|
|
||||||
pub view_angles: (Vector, Vector),
|
|
||||||
pub local_view_angles: (Vector, Vector),
|
|
||||||
pub sequence_in: u32,
|
pub sequence_in: u32,
|
||||||
pub sequence_out: u32,
|
pub sequence_out: u32,
|
||||||
|
pub view_angles: LazyBitRead<ViewAngles, LittleEndian>,
|
||||||
pub flags: u32, // TODO
|
pub flags: u32, // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct ViewAngles {
|
||||||
|
pub origin: (Vector, Vector),
|
||||||
|
pub angles: (Vector, Vector),
|
||||||
|
pub local_angles: (Vector, Vector),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BitSize for ViewAngles {
|
||||||
|
fn bit_size() -> usize {
|
||||||
|
Vector::bit_size() * 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BitRead<LittleEndian> for ViewAngles {
|
||||||
|
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
||||||
|
let view_origin_1 = Vector::read(stream)?;
|
||||||
|
let view_angle_1 = Vector::read(stream)?;
|
||||||
|
let local_view_angle_1 = Vector::read(stream)?;
|
||||||
|
let origin = (Vector::read(stream)?, view_origin_1);
|
||||||
|
let angles = (Vector::read(stream)?, view_angle_1);
|
||||||
|
let local_angles = (Vector::read(stream)?, local_view_angle_1);
|
||||||
|
Ok(ViewAngles {
|
||||||
|
origin,
|
||||||
|
angles,
|
||||||
|
local_angles,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Parse for MessagePacket {
|
impl Parse for MessagePacket {
|
||||||
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
||||||
let tick = stream.read()?;
|
let tick = stream.read()?;
|
||||||
let flags = stream.read()?;
|
let flags = stream.read()?;
|
||||||
|
|
||||||
let view_origin_1 = Vector::parse(stream, state)?;
|
let view_angles = stream.read()?;
|
||||||
let view_angle_1 = Vector::parse(stream, state)?;
|
|
||||||
let local_view_angle_1 = Vector::parse(stream, state)?;
|
|
||||||
let view_origin = (Vector::parse(stream, state)?, view_origin_1);
|
|
||||||
let view_angles = (Vector::parse(stream, state)?, view_angle_1);
|
|
||||||
let local_view_angles = (Vector::parse(stream, state)?, local_view_angle_1);
|
|
||||||
|
|
||||||
let sequence_in = stream.read()?;
|
let sequence_in = stream.read()?;
|
||||||
let sequence_out = stream.read()?;
|
let sequence_out = stream.read()?;
|
||||||
|
|
@ -43,9 +67,7 @@ impl Parse for MessagePacket {
|
||||||
let packet = MessagePacket {
|
let packet = MessagePacket {
|
||||||
tick,
|
tick,
|
||||||
messages,
|
messages,
|
||||||
view_origin,
|
|
||||||
view_angles,
|
view_angles,
|
||||||
local_view_angles,
|
|
||||||
sequence_in,
|
sequence_in,
|
||||||
sequence_out,
|
sequence_out,
|
||||||
flags,
|
flags,
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ pub struct UserCmdPacket {
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for UserCmdPacket {
|
impl BitRead<LittleEndian> for UserCmdPacket {
|
||||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
||||||
let tick = stream.read_int(32)?;
|
let tick = stream.read()?;
|
||||||
let sequence_out = stream.read_int(32)?;
|
let sequence_out = stream.read()?;
|
||||||
let len = stream.read_int::<usize>(32)?;
|
let len:u32 = stream.read()?;
|
||||||
let mut _packet_data = stream.read_bits(len * 8)?;
|
let mut _packet_data = stream.read_bits(len as usize * 8)?;
|
||||||
// TODO parse the packet data
|
// TODO parse the packet data
|
||||||
Ok(UserCmdPacket { tick, sequence_out })
|
Ok(UserCmdPacket { tick, sequence_out })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,16 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian, BitSize};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::{ReadResult, Stream};
|
use crate::{ReadResult, Stream};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Default, Serialize)]
|
#[derive(BitRead, BitSize, Debug, Clone, Copy, Default, Serialize)]
|
||||||
pub struct Vector {
|
pub struct Vector {
|
||||||
pub x: f32,
|
pub x: f32,
|
||||||
pub y: f32,
|
pub y: f32,
|
||||||
pub z: f32,
|
pub z: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for Vector {
|
#[derive(BitRead, BitSize, Debug, Clone, Copy, Default, Serialize)]
|
||||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
|
||||||
Ok(Vector {
|
|
||||||
x: stream.read()?,
|
|
||||||
y: stream.read()?,
|
|
||||||
z: stream.read()?,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(BitRead, Debug, Clone, Copy, Default, Serialize)]
|
|
||||||
pub struct VectorXY {
|
pub struct VectorXY {
|
||||||
pub x: f32,
|
pub x: f32,
|
||||||
pub y: f32,
|
pub y: f32,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue