1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 10:14:06 +02:00

strictly distinguish between server and demo ticks

This commit is contained in:
Robin Appelman 2022-09-17 15:31:32 +02:00
commit 28de17a67c
34 changed files with 14232 additions and 1033 deletions

View file

@ -6,6 +6,7 @@ use test_case::test_case;
use fnv::FnvHashMap;
use std::collections::HashMap;
use std::io::{BufRead, BufReader};
use tf_demo_parser::demo::data::DemoTick;
use tf_demo_parser::demo::message::packetentities::{EntityId, PacketEntity, UpdateType};
use tf_demo_parser::demo::message::Message;
use tf_demo_parser::demo::packet::datatable::{
@ -39,7 +40,7 @@ impl From<UpdateType> for PVSCompat {
#[derive(PartialEq, Clone, Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
struct EntityDump {
tick: u32,
tick: DemoTick,
server_class: ServerClassName,
id: EntityId,
props: HashMap<String, SendPropValue>,
@ -49,7 +50,7 @@ struct EntityDump {
impl EntityDump {
pub fn from_entity(
entity: PacketEntity,
tick: u32,
tick: DemoTick,
classes: &[ServerClass],
prop_names: &FnvHashMap<SendPropIdentifier, (SendTableName, SendPropName)>,
state: &ParserState,
@ -71,7 +72,7 @@ impl EntityDump {
}
struct EntityDumper {
entities: Vec<(u32, PacketEntity)>,
entities: Vec<(DemoTick, PacketEntity)>,
prop_names: FnvHashMap<SendPropIdentifier, (SendTableName, SendPropName)>,
}
@ -94,7 +95,7 @@ impl MessageHandler for EntityDumper {
}
}
fn handle_message(&mut self, message: &Message, tick: u32, _parser_state: &ParserState) {
fn handle_message(&mut self, message: &Message, tick: DemoTick, _parser_state: &ParserState) {
match message {
Message::PacketEntities(entity_message) => self.entities.extend(
entity_message

View file

@ -73,5 +73,5 @@ fn setup_message(handler: &mut DemoHandler<NullHandler>, input: &str) {
&handler.state_handler,
)
.unwrap();
handler.handle_message(message);
handler.handle_message(message, 0.into());
}

View file

@ -18,6 +18,12 @@ fn snapshot_test(input_file: &str, snapshot_file: &str) {
let file = fs::read(format!("test_data/{}", input_file)).expect("Unable to read file");
let demo = Demo::new(&file);
let (_, state) = DemoParser::new(demo.get_stream()).parse().unwrap();
//
// fs::write(
// format!("test_data/{}", snapshot_file),
// serde_json::to_string_pretty(&state).unwrap(),
// )
// .unwrap();
let expected: MatchState = serde_json::from_slice(
fs::read(format!("test_data/{}", snapshot_file))