Tried to optimize game event parser
This commit is contained in:
@@ -14,6 +14,7 @@ fn main() {
|
|||||||
println!("Events: {:?}", output.events.len());
|
println!("Events: {:?}", output.events.len());
|
||||||
println!("Entity-Ticks: {:?}", output.entity_states.ticks.len());
|
println!("Entity-Ticks: {:?}", output.entity_states.ticks.len());
|
||||||
|
|
||||||
|
/*
|
||||||
for tick in output.entity_states.ticks.iter() {
|
for tick in output.entity_states.ticks.iter() {
|
||||||
for state in tick.states.iter() {
|
for state in tick.states.iter() {
|
||||||
if state.class.as_str() != "CCSPlayerPawn" {
|
if state.class.as_str() != "CCSPlayerPawn" {
|
||||||
@@ -25,4 +26,5 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,15 +12,25 @@ macro_rules! define_event {
|
|||||||
impl $name {
|
impl $name {
|
||||||
#[allow(unused_mut)]
|
#[allow(unused_mut)]
|
||||||
fn parse(keys: &[crate::csgo_proto::csvc_msg_game_event_list::KeyT], event: crate::csgo_proto::CMsgSource1LegacyGameEvent) -> Result<GameEvent, ParseGameEventError> {
|
fn parse(keys: &[crate::csgo_proto::csvc_msg_game_event_list::KeyT], event: crate::csgo_proto::CMsgSource1LegacyGameEvent) -> Result<GameEvent, ParseGameEventError> {
|
||||||
let mut fields: ::std::collections::HashMap<_,_> = keys.iter().zip(event.keys.into_iter()).map(|(k, f)| {
|
|
||||||
(k.name().to_owned(), f)
|
|
||||||
}).collect();
|
|
||||||
|
|
||||||
$(let $field: Option<RawValue> = fields.remove(stringify!($field)).map(|f| f.try_into().ok()).flatten();)*
|
$(let mut $field: Option<RawValue> = None;)*
|
||||||
|
let mut remaining = std::collections::HashMap::new();
|
||||||
|
|
||||||
|
for (k, f) in keys.iter().zip(event.keys.into_iter()) {
|
||||||
|
let name = k.name();
|
||||||
|
$(
|
||||||
|
if name == stringify!($field) {
|
||||||
|
$field = Some(f.try_into().ok()).flatten();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
|
||||||
|
remaining.insert(name.to_owned(), f);
|
||||||
|
}
|
||||||
|
|
||||||
let value = $name {
|
let value = $name {
|
||||||
$($field: $field.map(|f| f.try_into().ok()).flatten(),)*
|
$($field: $field.map(|f| f.try_into().ok()).flatten(),)*
|
||||||
remaining: fields,
|
remaining,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok($target(value))
|
Ok($target(value))
|
||||||
|
|||||||
Reference in New Issue
Block a user