use std::time::{Duration, Instant};
#[derive(Debug)]
pub struct Time {
last_frame: Instant,
delta_time: Duration,
total_time: Duration,
frame_count: u64,
}
impl Time {
pub fn new() -> Self {
let now = Instant::now();
Self {
last_frame: now,
delta_time: Duration::from_secs(0),
total_time: Duration::from_secs(0),
frame_count: 0,
}
}
pub fn tick(&mut self) {
let now = Instant::now();
self.delta_time = now.duration_since(self.last_frame);
self.total_time += self.delta_time;
self.last_frame = now;
self.frame_count += 1;
}
pub fn delta_time(&self) -> f32 {
self.delta_time.as_secs_f32()
}
pub fn total_time(&self) -> f32 {
self.total_time.as_secs_f32()
}
pub fn frame_count(&self) -> u64 {
self.frame_count
}
pub fn fps(&self) -> f32 {
if self.delta_time.as_secs_f32() > 0.0 {
1.0 / self.delta_time.as_secs_f32()
} else {
0.0
}
}
}
impl Default for Time {
fn default() -> Self {
Self::new()
}
}