evtc\agent/
health.rs

1use crate::{extract::Extract, AgentId, Event, StateChange, TryExtract};
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// Agent max health change.
7#[derive(Debug, Clone)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct MaxHealthEvent {
10    /// Time of registering the max health change.
11    pub time: u64,
12
13    /// Agent that had their max health changed.
14    pub agent: AgentId,
15
16    /// New agent max health.
17    pub max_health: u64,
18}
19
20impl Extract for MaxHealthEvent {
21    #[inline]
22    unsafe fn extract(event: &Event) -> Self {
23        Self {
24            time: event.time,
25            agent: AgentId::from_src(event),
26            max_health: event.dst_agent,
27        }
28    }
29}
30
31impl TryExtract for MaxHealthEvent {
32    #[inline]
33    fn can_extract(event: &Event) -> bool {
34        event.get_statechange() == StateChange::MaxHealthUpdate
35    }
36}
37
38/// Agent health percent change.
39#[derive(Debug, Clone)]
40#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
41pub struct HealthUpdateEvent {
42    /// Time of registering the health percent change.
43    pub time: u64,
44
45    /// Agent that had their health percent changed.
46    pub agent: AgentId,
47
48    /// Current health percent with `1.0` being max.
49    pub health: f32,
50}
51
52impl HealthUpdateEvent {
53    /// Conversion ratio.
54    pub const CONVERT: f32 = 10_000.0;
55}
56
57impl Extract for HealthUpdateEvent {
58    #[inline]
59    unsafe fn extract(event: &Event) -> Self {
60        Self {
61            time: event.time,
62            agent: AgentId::from_src(event),
63            health: event.dst_agent as f32 / Self::CONVERT,
64        }
65    }
66}
67
68impl TryExtract for HealthUpdateEvent {
69    #[inline]
70    fn can_extract(event: &Event) -> bool {
71        event.get_statechange() == StateChange::HealthUpdate
72    }
73}
74
75/// Agent barrier percent change.
76#[derive(Debug, Clone)]
77#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
78pub struct BarrierUpdateEvent {
79    /// Time of registering the barrier change.
80    pub time: u64,
81
82    /// Agent that had their current barrier changed.
83    pub agent: AgentId,
84
85    /// Current barrier percent with `1.0` being max.
86    pub barrier: f32,
87}
88
89impl BarrierUpdateEvent {
90    /// Conversion ratio.
91    pub const CONVERT: f32 = 10_000.0;
92}
93
94impl Extract for BarrierUpdateEvent {
95    #[inline]
96    unsafe fn extract(event: &Event) -> Self {
97        Self {
98            time: event.time,
99            agent: AgentId::from_src(event),
100            barrier: event.dst_agent as f32 / Self::CONVERT,
101        }
102    }
103}
104
105impl TryExtract for BarrierUpdateEvent {
106    #[inline]
107    fn can_extract(event: &Event) -> bool {
108        event.get_statechange() == StateChange::BarrierUpdate
109    }
110}