evtc\missile/
remove.rs

1use crate::{extract::Extract, AgentId, Event, StateChange, TryExtract};
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// Missile created.
7#[derive(Debug, Clone)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct MissileRemove {
10    /// Time of registering the missile.
11    pub time: u64,
12
13    /// Related agent.
14    pub agent: AgentId,
15
16    /// Total friendly fire damage.
17    pub friendly_fire: i32,
18
19    /// Associated skill id.
20    pub skill_id: u32,
21
22    /// Whether at least one enemy was hit along the way.
23    pub hit_enemy: u8,
24
25    /// Trackable id to identify missile in other events.
26    pub tracking_id: u32,
27}
28
29impl Extract for MissileRemove {
30    #[inline]
31    unsafe fn extract(event: &Event) -> Self {
32        let friendly_fire = event.value;
33        let skill_id = event.skill_id;
34        let hit_enemy = event.is_flanking;
35
36        Self {
37            time: event.time,
38            agent: AgentId::from_src(event),
39            friendly_fire,
40            skill_id,
41            hit_enemy,
42            tracking_id: event.get_pad_id(),
43        }
44    }
45}
46
47impl TryExtract for MissileRemove {
48    #[inline]
49    fn can_extract(event: &Event) -> bool {
50        event.get_statechange() == StateChange::MissileCreate
51    }
52}