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; }