@@ -1189,7 +1189,7 @@ mod tests {
1189
1189
}
1190
1190
1191
1191
#[test]
1192
- fn test_prop_state_filter () {
1192
+ fn test_parse_ticks_prop_state_filter () {
1193
1193
let huf = create_huffman_lookup_table();
1194
1194
let huf2 = create_huffman_lookup_table();
1195
1195
@@ -1293,6 +1293,111 @@ mod tests {
1293
1293
assert_eq!(manually_filtered_positions, automatically_filtered_positions);
1294
1294
}
1295
1295
1296
+ #[test]
1297
+ fn test_parse_event_prop_state_filter() {
1298
+ let huf = create_huffman_lookup_table();
1299
+ let huf2 = create_huffman_lookup_table();
1300
+
1301
+ let settings = ParserInputs {
1302
+ wanted_players: vec![76561198244754626],
1303
+ real_name_to_og_name: AHashMap::default(),
1304
+ wanted_player_props: vec!["X".to_string(), "CCSGameRulesProxy.CCSGameRules.m_bBombPlanted".to_string()],
1305
+ wanted_events: vec!["player_death".to_string()],
1306
+ wanted_other_props: vec![],
1307
+ parse_ents: true,
1308
+ wanted_ticks: vec![],
1309
+ wanted_player_prop_states: AHashMap::default(),
1310
+ wanted_other_prop_states: AHashMap::default(),
1311
+ parse_projectiles: true,
1312
+ only_header: false,
1313
+ count_props: false,
1314
+ only_convars: false,
1315
+ huffman_lookup_table: &huf,
1316
+ order_by_steamid: false,
1317
+ };
1318
+
1319
+ let mut wanted_player_prop_states: AHashMap<std::string::String, Variant> = AHashMap::default();
1320
+ wanted_player_prop_states.insert(
1321
+ "CCSGameRulesProxy.CCSGameRules.m_bBombPlanted".to_string(),
1322
+ Variant::Bool(true),
1323
+ );
1324
+ let settings_with_filter = ParserInputs {
1325
+ wanted_players: vec![76561198244754626],
1326
+ real_name_to_og_name: AHashMap::default(),
1327
+ wanted_player_props: vec!["X".to_string()],
1328
+ wanted_events: vec!["player_death".to_string()],
1329
+ wanted_other_props: vec![],
1330
+ parse_ents: true,
1331
+ wanted_ticks: vec![],
1332
+ wanted_player_prop_states: AHashMap::default(),
1333
+ wanted_other_prop_states: wanted_player_prop_states,
1334
+ parse_projectiles: true,
1335
+ only_header: false,
1336
+ count_props: false,
1337
+ only_convars: false,
1338
+ huffman_lookup_table: &huf2,
1339
+ order_by_steamid: false,
1340
+ };
1341
+
1342
+ let mut ds = Parser::new(settings, crate::parse_demo::ParsingMode::ForceMultiThreaded);
1343
+ let mut ds_with_filter = Parser::new(settings_with_filter, crate::parse_demo::ParsingMode::ForceMultiThreaded);
1344
+ let file = File::open("test_demo.dem").unwrap();
1345
+ let mmap = unsafe { MmapOptions::new().map(&file).unwrap() };
1346
+ let output = ds.parse_demo(&mmap).unwrap();
1347
+ let output_with_filter = ds_with_filter.parse_demo(&mmap).unwrap();
1348
+
1349
+ let positions = match output
1350
+ .df
1351
+ .get(&PLAYER_X_ID)
1352
+ .unwrap()
1353
+ .data
1354
+ .clone()
1355
+ .unwrap_or(VarVec::F32(vec![]))
1356
+ {
1357
+ VarVec::F32(positions_vec) => positions_vec,
1358
+ _ => vec![],
1359
+ };
1360
+ let bomb_prop_id = output
1361
+ .prop_controller
1362
+ .prop_infos
1363
+ .iter()
1364
+ .find(|prop| prop.prop_name == "CCSGameRulesProxy.CCSGameRules.m_bBombPlanted")
1365
+ .map(|prop| prop.id)
1366
+ .unwrap();
1367
+ let bomb = match output
1368
+ .df
1369
+ .get(&bomb_prop_id)
1370
+ .unwrap()
1371
+ .data
1372
+ .clone()
1373
+ .unwrap_or(VarVec::Bool(vec![]))
1374
+ {
1375
+ VarVec::Bool(bomb_vec) => bomb_vec,
1376
+ _ => vec![],
1377
+ };
1378
+ let manually_filtered_positions: Vec<Option<f32>> = positions
1379
+ .iter()
1380
+ .zip(bomb.iter())
1381
+ .filter_map(|(xPos, bombPlanted)| match bombPlanted {
1382
+ Some(true) => Some(*xPos),
1383
+ _ => None,
1384
+ })
1385
+ .collect();
1386
+ let automatically_filtered_positions = match output_with_filter
1387
+ .df
1388
+ .get(&PLAYER_X_ID)
1389
+ .unwrap()
1390
+ .data
1391
+ .clone()
1392
+ .unwrap_or(VarVec::F32(vec![]))
1393
+ {
1394
+ VarVec::F32(positions_vec) => positions_vec,
1395
+ _ => vec![],
1396
+ };
1397
+
1398
+ assert_eq!(manually_filtered_positions, automatically_filtered_positions);
1399
+ }
1400
+
1296
1401
#[test]
1297
1402
fn test_player_filter() {
1298
1403
let huf = create_huffman_lookup_table();
0 commit comments