36 lines
765 B
Rust
36 lines
765 B
Rust
use std::time::{Duration, Instant};
|
|
|
|
use crate::constants::CLOCK_PERIOD;
|
|
|
|
use crate::resources::{Clock, Resources};
|
|
|
|
pub fn run(resources: &mut Resources) {
|
|
if !resources.stop_clock {
|
|
try_tick(&mut resources.clock);
|
|
} else {
|
|
reset(&mut resources.clock);
|
|
}
|
|
}
|
|
|
|
fn try_tick(clock: &mut Clock) {
|
|
if Instant::now() - clock.last_ticked > Duration::from_secs_f32(CLOCK_PERIOD) {
|
|
tick(clock);
|
|
} else {
|
|
clock.has_ticked = false;
|
|
}
|
|
}
|
|
|
|
pub fn force_tick(clock: &mut Clock) {
|
|
tick(clock);
|
|
}
|
|
|
|
fn tick(clock: &mut Clock) {
|
|
clock.has_ticked = true;
|
|
clock.last_ticked = Instant::now();
|
|
clock.ticks += 1;
|
|
}
|
|
|
|
fn reset(clock: &mut Clock) {
|
|
clock.last_ticked = Instant::now();
|
|
clock.has_ticked = false;
|
|
}
|