Skip to main content

wowlab_engine_combat/state/defs/
pending.rs

1use 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}