From b2211efe529769f183ac927eb5588d80bd48ad42 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 2 Mar 2025 22:40:41 +0100 Subject: [PATCH] Show automaton rule by default --- .../src/documents/cells/data.json | 1 + .../src/documents/cells/main.typ | 8 ++++++++ .../src/documents/cells/mod.rs | 20 +++++++++++-------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/showbits-thermal-printer/src/documents/cells/data.json b/showbits-thermal-printer/src/documents/cells/data.json index 20bfab5..eda27e4 100644 --- a/showbits-thermal-printer/src/documents/cells/data.json +++ b/showbits-thermal-printer/src/documents/cells/data.json @@ -1,3 +1,4 @@ { + "rule": 123, "feed": false } diff --git a/showbits-thermal-printer/src/documents/cells/main.typ b/showbits-thermal-printer/src/documents/cells/main.typ index 36b8649..b43b3b0 100644 --- a/showbits-thermal-printer/src/documents/cells/main.typ +++ b/showbits-thermal-printer/src/documents/cells/main.typ @@ -3,8 +3,16 @@ #let data = json("data.json") +#set par(spacing: 6pt) + #image("image.png") +#if data.rule != none [ + Cellular Automaton + #h(1fr) + Rule #data.rule +] + #if data.feed { lib.feed } diff --git a/showbits-thermal-printer/src/documents/cells/mod.rs b/showbits-thermal-printer/src/documents/cells/mod.rs index 7f02147..d0e84ed 100644 --- a/showbits-thermal-printer/src/documents/cells/mod.rs +++ b/showbits-thermal-printer/src/documents/cells/mod.rs @@ -86,12 +86,12 @@ fn is_interesting(image: &RgbaImage) -> bool { true } -fn generate_interesting_image(rows: u32, cols: u32) -> RgbaImage { +fn generate_interesting_image(rows: u32, cols: u32) -> (u8, RgbaImage) { loop { let rule = rand::random(); let image = generate_image(rows, cols, rule); if is_interesting(&image) { - break image; + break (rule, image); } println!("Uninteresting automaton, generating a new one"); } @@ -99,11 +99,13 @@ fn generate_interesting_image(rows: u32, cols: u32) -> RgbaImage { #[derive(Serialize)] struct Data { + rule: Option, feed: bool, } #[derive(Deserialize)] pub struct FormData { + pub show_rule: Option, pub rule: Option, pub rows: Option, pub scale: Option, @@ -111,16 +113,13 @@ pub struct FormData { } pub async fn post(server: State, Form(form): Form) -> somehow::Result<()> { - let data = Data { - feed: form.feed.unwrap_or(true), - }; - + let show_rule = form.show_rule.unwrap_or(true); let scale = form.scale.unwrap_or(4).clamp(1, 16); let rows = form.rows.unwrap_or(128 * 4 / scale).clamp(1, 1024 / scale); let cols = Printer::WIDTH / scale; - let image = match form.rule { - Some(rule) => generate_image(rows, cols, rule), + let (rule, image) = match form.rule { + Some(rule) => (rule, generate_image(rows, cols, rule)), None => generate_interesting_image(rows, cols), }; @@ -131,6 +130,11 @@ pub async fn post(server: State, Form(form): Form) -> somehow: imageops::Nearest, ); + let data = Data { + rule: Some(rule).filter(|_| show_rule), + feed: form.feed.unwrap_or(true), + }; + let mut bytes: Vec = Vec::new(); image .write_to(&mut Cursor::new(&mut bytes), ImageFormat::Png)