subtr-actor 0.5.0

Rocket League replay transformer
Documentation
use crate::*;

use super::*;

impl StatFieldProvider for TouchStats {
    fn visit_stat_fields(&self, visitor: &mut dyn FnMut(ExportedStat)) {
        visitor(ExportedStat::unsigned(
            "touch",
            "touch_count",
            StatUnit::Count,
            self.touch_count,
        ));
        visitor(ExportedStat::unsigned(
            "touch",
            "dribble_touch_count",
            StatUnit::Count,
            self.dribble_touch_count,
        ));
        visitor(ExportedStat::unsigned(
            "touch",
            "control_touch_count",
            StatUnit::Count,
            self.control_touch_count,
        ));
        visitor(ExportedStat::unsigned(
            "touch",
            "medium_hit_count",
            StatUnit::Count,
            self.medium_hit_count,
        ));
        visitor(ExportedStat::unsigned(
            "touch",
            "hard_hit_count",
            StatUnit::Count,
            self.hard_hit_count,
        ));
        visitor(ExportedStat::unsigned(
            "touch",
            "aerial_touch_count",
            StatUnit::Count,
            self.aerial_touch_count,
        ));
        visitor(ExportedStat::unsigned(
            "touch",
            "high_aerial_touch_count",
            StatUnit::Count,
            self.high_aerial_touch_count,
        ));
        for entry in self.complete_labeled_touch_counts().entries {
            visitor(ExportedStat::unsigned_labeled(
                "touch",
                "touch_count",
                StatUnit::Count,
                entry.labels,
                entry.count,
            ));
        }
        visitor(ExportedStat::unsigned(
            "touch",
            "is_last_touch",
            StatUnit::Count,
            u32::from(self.is_last_touch),
        ));
        if let Some(value) = self.last_touch_time {
            visitor(ExportedStat::float(
                "touch",
                "last_touch_time",
                StatUnit::Seconds,
                value,
            ));
        }
        if let Some(value) = self.last_touch_frame {
            visitor(ExportedStat::unsigned(
                "touch",
                "last_touch_frame",
                StatUnit::Count,
                u32::try_from(value).unwrap_or(u32::MAX),
            ));
        }
        if let Some(value) = self.time_since_last_touch {
            visitor(ExportedStat::float(
                "touch",
                "time_since_last_touch",
                StatUnit::Seconds,
                value,
            ));
        }
        if let Some(value) = self.frames_since_last_touch {
            visitor(ExportedStat::unsigned(
                "touch",
                "frames_since_last_touch",
                StatUnit::Count,
                u32::try_from(value).unwrap_or(u32::MAX),
            ));
        }
        if let Some(value) = self.last_ball_speed_change {
            visitor(ExportedStat::float(
                "touch",
                "last_ball_speed_change",
                StatUnit::UnrealUnitsPerSecond,
                value,
            ));
        }
        visitor(ExportedStat::float(
            "touch",
            "average_ball_speed_change",
            StatUnit::UnrealUnitsPerSecond,
            self.average_ball_speed_change(),
        ));
        visitor(ExportedStat::float(
            "touch",
            "max_ball_speed_change",
            StatUnit::UnrealUnitsPerSecond,
            self.max_ball_speed_change,
        ));
    }
}

#[cfg(test)]
#[path = "touch_test.rs"]
mod tests;