wowlab_engine_domain/dbc/semantics/
control.rs1use super::AuraSubtypeKind;
2
3#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
5#[non_exhaustive]
6pub enum CrowdControlKind {
7 Stun,
8 Root,
9 Fear,
10 Silence,
11 Incapacitate,
12}
13
14#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
16#[repr(u8)]
17#[non_exhaustive]
18pub enum DiminishingGroup {
19 None = 0,
20 Root = 1,
21 Stun = 2,
22 Incapacitate = 3,
23 Disorient = 4,
24 Silence = 5,
25 AoeKnockback = 6,
26 Taunt = 7,
27 LimitOnly = 8,
28}
29
30#[derive(Clone, Copy, Debug, Eq, PartialEq)]
32pub struct CrowdControlSemantic {
33 pub kind: CrowdControlKind,
34 pub diminishing: DiminishingGroup,
35}
36
37#[must_use]
38pub const fn crowd_control_semantic(subtype: AuraSubtypeKind) -> Option<CrowdControlSemantic> {
39 let (kind, diminishing) = match subtype {
40 AuraSubtypeKind::Stun => (CrowdControlKind::Stun, DiminishingGroup::Stun),
41 AuraSubtypeKind::Root | AuraSubtypeKind::RootRespectsThreatTable => {
42 (CrowdControlKind::Root, DiminishingGroup::Root)
43 }
44 AuraSubtypeKind::Fear => (CrowdControlKind::Fear, DiminishingGroup::Disorient),
45 AuraSubtypeKind::Silence | AuraSubtypeKind::PacifySilence => {
46 (CrowdControlKind::Silence, DiminishingGroup::Silence)
47 }
48 AuraSubtypeKind::ModConfuse => (
49 CrowdControlKind::Incapacitate,
50 DiminishingGroup::Incapacitate,
51 ),
52 _ => return None,
53 };
54
55 Some(CrowdControlSemantic { kind, diminishing })
56}