evtc\marker/
agent.rs
1use crate::{extract::Extract, AgentId, Event, StateChange, TryExtract};
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct AgentMarkerEvent {
10 pub time: u64,
12
13 pub agent: AgentId,
15
16 pub marker: i32,
20
21 pub commander: u8,
23}
24
25impl AgentMarkerEvent {
26 #[inline]
28 pub fn is_remove(&self) -> bool {
29 self.marker == 0
30 }
31
32 #[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}