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}