(&mut self)
| 17 | |
| 18 | impl Demo { |
| 19 | pub fn parse_datatable(&mut self) { |
| 20 | /* |
| 21 | Parse datatables. These are the tables that entities refer to for values. If this fails then gg? |
| 22 | */ |
| 23 | let _ = self.read_i32(); |
| 24 | loop { |
| 25 | let _ = self.read_varint(); |
| 26 | let size = self.read_varint(); |
| 27 | let data = self.read_n_bytes(size); |
| 28 | |
| 29 | let table = Message::parse_from_bytes(data); |
| 30 | match table { |
| 31 | Ok(t) => { |
| 32 | let table: CSVCMsg_SendTable = t; |
| 33 | if table.is_end() { |
| 34 | break; |
| 35 | } |
| 36 | |
| 37 | self.dt_map.as_mut().unwrap().insert( |
| 38 | table.net_table_name.as_ref().unwrap().to_string(), |
| 39 | table.clone(), |
| 40 | ); |
| 41 | } |
| 42 | Err(e) => { |
| 43 | panic!( |
| 44 | "Failed to parse datatable at tick {}. Error: {}", |
| 45 | self.tick, e |
| 46 | ) |
| 47 | } |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | let class_count = self.read_short(); |
| 52 | self.class_bits = (class_count as f32 + 1.).log2().ceil() as u32; |
| 53 | for _ in 0..class_count { |
| 54 | let id = self.read_short(); |
| 55 | let _ = self.read_string(); |
| 56 | let dt = self.read_string(); |
| 57 | |
| 58 | if self.parse_props { |
| 59 | let props = self.flatten_dt(&self.dt_map.as_ref().unwrap()[&dt], dt.clone()); |
| 60 | let server_class = ServerClass { id, dt, props }; |
| 61 | // Set baselines parsed earlier in stringtables. |
| 62 | // Happens when stringtable, with instancebaseline, comes |
| 63 | // before this event. Seems oddly complicated |
| 64 | match self.baseline_no_cls.get(&(id as u32)) { |
| 65 | Some(user_data) => { |
| 66 | parse_baselines(&user_data, &server_class, &mut self.baselines); |
| 67 | // Remove after being parsed |
| 68 | self.baseline_no_cls.remove(&(id as u32)); |
| 69 | } |
| 70 | None => {} |
| 71 | } |
| 72 | self.serverclass_map.insert(id, server_class); |
| 73 | } |
| 74 | } |
| 75 | } |
| 76 | pub fn get_excl_props(&self, table: &CSVCMsg_SendTable) -> SmallVec<[Sendprop_t; 32]> { |
no test coverage detected