Skip to main content

wowlab_engine_domain/dbc/semantics/
proc_types.rs

1//! Client `SpellProcEvent.ProcFlags` event-family mask semantics.
2
3bitflags::bitflags! {
4    #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5    pub struct ProcTypeMask: u64 {
6        const HEARTBEAT = 1 << 0;
7        const KILL = 1 << 1;
8        const WHITE_MELEE = 1 << 2;
9        const TAKE_MELEE_SWING = 1 << 3;
10        const MELEE_ABILITY = 1 << 4;
11        const TAKE_MELEE_ABILITY = 1 << 5;
12        const WHITE_RANGED = 1 << 6;
13        const TAKE_RANGED_ATTACK = 1 << 7;
14        const RANGED_ABILITY = 1 << 8;
15        const TAKE_RANGED_ABILITY = 1 << 9;
16        const GENERIC_HELPFUL = 1 << 10;
17        const TAKE_HELPFUL_ABILITY = 1 << 11;
18        const GENERIC_HARMFUL = 1 << 12;
19        const TAKE_HARMFUL_ABILITY = 1 << 13;
20        const MAGIC_HELPFUL = 1 << 14;
21        const TAKE_HELPFUL_SPELL = 1 << 15;
22        const MAGIC_SPELL = 1 << 16;
23        const TAKE_HARMFUL_SPELL = 1 << 17;
24        const PERIODIC = 1 << 18;
25        const TAKE_HARMFUL_PERIODIC = 1 << 19;
26        const TAKE_ANY_DAMAGE = 1 << 20;
27        const HELPFUL_PERIODIC = 1 << 21;
28        const MAIN_HAND = 1 << 22;
29        const OFF_HAND = 1 << 23;
30        const DEATH = 1 << 24;
31        const JUMP = 1 << 25;
32        const PROC_CLONE_SPELL = 1 << 26;
33        const ENTER_COMBAT = 1 << 27;
34        const ENCOUNTER_START = 1 << 28;
35        const CAST_ENDED = 1 << 29;
36        const LOOTED = 1 << 30;
37        const TAKE_HELPFUL_PERIODIC = 1 << 31;
38
39        const TARGET_EVENTS = Self::TAKE_MELEE_SWING.bits()
40            | Self::TAKE_MELEE_ABILITY.bits()
41            | Self::TAKE_RANGED_ATTACK.bits()
42            | Self::TAKE_RANGED_ABILITY.bits()
43            | Self::TAKE_HELPFUL_ABILITY.bits()
44            | Self::TAKE_HARMFUL_ABILITY.bits()
45            | Self::TAKE_HELPFUL_SPELL.bits()
46            | Self::TAKE_HARMFUL_SPELL.bits()
47            | Self::TAKE_HARMFUL_PERIODIC.bits()
48            | Self::TAKE_ANY_DAMAGE.bits()
49            | Self::TAKE_HELPFUL_PERIODIC.bits();
50        const CASTER_EVENTS = Self::HEARTBEAT.bits()
51            | Self::KILL.bits()
52            | Self::WHITE_MELEE.bits()
53            | Self::MELEE_ABILITY.bits()
54            | Self::WHITE_RANGED.bits()
55            | Self::RANGED_ABILITY.bits()
56            | Self::GENERIC_HELPFUL.bits()
57            | Self::GENERIC_HARMFUL.bits()
58            | Self::MAGIC_HELPFUL.bits()
59            | Self::MAGIC_SPELL.bits()
60            | Self::PERIODIC.bits()
61            | Self::HELPFUL_PERIODIC.bits()
62            | Self::MAIN_HAND.bits()
63            | Self::OFF_HAND.bits()
64            | Self::DEATH.bits()
65            | Self::JUMP.bits()
66            | Self::PROC_CLONE_SPELL.bits()
67            | Self::ENTER_COMBAT.bits()
68            | Self::ENCOUNTER_START.bits()
69            | Self::CAST_ENDED.bits()
70            | Self::LOOTED.bits();
71        const AUTO_ATTACK = Self::WHITE_MELEE.bits()
72            | Self::WHITE_RANGED.bits()
73            | Self::MAIN_HAND.bits()
74            | Self::OFF_HAND.bits();
75        const SUPPORTED_EVENT = Self::WHITE_MELEE.bits()
76            | Self::MELEE_ABILITY.bits()
77            | Self::WHITE_RANGED.bits()
78            | Self::RANGED_ABILITY.bits()
79            | Self::GENERIC_HELPFUL.bits()
80            | Self::GENERIC_HARMFUL.bits()
81            | Self::MAGIC_SPELL.bits()
82            | Self::PERIODIC.bits()
83            | Self::MAIN_HAND.bits()
84            | Self::OFF_HAND.bits();
85    }
86}
87
88impl ProcTypeMask {
89    #[must_use]
90    pub const fn from_dbc(raw: u64) -> Self {
91        Self::from_bits_retain(raw)
92    }
93
94    #[must_use]
95    pub const fn has_target_events(self) -> bool {
96        self.intersects(Self::TARGET_EVENTS)
97    }
98
99    #[must_use]
100    pub const fn has_caster_events(self) -> bool {
101        self.intersects(Self::CASTER_EVENTS)
102    }
103}