wowlab_engine_content/hooks/vengeance_demon_hunter/
handler.rs1use wowlab_engine_combat::{BuffEffect, CombatSystemDraft, CombatHandler, PassiveDriverEffect};
2use wowlab_engine_domain::dbc::ResolvedGameDataEffectExt as _;
3use wowlab_engine_ports::{CombatStats, HandlerParams, SimContext};
4use wowlab_engine_gamedata::{ResolvedGameData};
5
6use crate::generated::specs::vengeance_demon_hunter::EFFECT;
7
8use super::config::register_annihilator;
9
10fn register_fel_blood(built: &mut CombatSystemDraft, stats: &CombatStats, data: &ResolvedGameData) {
11 let ap_pct = data.resolved_effect_points(EFFECT::FEL_BLOOD, stats.mastery);
12
13 if ap_pct <= 0.0 {
14 return;
15 }
16
17 built.register_passive_driver_effect(PassiveDriverEffect::new(
18 EFFECT::FEL_BLOOD.0,
19 BuffEffect::AttackPowerPercent(ap_pct),
20 ));
21}
22
23#[derive(Debug)]
25pub(crate) struct VengeanceHandler {
26 inner: CombatHandler,
27}
28
29impl VengeanceHandler {
30 pub(crate) fn try_new(
32 parts: crate::composition::ContentHandlerParts,
33 params: &HandlerParams<'_>,
34 ) -> Result<Self, wowlab_engine_ports::EngineError> {
35 let mut parts = parts;
36 let built = parts.draft_mut();
37
38 register_fel_blood(built, params.stats, ¶ms.game_data);
39 register_annihilator(built, params)?;
40
41 let built = parts.finalize()?;
42
43 Ok(Self {
44 inner: CombatHandler::from_built(built),
45 })
46 }
47}
48
49crate::hooks::define_spec_handler! {
50impl VengeanceHandler(self, inner) {
51 fn on_sim_start(&mut self, ctx: &mut SimContext) {
52 self.inner.on_sim_start(ctx);
53 }
54}
55}