Generalize rendering into a trait

This commit is contained in:
2020-09-04 16:12:33 -07:00
parent 99cb824a36
commit 6d7bb5becb
3 changed files with 42 additions and 17 deletions

View File

@@ -7,8 +7,12 @@ use y4m::{Colorspace, encode, Encoder, Frame, Ratio};
pub struct NumericTermRenderer;
impl NumericTermRenderer {
pub fn render(&self, state: &SimState) {
pub trait Renderer {
fn render(&mut self, state: &SimState);
}
impl Renderer for NumericTermRenderer {
fn render(&mut self, state: &SimState) {
for y in 0..state.height() {
for x in 0..state.width() {
let cell = state.get(x, y);
@@ -44,8 +48,8 @@ fn curl(x: f64, y: f64) -> f64 {
}
}
impl ColorTermRenderer {
pub fn render(&self, state: &SimState) {
impl Renderer for ColorTermRenderer {
fn render(&mut self, state: &SimState) {
let mut buf = String::new();
let square = "";
for y in 0..state.height() {
@@ -82,7 +86,10 @@ impl Y4MRenderer {
encoder: None,
}
}
pub fn render(&mut self, state: &SimState) {
}
impl Renderer for Y4MRenderer {
fn render(&mut self, state: &SimState) {
if self.encoder.is_none() {
let writer = File::create(&self.out_path).unwrap();
self.encoder = Some(encode(state.width(), state.height(), Ratio::new(30, 1))