wowlab_engine_domain/dbc/semantics/
control.rs1use super::AuraSubtypeKind;
4
5#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
7#[non_exhaustive]
8pub enum CrowdControlKind {
9 Stun,
10 Root,
11 Fear,
12 Silence,
13 Incapacitate,
14}
15
16impl CrowdControlKind {
17 pub const COUNT: usize = 5;
18
19 #[must_use]
20 pub const fn ordinal(self) -> usize {
21 match self {
23 Self::Stun => 0,
24 Self::Root => 1,
25 Self::Fear => 2,
26 Self::Silence => 3,
27 Self::Incapacitate => 4,
28 }
29 }
30}
31
32#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
34#[repr(u8)]
35#[non_exhaustive]
36pub enum DiminishingGroup {
37 None = 0,
38 Root = 1,
39 Stun = 2,
40 Incapacitate = 3,
41 Disorient = 4,
42 Silence = 5,
43 AoeKnockback = 6,
44 Taunt = 7,
45 LimitOnly = 8,
46}
47
48impl DiminishingGroup {
49 pub const COUNT: usize = 9;
50
51 #[must_use]
52 pub const fn ordinal(self) -> usize {
53 self as usize
54 }
55}
56
57#[derive(Clone, Copy, Debug, Eq, PartialEq)]
59pub struct CrowdControlSemantic {
60 pub kind: CrowdControlKind,
61 pub diminishing: DiminishingGroup,
62}
63
64#[must_use]
65pub const fn crowd_control_semantic(subtype: AuraSubtypeKind) -> Option<CrowdControlSemantic> {
66 let (kind, diminishing) = match subtype {
67 AuraSubtypeKind::Stun => (CrowdControlKind::Stun, DiminishingGroup::Stun),
68 AuraSubtypeKind::Root | AuraSubtypeKind::RootRespectsThreatTable => {
69 (CrowdControlKind::Root, DiminishingGroup::Root)
70 }
71 AuraSubtypeKind::Fear => (CrowdControlKind::Fear, DiminishingGroup::Disorient),
72 AuraSubtypeKind::Silence | AuraSubtypeKind::PacifySilence => {
73 (CrowdControlKind::Silence, DiminishingGroup::Silence)
74 }
75 AuraSubtypeKind::ModConfuse => (
76 CrowdControlKind::Incapacitate,
77 DiminishingGroup::Incapacitate,
78 ),
79 _ => return None,
80 };
81
82 Some(CrowdControlSemantic { kind, diminishing })
83}