From 0861ca898c41b2d2a63bdd26db78fa393a320077 Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Tue, 23 May 2023 21:08:26 -0400 Subject: [PATCH 1/4] chore!: clean up firing data FiringResponse no longer has seperate fields for pve/pvp --- src/test.rs | 51 +++++++++++++------------ src/types/js_types.rs | 28 +++++--------- src/types/rs_types.rs | 14 +++---- src/weapons/stat_calc.rs | 82 ++++++++++++++++++---------------------- 4 files changed, 78 insertions(+), 97 deletions(-) diff --git a/src/test.rs b/src/test.rs index 5d91c08a..30abe5c7 100644 --- a/src/test.rs +++ b/src/test.rs @@ -28,11 +28,11 @@ fn setup_pulse() { } } let mut new_weapon = Weapon::generate_weapon( - hash, //bozo as u32 :) - 13, //pulse - 69420, //test pulse - 1, //primary - 3373582085, //kinetic + hash, //bozo as u32 :) + 13, //pulse + 69420, //test pulse + 1, //primary + 3373582085, //kinetic ) .unwrap(); let mut stats = HashMap::new(); @@ -150,25 +150,24 @@ fn test_pulse_firing_data() { ) }); assert!( - cmp_floats(response.pvp_impact_damage, 10.0), + cmp_floats(response.impact_damage, 10.0), "impact damage: {}", - response.pvp_impact_damage + response.impact_damage ); assert!( - cmp_floats(response.pvp_explosion_damage, 0.0), + cmp_floats(response.explosion_damage, 0.0), "explosive damage: {}", - response.pvp_explosion_damage + response.explosion_damage ); assert!(cmp_floats(response.rpm, 900.0), "rpm: {}", response.rpm); assert!( - cmp_floats(response.pvp_crit_mult, 2.0), + cmp_floats(response.crit_mult, 2.0), "crit mult: {}", - response.pvp_crit_mult + response.crit_mult ); }); } - fn setup_bow() { let vec = Vec::::from("harm".to_string()); let mut hash = 0; @@ -179,11 +178,11 @@ fn setup_bow() { } } let mut new_weapon = Weapon::generate_weapon( - hash, //harm turned himslf into a u32! Funniest shit I've ever seen - 31, //bow - 696969, //test bow - 2, //special - 3949783978, //strand + hash, //harm turned himslf into a u32! Funniest shit I've ever seen + 31, //bow + 696969, //test bow + 2, //special + 3949783978, //strand ) .unwrap(); let mut stats = HashMap::new(); @@ -291,20 +290,24 @@ fn test_bow_firing_data() { ) }); assert!( - cmp_floats(response.pvp_impact_damage, 100.0), + cmp_floats(response.impact_damage, 100.0), "impact damage: {}", - response.pvp_impact_damage + response.impact_damage ); assert!( - cmp_floats(response.pvp_explosion_damage, 0.0), + cmp_floats(response.explosion_damage, 0.0), "explosive damage: {}", - response.pvp_explosion_damage + response.explosion_damage + ); + assert!( + cmp_floats(response.burst_delay, 20.0 / 30.0), + "draw time: {}", + response.burst_delay ); - assert!(cmp_floats(response.burst_delay, 20.0/30.0), "draw time: {}", response.burst_delay); assert!( - cmp_floats(response.pvp_crit_mult, 1.5 + (2.0/51.0)), + cmp_floats(response.crit_mult, 1.5 + (2.0 / 51.0)), "crit mult: {}", - response.pvp_crit_mult + response.crit_mult ); }); } diff --git a/src/types/js_types.rs b/src/types/js_types.rs index a4e5f0e1..be5b6664 100644 --- a/src/types/js_types.rs +++ b/src/types/js_types.rs @@ -227,19 +227,12 @@ impl From for JsResillienceSummary { #[derive(Debug, Clone, Default, Serialize)] #[wasm_bindgen(js_name = "FiringResponse", inspectable)] pub struct JsFiringResponse { - #[wasm_bindgen(js_name = "pvpImpactDamage", readonly)] - pub pvp_impact_damage: f64, - #[wasm_bindgen(js_name = "pvpExplosionDamage", readonly)] - pub pvp_explosion_damage: f64, - #[wasm_bindgen(js_name = "pvpCritMult", readonly)] - pub pvp_crit_mult: f64, - - #[wasm_bindgen(js_name = "pveImpactDamage", readonly)] - pub pve_impact_damage: f64, - #[wasm_bindgen(js_name = "pveExplosionDamage", readonly)] - pub pve_explosion_damage: f64, - #[wasm_bindgen(js_name = "pveCritMult", readonly)] - pub pve_crit_mult: f64, + #[wasm_bindgen(js_name = "ImpactDamage", readonly)] + pub impact_damage: f64, + #[wasm_bindgen(js_name = "ExplosionDamage", readonly)] + pub explosion_damage: f64, + #[wasm_bindgen(js_name = "CritMult", readonly)] + pub crit_mult: f64, #[wasm_bindgen(js_name = "burstDelay", readonly)] pub burst_delay: f64, @@ -255,12 +248,9 @@ pub struct JsFiringResponse { impl From for JsFiringResponse { fn from(firing: FiringResponse) -> Self { JsFiringResponse { - pvp_impact_damage: firing.pvp_impact_damage, - pvp_explosion_damage: firing.pvp_explosion_damage, - pvp_crit_mult: firing.pvp_crit_mult, - pve_impact_damage: firing.pve_impact_damage, - pve_explosion_damage: firing.pve_explosion_damage, - pve_crit_mult: firing.pve_crit_mult, + impact_damage: firing.impact_damage, + explosion_damage: firing.explosion_damage, + crit_mult: firing.crit_mult, burst_delay: firing.burst_delay, inner_burst_delay: firing.inner_burst_delay, burst_size: firing.burst_size, diff --git a/src/types/rs_types.rs b/src/types/rs_types.rs index 978225fb..14831581 100644 --- a/src/types/rs_types.rs +++ b/src/types/rs_types.rs @@ -180,13 +180,9 @@ impl DpsResponse { #[derive(Debug, Clone, Default)] pub struct FiringResponse { - pub pvp_impact_damage: f64, - pub pvp_explosion_damage: f64, - pub pvp_crit_mult: f64, - - pub pve_impact_damage: f64, - pub pve_explosion_damage: f64, - pub pve_crit_mult: f64, + pub impact_damage: f64, + pub explosion_damage: f64, + pub crit_mult: f64, pub burst_delay: f64, pub inner_burst_delay: f64, @@ -212,7 +208,7 @@ impl FiringResponse { .as_str(), crate::logging::LogLevel::Debug.into(), ); - self.pve_impact_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult; - self.pve_explosion_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult; + self.impact_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult; + self.explosion_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult; } } diff --git a/src/weapons/stat_calc.rs b/src/weapons/stat_calc.rs index cde5be6e..ea8f62bf 100644 --- a/src/weapons/stat_calc.rs +++ b/src/weapons/stat_calc.rs @@ -304,71 +304,49 @@ impl Weapon { _cached_data: Option<&mut HashMap>, _pvp: bool, ) -> FiringResponse { - let pve_damage_modifiers: DamageModifierResponse; - let pvp_damage_modifiers: DamageModifierResponse; - let firing_modifiers: FiringModifierResponse; let mut default_cached_data = HashMap::new(); let cached_data = _cached_data.unwrap_or(&mut default_cached_data); - if _calc_input.is_some() { - firing_modifiers = get_firing_modifier( - self.list_perks(), - &_calc_input.clone().unwrap(), - _pvp, - cached_data, - ); - pvp_damage_modifiers = get_dmg_modifier( - self.list_perks(), - &_calc_input.clone().unwrap(), - true, - &mut cached_data.clone(), - ); - pve_damage_modifiers = get_dmg_modifier( - self.list_perks(), - &_calc_input.clone().unwrap(), - false, - &mut cached_data.clone(), - ); + let (firing_modifiers, damage_modifiers) = if let Some(calc_input) = _calc_input { + ( + get_firing_modifier(self.list_perks(), &calc_input, _pvp, cached_data), + get_dmg_modifier(self.list_perks(), &calc_input, _pvp, cached_data), + ) } else { - firing_modifiers = FiringModifierResponse::default(); - pvp_damage_modifiers = DamageModifierResponse::default(); - pve_damage_modifiers = DamageModifierResponse::default(); + ( + FiringModifierResponse::default(), + DamageModifierResponse::default(), + ) }; let tmp_dmg_prof = self.get_damage_profile(); let impact_dmg = tmp_dmg_prof.0; let explosion_dmg = tmp_dmg_prof.1; let crit_mult = tmp_dmg_prof.2; + //rpm let fd = self.firing_data; - let extra_charge_delay = if self.weapon_type == WeaponType::FUSIONRIFLE { - 0.45 - } else if self.weapon_type == WeaponType::LINEARFUSIONRIFLE { - 0.95 - } else { - 0.0 + let extra_charge_delay = match self.weapon_type { + WeaponType::LINEARFUSIONRIFLE => 0.95, + WeaponType::FUSIONRIFLE => 0.45, + _ => 0.0, }; + let burst_delay = (fd.burst_delay + firing_modifiers.burst_delay_add) * firing_modifiers.burst_delay_scale; let burst_size = fd.burst_size + firing_modifiers.burst_size_add as i32; let inner_burst_delay = fd.inner_burst_delay * firing_modifiers.inner_burst_scale; let raw_rpm = 60.0 - / ((burst_delay - + (inner_burst_delay * (burst_size as f64 - 1.0)) - + extra_charge_delay) + / ((burst_delay + (inner_burst_delay * (burst_size - 1) as f64) + extra_charge_delay) / burst_size as f64); - let rpm: f64; - if self.firing_data.one_ammo { - rpm = raw_rpm / burst_size as f64 + let rpm = if self.firing_data.one_ammo { + raw_rpm / burst_size as f64 } else { - rpm = raw_rpm + raw_rpm }; - let out = FiringResponse { - pvp_impact_damage: impact_dmg * pvp_damage_modifiers.impact_dmg_scale, - pvp_explosion_damage: explosion_dmg * pvp_damage_modifiers.explosive_dmg_scale, - pvp_crit_mult: crit_mult * pvp_damage_modifiers.crit_scale, - pve_impact_damage: impact_dmg * pve_damage_modifiers.impact_dmg_scale, - pve_explosion_damage: explosion_dmg * pve_damage_modifiers.explosive_dmg_scale, - pve_crit_mult: crit_mult * pve_damage_modifiers.crit_scale, + let mut out = FiringResponse { + impact_damage: impact_dmg * damage_modifiers.impact_dmg_scale, + explosion_damage: explosion_dmg * damage_modifiers.explosive_dmg_scale, + crit_mult: crit_mult * damage_modifiers.crit_scale, burst_delay, burst_size, @@ -378,6 +356,20 @@ impl Weapon { timestamp: fd.timestamp, }; + + if !_pvp { + let persistent = crate::PERS_DATA.with(|_perm_data| _perm_data.borrow().clone()); + out.apply_pve_bonuses( + persistent.activity.get_rpl_mult(), + persistent.activity.get_pl_delta(), + persistent.weapon.damage_mods.pve, + persistent + .weapon + .damage_mods + .get_mod(&persistent.enemy.type_), + ); + } + out } } From 182aa68cdb50af98ca1b437cd8095d2f6fabbf6e Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Wed, 24 May 2023 20:48:22 -0400 Subject: [PATCH 2/4] chore: remove pve calc from wasm bind --- src/lib.rs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 45a82133..635c8b0c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -287,7 +287,6 @@ pub fn get_weapon_firing_data( _use_rpl: bool, ) -> Result { let persistent = PERS_DATA.with(|_perm_data| _perm_data.borrow().clone()); - let mut response: types::rs_types::FiringResponse; let calc_input: Option = if _dynamic_traits { let mut buffer = persistent.weapon.static_calc_input(); buffer.enemy_type = &persistent.enemy.type_; @@ -295,16 +294,7 @@ pub fn get_weapon_firing_data( } else { None }; - response = persistent.weapon.calc_firing_data(calc_input, None, _pvp); - response.apply_pve_bonuses( - persistent.activity.get_rpl_mult(), - persistent.activity.get_pl_delta(), - persistent.weapon.damage_mods.pve, - persistent - .weapon - .damage_mods - .get_mod(&persistent.enemy.type_), - ); + let response = persistent.weapon.calc_firing_data(calc_input, None, _pvp); crate::logging::log(format!("{:?}", response).as_str(), LogLevel::Debug.into()); Ok(response.into()) } From 5a1bf455915f0947cb80c6028ff12df7eb85b61d Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Thu, 25 May 2023 21:10:17 -0400 Subject: [PATCH 3/4] fix: tests they broke because pve bonuses were calced in wasm bindings --- src/test.rs | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/src/test.rs b/src/test.rs index 30abe5c7..d344bf68 100644 --- a/src/test.rs +++ b/src/test.rs @@ -136,19 +136,7 @@ fn test_pulse_firing_data() { setup_pulse(); PERS_DATA.with(|perm_data| { let weapon = perm_data.borrow_mut().weapon.clone(); - let mut response = weapon.calc_firing_data(None, None, true); - PERS_DATA.with(|perm_data| { - response.apply_pve_bonuses( - perm_data.borrow().activity.get_rpl_mult(), - perm_data.borrow().activity.get_pl_delta(), - perm_data.borrow().weapon.damage_mods.pve, - perm_data - .borrow() - .weapon - .damage_mods - .get_mod(&perm_data.borrow().enemy.type_), - ) - }); + let response = weapon.calc_firing_data(None, None, true); assert!( cmp_floats(response.impact_damage, 10.0), "impact damage: {}", @@ -276,19 +264,7 @@ fn test_bow_firing_data() { setup_bow(); PERS_DATA.with(|perm_data| { let weapon = perm_data.borrow_mut().weapon.clone(); - let mut response = weapon.calc_firing_data(None, None, true); - PERS_DATA.with(|perm_data| { - response.apply_pve_bonuses( - perm_data.borrow().activity.get_rpl_mult(), - perm_data.borrow().activity.get_pl_delta(), - perm_data.borrow().weapon.damage_mods.pve, - perm_data - .borrow() - .weapon - .damage_mods - .get_mod(&perm_data.borrow().enemy.type_), - ) - }); + let response = weapon.calc_firing_data(None, None, true); assert!( cmp_floats(response.impact_damage, 100.0), "impact damage: {}", From f2859cc57fd3fc19d06eab7fabde741aa6645996 Mon Sep 17 00:00:00 2001 From: Harm Brammer Date: Wed, 31 May 2023 13:28:24 -0400 Subject: [PATCH 4/4] fix: tests still had pvp_crit_mult --- src/test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test.rs b/src/test.rs index 66ceb83b..0fdadb55 100644 --- a/src/test.rs +++ b/src/test.rs @@ -286,7 +286,7 @@ fn test_bow_firing_data() { response.burst_delay ); assert!( - cmp_floats(response.pvp_crit_mult, 1.5 + (2.0 / 51.0)), + cmp_floats(response.crit_mult, 1.5 + (2.0 / 51.0)), "crit mult: {}", response.crit_mult );