site-demos.rs

1.7 kB · rust · 52 lines

1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board};3use mrlymath::two::designs;45const TILE: usize = 27;6const CELL: f64 = 4.0;7const GUTTER: f64 = 17.0;8const COLS: usize = 7;9const ROWS: usize = 4;1011const DESIGNS: [u128; 28] = [12    15, 30, 57, 85, 102, 108, 325, 31, 79, 103, 115, 122, 173, 341, 119, 111, 125, 187, 231, 245,13    189, 127, 191, 239, 254, 351, 367, 381,14];1516fn main() -> Result<()> {17    let mut board = Board::square();18    let side = TILE as f64 * CELL;19    let width = COLS as f64 * side + (COLS - 1) as f64 * GUTTER;20    let height = ROWS as f64 * side + (ROWS - 1) as f64 * GUTTER;21    let left = ((board.width as f64 - width) / 2.0).round();22    let top = ((board.height as f64 - height) / 2.0).round();23    let mut painted = 0usize;24    for (place, code) in DESIGNS.iter().enumerate() {25        let design = designs::create(*code, 3, 3, 0, 3)?;26        let types = design.types();27        let tone = ink::inks()[place % 3];28        let x = left + (place % COLS) as f64 * (side + GUTTER);29        let y = top + (place / COLS) as f64 * (side + GUTTER);30        let mut filled = 0usize;31        for row in 0..TILE {32            for col in 0..TILE {33                if types.get(&[row, col]) == 0 {34                    continue;35                }36                filled += 1;37                board.rect(38                    x + col as f64 * CELL,39                    y + row as f64 * CELL,40                    CELL,41                    CELL,42                    tone,43                );44            }45        }46        assert_eq!(filled, (code.count_ones() as usize).pow(3));47        painted += filled;48    }49    assert_eq!(painted, 5236);50    save("site-demos", &board)?;51    Ok(())52}