Introduce a Driver abstraction to encapsulate the SimState and the Renderers

This commit is contained in:
2020-09-06 11:24:48 -07:00
parent 3b1397e90c
commit d26b4197af
5 changed files with 80 additions and 42 deletions

View File

@@ -229,21 +229,25 @@ impl MultiRenderer {
pub fn new() -> Self {
Default::default()
}
pub fn with<R: Renderer + 'static>(mut self, r: R) -> Self {
pub fn push<R: Renderer + 'static>(&mut self, r: R) {
self.renderers.push(Box::new(r));
}
pub fn with<R: Renderer + 'static>(mut self, r: R) -> Self {
self.push(r);
self
}
}
impl Renderer for MultiRenderer {
fn render(&mut self, state: &SimState) {
if self.renderers.len() != 0 {
self.render_with_image(state, &state.to_image());
}
}
fn render_with_image(&mut self, state: &SimState, im: &RgbImage) {
for r in &mut self.renderers {
r.render_with_image(state, im);
}
}
}
pub struct NullRenderer;
impl Renderer for NullRenderer {
fn render(&mut self, state: &SimState) {}
}