evtc\skill/
info.rs

1use crate::{
2    extract::{transmute_field, Extract},
3    Event, StateChange, TryExtract,
4};
5
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9/// Skill information from an [`Event`] with [`StateChange::SkillInfo`].
10#[derive(Debug, Clone)]
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12pub struct SkillInfo {
13    pub skill_id: u32,
14    pub recharge: f32,
15    pub range0: f32,
16    pub range1: f32,
17    pub tooltip_time: f32,
18}
19
20impl Extract for SkillInfo {
21    #[inline]
22    unsafe fn extract(event: &Event) -> Self {
23        let [recharge, range0, range1, tooltip_time] = transmute_field!(event.time as [f32; 4]);
24        Self {
25            skill_id: event.skill_id,
26            recharge,
27            range0,
28            range1,
29            tooltip_time,
30        }
31    }
32}
33
34impl TryExtract for SkillInfo {
35    #[inline]
36    fn can_extract(event: &Event) -> bool {
37        event.get_statechange() == StateChange::SkillInfo
38    }
39}