diff --git a/src/player/mod.rs b/src/player/mod.rs index c94d192..8e9cd8d 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -13,7 +13,7 @@ use proxisim_models::bundle::{ }, weapon::{ Ammo, AmmoType, DamageStat, NeedsReload, NonTargeted, RateOfFire, Usable, Uses, Weapon, - WeaponSlot, + WeaponCategory, WeaponSlot, }, }; use rand::Rng as _; @@ -197,8 +197,7 @@ fn check_bonus_mitigation( w_children: &Children, armour_mitigation: &mut f32, piece: &mut Option<&BodyPartCoverage>, - slot: WeaponSlot, - rounds: &Option, + cat: &WeaponCategory, health: &Health, max_health: &SimpleStatEffective, ) -> f32 { @@ -221,10 +220,26 @@ fn check_bonus_mitigation( && let Some(mut mitigation) = params.mitigation_q.get_mut(piece.armour).unwrap() { match mitigation.as_mut() { - DamageMitigationBonus::Impregnable { mitigation } if slot == WeaponSlot::Melee => { + DamageMitigationBonus::Impregnable { mitigation } + if matches!( + *cat, + WeaponCategory::Clubbing | WeaponCategory::Piercing | WeaponCategory::Slashing + ) => + { + *mitigation + } + DamageMitigationBonus::Impenetrable { mitigation } + if matches!( + *cat, + WeaponCategory::MachineGun + | WeaponCategory::Pistol + | WeaponCategory::Rifle + | WeaponCategory::Shotgun + | WeaponCategory::Smg + ) => + { *mitigation } - DamageMitigationBonus::Impenetrable { mitigation } if rounds.is_some() => *mitigation, DamageMitigationBonus::Insurmountable { mitigation } => { if health.0 as f32 / max_health.value as f32 <= 0.25 { *mitigation @@ -425,7 +440,7 @@ struct EntityParams<'w, 's> { &'static SimpleStatEffective, &'static SimpleStatEffective, &'static Children, - &'static WeaponSlot, + &'static WeaponCategory, Has, ), (With, With, Without), @@ -495,7 +510,7 @@ fn use_damaging_weapon( ), dmg_spread: Local, ) { - let Ok((weapon, w_dmg, acc, dmg_bonus, crit, children, slot, non_targeted)) = + let Ok((weapon, w_dmg, acc, dmg_bonus, crit, children, w_cat, non_targeted)) = entities.weapon_q.single() else { return; @@ -689,8 +704,7 @@ fn use_damaging_weapon( children, &mut armour_mitigation, &mut piece, - *slot, - &rounds, + w_cat, &health, target_max_health, );