use std::time::{Duration, Instant};
#[derive(Debug, SmartDefault, Copy, Clone)]
pub struct SimpleEventTimer {
#[default(Duration::from_secs(300))]
duration: Duration,
#[default(Instant::now())]
last_event: Instant,
}
impl SimpleEventTimer {
#[allow(dead_code)]
pub fn new(duration: Duration) -> Self {
if duration < Duration::from_secs(1) {
panic!("SimpleEventTimer must have a duration of a second or more.");
}
Self {
duration,
..Self::default()
}
}
pub fn remaining(&self) -> Duration { self.duration - self.last_event.elapsed() }
pub fn check(&mut self) -> bool {
if self.last_event.elapsed() >= self.duration {
loop {
self.last_event += self.duration;
if self.last_event.elapsed() < self.duration {
break;
}
}
true
} else {
false
}
}
}