#![allow(missing_docs)]
use grixy::prelude::*;
pub trait Pattern2D {
fn generate(&self, pos: Pos) -> f32;
}
pub struct Checkerboard {
pub even: f32,
pub odd: f32,
}
impl Pattern2D for Checkerboard {
fn generate(&self, pos: Pos) -> f32 {
if (pos.x + pos.y).is_multiple_of(2) {
self.even
} else {
self.odd
}
}
}
pub struct Pattern2DGrid<T> {
pattern: T,
}
impl<T> GridBase for Pattern2DGrid<T> where T: Pattern2D {}
impl<T> GridRead for Pattern2DGrid<T>
where
T: Pattern2D,
{
type Element<'a>
= f32
where
Self: 'a;
type Layout = RowMajor;
fn get(&self, pos: Pos) -> Option<Self::Element<'_>> {
Some(self.pattern.generate(pos))
}
}
fn main() {
let pattern = Checkerboard {
even: 1.0,
odd: 0.0,
};
let grid = Pattern2DGrid { pattern };
for y in 0..4 {
for x in 0..4 {
let pos = Pos::new(x, y);
print!("{:.1} ", grid.get(pos).unwrap());
}
println!();
}
}