use std::time::Duration;
#[derive(Debug, Clone, Copy)]
pub struct TickRate(pub f64);
impl Default for TickRate {
fn default() -> Self {
Self(60.0)
}
}
#[derive(Debug, Clone, Copy)]
pub struct TimeAdapter {
ticks_per_second: f64,
}
impl TimeAdapter {
#[must_use]
pub const fn new(ticks_per_second: f64) -> Self {
Self { ticks_per_second }
}
#[allow(clippy::cast_precision_loss)] #[must_use]
pub fn ticks_to_seconds(&self, ticks: u64) -> f64 {
ticks as f64 / self.ticks_per_second
}
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] #[must_use]
pub fn seconds_to_ticks(&self, seconds: f64) -> u64 {
(seconds * self.ticks_per_second).round() as u64
}
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] #[must_use]
pub fn duration_to_ticks(&self, duration: Duration) -> u64 {
(duration.as_secs_f64() * self.ticks_per_second).round() as u64
}
#[allow(clippy::cast_precision_loss)] #[must_use]
pub fn ticks_to_duration(&self, ticks: u64) -> Duration {
Duration::from_secs_f64(ticks as f64 / self.ticks_per_second)
}
#[must_use]
pub const fn ticks_per_second(&self) -> f64 {
self.ticks_per_second
}
}