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

baseline improvements

This commit is contained in:
Robin Appelman 2022-04-17 14:22:34 +02:00
commit fa449c3017
2 changed files with 11 additions and 20 deletions

View file

@ -35,7 +35,7 @@ pub struct ParserState {
pub entity_classes: HashMap<EntityId, ClassId, NullHasherBuilder>, pub entity_classes: HashMap<EntityId, ClassId, NullHasherBuilder>,
pub send_tables: Vec<SendTable>, // indexed by ClassId pub send_tables: Vec<SendTable>, // indexed by ClassId
pub server_classes: Vec<ServerClass>, pub server_classes: Vec<ServerClass>,
pub instance_baselines: [HashMap<EntityId, (Vec<SendProp>, ClassId), NullHasherBuilder>; 2], pub instance_baselines: [HashMap<EntityId, PacketEntity, NullHasherBuilder>; 2],
pub demo_meta: DemoMeta, pub demo_meta: DemoMeta,
analyser_handles: fn(message_type: MessageType) -> bool, analyser_handles: fn(message_type: MessageType) -> bool,
handle_entities: bool, handle_entities: bool,
@ -119,8 +119,8 @@ impl<'a> ParserState {
is_delta: bool, is_delta: bool,
) -> Result<Vec<SendProp>> { ) -> Result<Vec<SendProp>> {
match self.instance_baselines[baseline_index].get(&entity_index) { match self.instance_baselines[baseline_index].get(&entity_index) {
Some((baseline, baseline_class)) if baseline_class == &class_id && is_delta => { Some(baseline) if baseline.server_class == class_id && is_delta => {
Ok(baseline.clone()) Ok(baseline.props.clone())
} }
_ => match self.static_baselines.get(&class_id) { _ => match self.static_baselines.get(&class_id) {
Some(_static_baseline) => self.get_static_baseline(class_id, send_table), Some(_static_baseline) => self.get_static_baseline(class_id, send_table),
@ -228,27 +228,18 @@ impl<'a> ParserState {
let updated_baseline = match self.instance_baselines[old_index] let updated_baseline = match self.instance_baselines[old_index]
.get(&entity.entity_index) .get(&entity.entity_index)
{ {
Some((baseline_props, baseline_class)) Some(baseline_entity)
if *baseline_class == entity.server_class if baseline_entity.server_class == entity.server_class
&& ent_message.delta.is_some() => && ent_message.delta.is_some() =>
{ {
let mut entity = PacketEntity { let mut updated_baseline = baseline_entity.clone();
server_class: entity.server_class, updated_baseline.apply_update(&entity.props);
entity_index: entity.entity_index, updated_baseline
baseline_props: vec![],
props: vec![],
in_pvs: false,
update_type: UpdateType::Preserve,
serial_number: 0,
delay: None,
};
entity.apply_update(baseline_props);
(entity.props, entity.server_class)
} }
_ => (entity.props, entity.server_class), _ => entity,
}; };
self.instance_baselines[new_index] self.instance_baselines[new_index]
.insert(entity.entity_index, updated_baseline); .insert(updated_baseline.entity_index, updated_baseline);
} }
} }
} }

View file

@ -57,7 +57,7 @@
"team": "red", "team": "red",
"view_angle": 355.0733, "view_angle": 355.0733,
"pitch_angle": 12.352943, "pitch_angle": 12.352943,
"state": "Death", "state": "Alive",
"info": { "info": {
"classes": {}, "classes": {},
"name": "Boog", "name": "Boog",