use std::time::{Duration, Instant};
pub struct Idler {
idle_time: Duration,
idle_frame_count: u32,
last_input_time: Instant,
last_input_frame: u32,
}
impl Default for Idler {
fn default() -> Idler {
let now = Instant::now();
Idler {
idle_time: Duration::from_secs(1),
idle_frame_count: 60,
last_input_time: now,
last_input_frame: 0,
}
}
}
impl Idler {
pub fn set_idle_time(&mut self, time: Duration) {
self.idle_time = time;
}
pub fn set_idle_frame_count(&mut self, frame_count: u32) {
self.idle_frame_count = frame_count;
}
pub fn incr_frame(&mut self) {
self.last_input_frame = self.last_input_frame.saturating_add(1);
}
pub fn has_to_render(&self) -> bool {
self.last_input_frame < self.idle_frame_count
|| Instant::now().duration_since(self.last_input_time) < self.idle_time
}
pub fn ping_user_input(&mut self) {
self.last_input_time = Instant::now();
self.last_input_frame = 0;
}
}