use std::time::Duration; use anyhow::Error; use crate::Renderer; use crate::timer::Timer; pub struct Runner { timer: Box, ticks: u128, renderer: Box, } impl Runner { pub fn new(duration: Duration, timer: Box, renderer: Box) -> Self { let ticks = duration.as_nanos() / timer.delay().as_nanos(); Self { timer, ticks, renderer } } pub fn run(mut self) -> Result<(), Error> { for i in 0..self.ticks { let step = i as f32 / self.ticks as f32; self.renderer.render(step); self.renderer.present()?; self.timer.sleep(); } self.renderer.finish() } }