microworlds-rs/src/lib.rs

58 lines
1.4 KiB
Rust

use sdl2::render::Canvas;
use sdl2::pixels::Color;
use sdl2::video::Window;
use sdl2::rect::Rect;
use std::cmp;
pub mod life;
pub const BLACK: Color = Color::RGB(0, 0, 0);
pub const WHITE: Color = Color::RGB(255, 255, 255);
#[derive(Clone)]
pub struct Cell {
pub color: Color,
}
pub trait Engine {
fn evolve(&mut self) -> Vec<Vec<Cell>>;
}
pub struct Renderer {
pub px_size: i32,
pub canvas: Canvas<Window>,
}
impl Renderer {
pub fn new(px_size: i32, canvas: Canvas<Window>) -> Renderer {
Renderer { px_size: px_size, canvas: canvas }
}
pub fn render(&mut self, grid: &Vec<Vec<Cell>>) {
self.canvas.set_draw_color(BLACK);
self.canvas.clear();
for y in 0..grid.len() {
for x in 0..grid[y].len() {
//if grid[y][x].alive {
self.canvas.set_draw_color(grid[y][x].color);
self.canvas.fill_rect(Rect::new(x as i32 * self.px_size, y as i32 * self.px_size, self.px_size as u32, self.px_size as u32));
//}
}
}
/*
for (y, row) in grid.iter().enumerate() {
for (x, cell) in row.iter().enumerate() {
rectangle( cell.color, rectangle::square((x as u32 * px_size) as f64, (y as u32 * px_size) as f64, px_size as f64), c.transform, gl)
}
}*/
self.canvas.present();
}
}