evtc\marker/
agent.rs

1use crate::{extract::Extract, AgentId, Event, StateChange, TryExtract};
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// Agent has a marker.
7#[derive(Debug, Clone)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct AgentMarkerEvent {
10    /// Time of registering the event.
11    pub time: u64,
12
13    /// Agent that has the marker.
14    pub agent: AgentId,
15
16    /// Marker id.
17    ///
18    /// Id is volatile, depends on game build.
19    pub marker: i32,
20
21    /// Non-zero if commander.
22    pub commander: u8,
23}
24
25impl AgentMarkerEvent {
26    /// Whether the marker was removed.
27    #[inline]
28    pub fn is_remove(&self) -> bool {
29        self.marker == 0
30    }
31
32    /// Whether the marker is a commander tag.
33    #[inline]
34    pub fn is_commander(&self) -> bool {
35        self.commander != 0
36    }
37}
38
39impl Extract for AgentMarkerEvent {
40    #[inline]
41    unsafe fn extract(event: &Event) -> Self {
42        Self {
43            time: event.time,
44            agent: AgentId::from_src(event),
45            marker: event.value,
46            commander: event.buff,
47        }
48    }
49}
50
51impl TryExtract for AgentMarkerEvent {
52    #[inline]
53    fn can_extract(event: &Event) -> bool {
54        event.get_statechange() == StateChange::Marker
55    }
56}