Skip to main content

workshop_rs/wir/
event.rs

1//! Canonical Workshop event forms and filters.
2
3use super::SubroutineId;
4
5/// The team filter attached to a player-scoped Workshop event.
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum EventTeam {
8    All,
9    Team1,
10    Team2,
11}
12
13/// The player filter attached to a player-scoped Workshop event.
14#[derive(Debug, Clone, PartialEq, Eq)]
15pub enum EventTarget {
16    All,
17    Slot(u8),
18    Hero(String),
19}
20
21/// A non-ongoing player event identity.
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23pub enum PlayerEventKind {
24    DealtDamage,
25    DealtFinalBlow,
26    DealtHealing,
27    DealtKnockback,
28    Died,
29    EarnedElimination,
30    Joined,
31    Left,
32    ReceivedHealing,
33    ReceivedKnockback,
34    TookDamage,
35}
36
37impl PlayerEventKind {
38    /// The locale-independent catalog identity for this event.
39    pub fn catalog_id(self) -> &'static str {
40        match self {
41            PlayerEventKind::DealtDamage => "playerDealtDamage",
42            PlayerEventKind::DealtFinalBlow => "playerDealtFinalBlow",
43            PlayerEventKind::DealtHealing => "playerDealtHealing",
44            PlayerEventKind::DealtKnockback => "playerDealtKnockback",
45            PlayerEventKind::Died => "playerDied",
46            PlayerEventKind::EarnedElimination => "playerEarnedElimination",
47            PlayerEventKind::Joined => "playerJoined",
48            PlayerEventKind::Left => "playerLeft",
49            PlayerEventKind::ReceivedHealing => "playerReceivedHealing",
50            PlayerEventKind::ReceivedKnockback => "playerReceivedKnockback",
51            PlayerEventKind::TookDamage => "playerTookDamage",
52        }
53    }
54}
55
56/// A workshop event.
57#[derive(Debug, Clone)]
58pub enum Event {
59    /// `Ongoing - Global` (from `@Event global`).
60    Global,
61    /// `Ongoing - Each Player` (from `@Event eachPlayer`).
62    EachPlayer,
63    /// `Ongoing - Each Player` with its canonical team/player filters.
64    EachPlayerWithFilters {
65        team: EventTeam,
66        target: EventTarget,
67    },
68    /// A player-scoped Workshop event with canonical filters.
69    Player {
70        kind: PlayerEventKind,
71        team: EventTeam,
72        target: EventTarget,
73    },
74    /// A subroutine body (`def name():`), referencing the subroutine.
75    Subroutine(SubroutineId),
76}