wowlab_engine_application/game_data/passives/
crit.rs1use wowlab_engine_gamedata::ResolvedGameDataBuilder;
2
3pub(crate) fn resolve_crit_chance_scaled_crit_damage(
5 passives: &[wowlab_engine_domain::dbc::RankedPassive],
6) -> Vec<wowlab_engine_domain::dbc::CritChanceScaledCritDamage> {
7 let mut terms = Vec::new();
8
9 for (spell, ranks) in passives {
10 let Some(source_effect) =
11 wowlab_parsers::spell_desc_crit_chance_scaled_effect_index(&spell.description)
12 else {
13 continue;
14 };
15 let resolved =
16 wowlab_engine_domain::dbc::crit_chance_scaled_crit_damage(spell, source_effect, *ranks);
17
18 for term in &resolved {
19 tracing::debug!(
21 spell_id = spell.id,
22 spell_name = spell.name.as_str(),
23 source_effect,
24 percent = term.percent,
25 axis = ?term.axis,
26 "resolved crit damage scaled by the caster's own critical strike chance"
27 );
28 }
29
30 terms.extend(resolved);
31 }
32
33 terms
34}
35
36pub(super) fn apply_crit_chance_scaled_player_axis(
39 builder: &mut ResolvedGameDataBuilder,
40 terms: &[wowlab_engine_domain::dbc::CritChanceScaledCritDamage],
41) {
42 for term in terms {
43 if let wowlab_engine_domain::dbc::CritChanceScaledAxis::Player(schools) = term.axis {
44 builder.push_crit_damage_per_crit_chance(i32::from(schools.bits()), term.percent);
45 }
46 }
47}