Skip to main content

wowlab_engine_combat/builder/spell_builder/
finalize.rs

1use super::{BuilderSpellDef, CooldownDef, DamageEffectRef, SpellDefinitionDraft};
2
3impl SpellDefinitionDraft {
4    pub(crate) fn finalize(self, name: String, id: u32) -> BuilderSpellDef {
5        let cooldown = self.cooldown_secs.map(|dur| CooldownDef {
6            duration_secs: dur,
7            category: self.cooldown_category,
8            category_duration_secs: self.category_cooldown_secs,
9            charge_category: self.charge_category,
10            max_charges: self.max_charges,
11            recharge_secs: self.recharge_secs.unwrap_or(dur),
12        });
13
14        let damage_effect = self
15            .damage_effect
16            .unwrap_or_else(|| DamageEffectRef::new(id, 1));
17        let channel_tick_spell_id = self.channel_tick_spell_id.unwrap_or(damage_effect.spell_id);
18
19        let travel = crate::travel::SpellTravelData {
20            explicit_fixed_ms: self.fixed_travel_time_override_ms,
21            projectile_speed: self.projectile_speed,
22            launch_delay_s: self.launch_delay_s,
23            dbc_fixed_travel_time: self.dbc_fixed_travel_time,
24        };
25
26        BuilderSpellDef::from_draft(
27            self,
28            id,
29            name,
30            travel,
31            cooldown,
32            damage_effect,
33            channel_tick_spell_id,
34        )
35    }
36}