reaction 0.2.0

Universal low-latency input handling for game engines
Documentation
#[derive(Default)]
pub struct LatencyTracker {
    pub max_latency_ms: f64,
    pub avg_latency_ms: f64,
    history: Vec<f64>,
}

impl LatencyTracker {
    pub fn new() -> Self {
        Self {
            max_latency_ms: 0.0,
            avg_latency_ms: 0.0,
            history: Vec::new(),
        }
    }

    pub fn record_input_latency(&mut self, input_timestamp: f64, processing_start_time: f64) {
        let latency = (processing_start_time - input_timestamp).max(0.0);
        self.history.push(latency);
        if self.history.len() > 60 {
            self.history.remove(0);
        }

        self.avg_latency_ms = self.history.iter().sum::<f64>() / self.history.len() as f64;
        self.max_latency_ms = self.history.iter().fold(0.0f64, |a, &b| a.max(b));
    }
}