wowlab_engine_combat/state/defs/
pending.rs1use super::{
2 ActorId, CastHookFn, DamageEffectRef, EnemyIdx, LocalAuraIdx, RuntimeDamageDef, SimTime,
3 SpatialTransform, SpellEffectRange,
4};
5use crate::state::PendingGroundPulse;
6
7#[derive(Clone, Copy, Debug)]
8pub(crate) enum PendingTimerAction {
9 Hook(CastHookFn),
10 PeriodicDriver {
11 index: usize,
12 expires_at: Option<SimTime>,
13 },
14 GroundPulse(PendingGroundPulse),
15 Effect(PendingEffectProgram),
16}
17
18#[derive(Clone, Copy, Debug)]
19pub(crate) struct PendingHookTimer {
20 pub(crate) action: PendingTimerAction,
21 pub(crate) source: ActorId,
22 pub(crate) target: Option<EnemyIdx>,
23 pub(crate) source_damage_flags: crate::systems::DamageFlags,
24 pub(crate) source_npc_id: Option<u32>,
25}
26
27#[derive(Clone, Copy, Debug)]
28pub(crate) struct PendingEffectProgram {
29 pub(crate) effects: SpellEffectRange,
30 pub(crate) profile_spell_id: u32,
31 pub(crate) repeat: u8,
32 pub(crate) source: ActorId,
33 pub(crate) target: Option<EnemyIdx>,
34 pub(crate) effect_target: Option<ActorId>,
35 pub(crate) flags: crate::systems::DamageFlags,
36 pub(crate) originating_proc_driver_spell_id: u32,
37}
38
39#[derive(Clone, Copy, Debug)]
40pub(crate) struct PendingSpellImpact {
41 pub(crate) spell_id: u32,
42 pub(crate) damage_effect: DamageEffectRef,
43 pub(crate) base_points: f64,
44 pub(crate) damage: RuntimeDamageDef,
45 pub(crate) is_pet: bool,
46 pub(crate) may_crit: bool,
47 pub(crate) attribute_flags: crate::DamageFlags,
48 pub(crate) applies_aura: Option<LocalAuraIdx>,
49 pub(crate) applies_aura_duration_ms: Option<u32>,
50 pub(crate) followup_effects: SpellEffectRange,
51 pub(crate) source: ActorId,
52 pub(crate) target: EnemyIdx,
53 pub(crate) cast_complete_at: SimTime,
54 pub(crate) travel: crate::travel::SpellTravelData,
55 pub(crate) locked_source_transform: Option<SpatialTransform>,
56 pub(crate) locked_target_transform: Option<SpatialTransform>,
57 pub(crate) cast_destination: Option<SpatialTransform>,
58}