Skip to main content

workshop_rs/program/
shared.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum EventTeam {
3    All,
4    Team1,
5    Team2,
6}
7
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub enum EventTarget {
10    All,
11    Slot(u8),
12    Hero(String),
13}
14
15/// A non-ongoing player event identity.
16///
17/// Workshop can add player-scoped event identities independently of this
18/// crate. Consumers should use a wildcard arm when matching this type.
19#[non_exhaustive]
20#[derive(Debug, Clone, Copy, PartialEq, Eq)]
21pub enum PlayerEventKind {
22    DealtDamage,
23    DealtFinalBlow,
24    DealtHealing,
25    DealtKnockback,
26    Died,
27    EarnedElimination,
28    Joined,
29    Left,
30    ReceivedHealing,
31    ReceivedKnockback,
32    TookDamage,
33}
34
35impl PlayerEventKind {
36    /// The inverse of [`catalog_id`](Self::catalog_id).
37    pub(crate) fn from_catalog_id(id: &str) -> Option<Self> {
38        Some(match id {
39            "playerDealtDamage" => Self::DealtDamage,
40            "playerDealtFinalBlow" => Self::DealtFinalBlow,
41            "playerDealtHealing" => Self::DealtHealing,
42            "playerDealtKnockback" => Self::DealtKnockback,
43            "playerDied" => Self::Died,
44            "playerEarnedElimination" => Self::EarnedElimination,
45            "playerJoined" => Self::Joined,
46            "playerLeft" => Self::Left,
47            "playerReceivedHealing" => Self::ReceivedHealing,
48            "playerReceivedKnockback" => Self::ReceivedKnockback,
49            "playerTookDamage" => Self::TookDamage,
50            _ => return None,
51        })
52    }
53
54    pub(crate) fn catalog_id(self) -> &'static str {
55        match self {
56            Self::DealtDamage => "playerDealtDamage",
57            Self::DealtFinalBlow => "playerDealtFinalBlow",
58            Self::DealtHealing => "playerDealtHealing",
59            Self::DealtKnockback => "playerDealtKnockback",
60            Self::Died => "playerDied",
61            Self::EarnedElimination => "playerEarnedElimination",
62            Self::Joined => "playerJoined",
63            Self::Left => "playerLeft",
64            Self::ReceivedHealing => "playerReceivedHealing",
65            Self::ReceivedKnockback => "playerReceivedKnockback",
66            Self::TookDamage => "playerTookDamage",
67        }
68    }
69}
70
71/// The operation used by a Workshop variable modification action.
72///
73/// Workshop can add modification operations independently of this crate.
74/// Consumers should use a wildcard arm when matching this type.
75#[non_exhaustive]
76#[derive(Debug, Clone, Copy, PartialEq, Eq)]
77pub enum ModifyOp {
78    Add,
79    Subtract,
80    Multiply,
81    Divide,
82    Modulo,
83    Min,
84    Max,
85    RaiseToPower,
86    AppendToArray,
87    RemoveFromArrayByValue,
88    RemoveFromArrayByIndex,
89}
90
91impl ModifyOp {
92    /// The inverse of [`catalog_id`](Self::catalog_id).
93    pub(crate) fn from_catalog_id(id: &str) -> Option<Self> {
94        Some(match id {
95            "add" => Self::Add,
96            "subtract" => Self::Subtract,
97            "multiply" => Self::Multiply,
98            "divide" => Self::Divide,
99            "modulo" => Self::Modulo,
100            "min" => Self::Min,
101            "max" => Self::Max,
102            "raiseToPower" => Self::RaiseToPower,
103            "appendToArray" => Self::AppendToArray,
104            "removeFromArrayByValue" => Self::RemoveFromArrayByValue,
105            "removeFromArrayByIndex" => Self::RemoveFromArrayByIndex,
106            _ => return None,
107        })
108    }
109
110    pub(crate) fn as_str(self) -> &'static str {
111        match self {
112            Self::Add => "Add",
113            Self::Subtract => "Subtract",
114            Self::Multiply => "Multiply",
115            Self::Divide => "Divide",
116            Self::Modulo => "Modulo",
117            Self::Min => "Min",
118            Self::Max => "Max",
119            Self::RaiseToPower => "RaiseToPower",
120            Self::AppendToArray => "AppendToArray",
121            Self::RemoveFromArrayByValue => "RemoveFromArrayByValue",
122            Self::RemoveFromArrayByIndex => "RemoveFromArrayByIndex",
123        }
124    }
125
126    pub(crate) fn catalog_id(self) -> &'static str {
127        match self {
128            Self::Add => "add",
129            Self::Subtract => "subtract",
130            Self::Multiply => "multiply",
131            Self::Divide => "divide",
132            Self::Modulo => "modulo",
133            Self::Min => "min",
134            Self::Max => "max",
135            Self::RaiseToPower => "raiseToPower",
136            Self::AppendToArray => "appendToArray",
137            Self::RemoveFromArrayByValue => "removeFromArrayByValue",
138            Self::RemoveFromArrayByIndex => "removeFromArrayByIndex",
139        }
140    }
141}