evtc\agent/
combat.rs

1use crate::{
2    extract::Extract, AgentId, Event, Profession, Specialization, StateChange, TryExtract,
3};
4
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8/// Agent entered combat.
9#[derive(Debug, Clone)]
10#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11pub struct EnterCombatEvent {
12    /// Time of registering the combat enter.
13    pub time: u64,
14
15    /// Agent that entered combat.
16    pub agent: AgentId,
17
18    /// Agent subgroup.
19    pub subgroup: u64,
20
21    /// Agent profession.
22    pub profession: Profession,
23
24    /// Agent elite specialization.
25    pub elite: Specialization,
26}
27
28impl Extract for EnterCombatEvent {
29    #[inline]
30    unsafe fn extract(event: &Event) -> Self {
31        Self {
32            time: event.time,
33            agent: AgentId::from_src(event),
34            subgroup: event.dst_agent,
35            profession: event.value.cast_unsigned().into(),
36            elite: event.buff_dmg.cast_unsigned().into(),
37        }
38    }
39}
40
41impl TryExtract for EnterCombatEvent {
42    #[inline]
43    fn can_extract(event: &Event) -> bool {
44        event.get_statechange() == StateChange::EnterCombat
45    }
46}