Fix (clippy) warnings
This commit is contained in:
@@ -89,7 +89,7 @@ pub fn find_decoder(field: &super::sendtables::ConstructorField, qf_map: &mut Qf
|
||||
}
|
||||
|
||||
match BASETYPE_DECODERS.get(field.field_type.base_type.as_str()) {
|
||||
Some(d) => d.clone(),
|
||||
Some(d) => *d,
|
||||
None => match field.field_type.base_type.as_str() {
|
||||
"float32" => float_decoder(field, qf_map),
|
||||
"Vector" => find_vector_type(3, field, qf_map),
|
||||
@@ -138,7 +138,7 @@ fn float_decoder(field: &super::sendtables::ConstructorField, qf_map: &mut QfMap
|
||||
"m_flSimulationTime" => Decoder::FloatSimulationTimeDecoder,
|
||||
_ => {
|
||||
if field.bitcount <= 0 || field.bitcount >= 32 {
|
||||
return Decoder::NoscaleDecoder;
|
||||
Decoder::NoscaleDecoder
|
||||
} else {
|
||||
let qf = QuantalizedFloat::new(
|
||||
field.bitcount as u32,
|
||||
@@ -213,7 +213,7 @@ impl Decoder {
|
||||
|
||||
impl<'b> crate::bitreader::Bitreader<'b> {
|
||||
pub fn read_bit_coord_pres(&mut self) -> Result<f32, super::FirstPassError> {
|
||||
return Ok(self.read_nbits(20)? as f32 * 360.0 / (1 << 20) as f32 - 180.0);
|
||||
Ok(self.read_nbits(20)? as f32 * 360.0 / (1 << 20) as f32 - 180.0)
|
||||
}
|
||||
|
||||
pub fn decode_qfloat(
|
||||
@@ -232,7 +232,7 @@ impl<'b> crate::bitreader::Bitreader<'b> {
|
||||
if ammo > 0 {
|
||||
return Ok(ammo - 1);
|
||||
}
|
||||
return Ok(ammo);
|
||||
Ok(ammo)
|
||||
}
|
||||
|
||||
pub fn decode_uint64(&mut self) -> Result<u64, super::FirstPassError> {
|
||||
@@ -306,7 +306,7 @@ impl<'b> crate::bitreader::Bitreader<'b> {
|
||||
Ok(v)
|
||||
}
|
||||
pub fn read_angle(&mut self, n: usize) -> Result<f32, super::FirstPassError> {
|
||||
return Ok(self.decode_noscale()? / ((1 << n) as f32));
|
||||
Ok(self.decode_noscale()? / ((1 << n) as f32))
|
||||
}
|
||||
|
||||
pub fn decode_normal(&mut self) -> Result<f32, super::FirstPassError> {
|
||||
@@ -331,7 +331,7 @@ impl<'b> crate::bitreader::Bitreader<'b> {
|
||||
let neg_z = self.read_boolean()?;
|
||||
let prod_sum = v[0] * v[0] + v[1] * v[1];
|
||||
if prod_sum < 1.0 {
|
||||
v[2] = (1.0 - prod_sum).sqrt() as f32;
|
||||
v[2] = (1.0 - prod_sum).sqrt();
|
||||
} else {
|
||||
v[2] = 0.0;
|
||||
}
|
||||
|
||||
@@ -182,25 +182,19 @@ impl QuantalizedFloat {
|
||||
steps = 1 << qf.bit_count;
|
||||
}
|
||||
qf.offset = range_2 as f32 / steps as f32;
|
||||
qf.high = qf.low + ((range_2 as f32 - qf.offset) as f32);
|
||||
qf.high = qf.low + (range_2 as f32 - qf.offset);
|
||||
}
|
||||
|
||||
qf.assign_multipliers(steps);
|
||||
|
||||
if (qf.flags & QFF_ROUNDDOWN) != 0 {
|
||||
if qf.quantize(qf.low) == qf.low {
|
||||
qf.flags &= !QFF_ROUNDDOWN;
|
||||
}
|
||||
if (qf.flags & QFF_ROUNDDOWN) != 0 && qf.quantize(qf.low) == qf.low {
|
||||
qf.flags &= !QFF_ROUNDDOWN;
|
||||
}
|
||||
if (qf.flags & QFF_ROUNDUP) != 0 {
|
||||
if qf.quantize(qf.high) == qf.high {
|
||||
qf.flags &= !QFF_ROUNDUP
|
||||
}
|
||||
if (qf.flags & QFF_ROUNDUP) != 0 && qf.quantize(qf.high) == qf.high {
|
||||
qf.flags &= !QFF_ROUNDUP
|
||||
}
|
||||
if (qf.flags & QFF_ENCODE_ZERO) != 0 {
|
||||
if qf.quantize(0.0) == 0.0 {
|
||||
qf.flags &= !QFF_ENCODE_ZERO;
|
||||
}
|
||||
if (qf.flags & QFF_ENCODE_ZERO) != 0 && qf.quantize(0.0) == 0.0 {
|
||||
qf.flags &= !QFF_ENCODE_ZERO;
|
||||
}
|
||||
|
||||
qf
|
||||
|
||||
@@ -7,6 +7,12 @@ pub struct FieldPath {
|
||||
pub last: usize,
|
||||
}
|
||||
|
||||
impl Default for Paths {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl Paths {
|
||||
pub fn new() -> Self {
|
||||
Self(Vec::new())
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
pub const PLAYER_ENTITY_HANDLE_MISSING: i32 = 2047;
|
||||
pub const SPECTATOR_TEAM_NUM: u32 = 1;
|
||||
pub const BUTTONS_BASEID: u32 = 100000;
|
||||
@@ -136,11 +138,8 @@ impl PropController {
|
||||
path.clone(),
|
||||
);
|
||||
}
|
||||
Field::Array(ser) => match &mut ser.field_enum.as_mut() {
|
||||
Field::Value(v) => {
|
||||
self.handle_prop(&(ser_name.clone() + "." + &v.name), v, path);
|
||||
}
|
||||
_ => {}
|
||||
Field::Array(ser) => if let Field::Value(v) = &mut ser.field_enum.as_mut() {
|
||||
self.handle_prop(&(ser_name.clone() + "." + &v.name), v, path);
|
||||
},
|
||||
Field::Vector(_x) => {
|
||||
let vec_path = path.clone();
|
||||
@@ -150,17 +149,14 @@ impl PropController {
|
||||
for (inner_idx, f) in
|
||||
&mut s.serializer.fields.iter_mut().enumerate()
|
||||
{
|
||||
match f {
|
||||
Field::Value(v) => {
|
||||
let mut myp = vec_path.clone();
|
||||
myp.push(inner_idx as i32);
|
||||
self.handle_prop(
|
||||
&(ser_name.clone() + "." + &v.name),
|
||||
v,
|
||||
myp,
|
||||
);
|
||||
}
|
||||
_ => {}
|
||||
if let Field::Value(v) = f {
|
||||
let mut myp = vec_path.clone();
|
||||
myp.push(inner_idx as i32);
|
||||
self.handle_prop(
|
||||
&(ser_name.clone() + "." + &v.name),
|
||||
v,
|
||||
myp,
|
||||
);
|
||||
}
|
||||
}
|
||||
self.traverse_fields(
|
||||
@@ -219,53 +215,50 @@ impl PropController {
|
||||
self.path_to_name.insert(a, prop_name.to_string());
|
||||
|
||||
let prop_already_exists = self.name_to_id.contains_key(&(prop_name).to_string());
|
||||
self.set_id(&prop_name, f, is_grenade_or_weapon);
|
||||
self.set_id(&prop_name, f);
|
||||
if !prop_already_exists {
|
||||
self.insert_propinfo(&prop_name, f);
|
||||
}
|
||||
f.should_parse = true;
|
||||
if full_name == "CCSPlayerPawn.CCSPlayer_WeaponServices.m_hMyWeapons" {
|
||||
f.prop_id = MY_WEAPONS_OFFSET as u32;
|
||||
f.prop_id = MY_WEAPONS_OFFSET;
|
||||
}
|
||||
if full_name
|
||||
== "CCSPlayerPawn.CCSPlayer_ActionTrackingServices.WeaponPurchaseCount_t.m_nCount"
|
||||
{
|
||||
f.prop_id = ITEM_PURCHASE_COUNT as u32;
|
||||
f.prop_id = ITEM_PURCHASE_COUNT;
|
||||
}
|
||||
if full_name == "CCSPlayerPawn.CCSPlayer_BuyServices.SellbackPurchaseEntry_t.m_unDefIdx" {
|
||||
f.prop_id = ITEM_PURCHASE_DEF_IDX as u32;
|
||||
f.prop_id = ITEM_PURCHASE_DEF_IDX;
|
||||
}
|
||||
if full_name == "CCSPlayerPawn.CCSPlayer_BuyServices.SellbackPurchaseEntry_t.m_nCost" {
|
||||
f.prop_id = ITEM_PURCHASE_COST as u32;
|
||||
f.prop_id = ITEM_PURCHASE_COST;
|
||||
}
|
||||
if full_name == "CCSPlayerPawn.CCSPlayer_ActionTrackingServices.WeaponPurchaseCount_t.m_nItemDefIndex" {
|
||||
f.prop_id = ITEM_PURCHASE_NEW_DEF_IDX as u32;
|
||||
f.prop_id = ITEM_PURCHASE_NEW_DEF_IDX;
|
||||
}
|
||||
if full_name == "CCSPlayerPawn.CCSPlayer_BuyServices.SellbackPurchaseEntry_t.m_hItem" {
|
||||
f.prop_id = ITEM_PURCHASE_HANDLE as u32;
|
||||
f.prop_id = ITEM_PURCHASE_HANDLE;
|
||||
}
|
||||
if prop_name.contains("CEconItemAttribute.m_iRawValue32") {
|
||||
f.prop_id = WEAPON_SKIN_ID as u32;
|
||||
f.prop_id = WEAPON_SKIN_ID;
|
||||
}
|
||||
self.id += 1;
|
||||
}
|
||||
|
||||
fn set_id(&mut self, weap_prop: &str, f: &mut ValueField, is_grenade_or_weapon: bool) {
|
||||
fn set_id(&mut self, weap_prop: &str, f: &mut ValueField) {
|
||||
match self.name_to_id.get(weap_prop) {
|
||||
// If we already have an id for prop of same name then use that id.
|
||||
// Mainly for weapon props. For example CAK47.m_iClip1 and CWeaponSCAR20.m_iClip1
|
||||
// are the "same" prop. (they have same path and we want to refer to it with one id not ~20)
|
||||
Some(id) => {
|
||||
f.prop_id = *id as u32;
|
||||
f.prop_id = *id;
|
||||
self.id_to_name.insert(*id, weap_prop.to_string());
|
||||
self.set_special_ids(&weap_prop, is_grenade_or_weapon, *id);
|
||||
return;
|
||||
}
|
||||
None => {
|
||||
self.name_to_id.insert(weap_prop.to_string(), self.id);
|
||||
self.id_to_name.insert(self.id, weap_prop.to_string());
|
||||
f.prop_id = self.id as u32;
|
||||
self.set_special_ids(&weap_prop, is_grenade_or_weapon, self.id);
|
||||
f.prop_id = self.id;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -274,24 +267,11 @@ impl PropController {
|
||||
self.prop_infos.insert(
|
||||
f.prop_id,
|
||||
PropInfo {
|
||||
id: f.prop_id as u32,
|
||||
id: f.prop_id,
|
||||
prop_name: prop_name.into(),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
pub fn set_special_ids(&mut self, weap_prop: &str, is_grenade_or_weapon: bool, id: u32) {
|
||||
// TODO
|
||||
if is_grenade_or_weapon {
|
||||
match weap_prop {
|
||||
_ => {}
|
||||
};
|
||||
} else {
|
||||
match weap_prop {
|
||||
_ => {}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl SpecialIDs {
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
use super::decoder;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum ParseSendTables {}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct Serializer {
|
||||
pub name: String,
|
||||
@@ -138,7 +135,7 @@ fn generate_field_data(
|
||||
) -> Result<ConstructorField, super::FirstPassError> {
|
||||
let name = msg.symbols.get(field.var_type_sym() as usize).unwrap();
|
||||
|
||||
let ft = find_field_type(&name, field_type_map)?;
|
||||
let ft = find_field_type(name, field_type_map)?;
|
||||
let mut field = field_from_msg(field, msg, ft.clone())?;
|
||||
|
||||
field.category = find_category(&field);
|
||||
@@ -166,7 +163,7 @@ fn generate_field_data(
|
||||
|
||||
fn generate_serializer(
|
||||
serializer: &crate::csgo_proto::ProtoFlattenedSerializerT,
|
||||
field_data: &mut Vec<Option<ConstructorField>>,
|
||||
field_data: &mut [Option<ConstructorField>],
|
||||
msg: &crate::csgo_proto::CsvcMsgFlattenedSerializer,
|
||||
serializers: &mut std::collections::HashMap<String, Serializer>,
|
||||
) -> Result<Serializer, super::FirstPassError> {
|
||||
@@ -188,7 +185,7 @@ fn generate_serializer(
|
||||
};
|
||||
|
||||
if f.field_enum_type.is_none() {
|
||||
f.field_enum_type = Some(create_field(&symbol, f, serializers)?);
|
||||
f.field_enum_type = Some(create_field(f, serializers)?);
|
||||
}
|
||||
if let Some(Some(f)) = &field_data.get(fi) {
|
||||
if let Some(field) = &f.field_enum_type {
|
||||
@@ -221,6 +218,7 @@ pub enum FieldCategory {
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[allow(dead_code)]
|
||||
pub struct ConstructorField {
|
||||
pub var_name: String,
|
||||
pub var_type: String,
|
||||
@@ -245,7 +243,7 @@ static RE: std::sync::LazyLock<regex::Regex> = std::sync::LazyLock::new(|| {
|
||||
regex::Regex::new(r"([^<\[\*]+)(<\s(.*)\s>)?(\*)?(\[(.*)\])?").unwrap()
|
||||
});
|
||||
|
||||
const POINTER_TYPES: &'static [&'static str] = &[
|
||||
const POINTER_TYPES: &[&str] = &[
|
||||
"CBodyComponent",
|
||||
"CLightComponent",
|
||||
"CPhysicsComponent",
|
||||
@@ -417,7 +415,7 @@ impl FieldType {
|
||||
|
||||
if let Some(gt) = self.generic_type.as_ref() {
|
||||
s += "< ";
|
||||
s += &FieldType::to_string(>, true);
|
||||
s += &FieldType::to_string(gt, true);
|
||||
s += "< ";
|
||||
}
|
||||
if self.pointer {
|
||||
@@ -450,7 +448,6 @@ fn for_string(
|
||||
}
|
||||
|
||||
fn create_field(
|
||||
symbol: &String,
|
||||
fd: &mut ConstructorField,
|
||||
serializers: &mut std::collections::HashMap<String, Serializer>,
|
||||
) -> Result<Field, super::FirstPassError> {
|
||||
@@ -578,7 +575,8 @@ impl Field {
|
||||
fi.prop_id = ITEM_PURCHASE_NEW_DEF_IDX + path.path[2] as u32;
|
||||
}
|
||||
}
|
||||
return Some(fi);
|
||||
|
||||
Some(fi)
|
||||
}
|
||||
|
||||
pub fn get_decoder(&self) -> Result<decoder::Decoder, super::FirstPassError> {
|
||||
|
||||
Reference in New Issue
Block a user