diff --git a/showbits-assets/data/egg/cover_00.png b/showbits-assets/data/egg/cover_00.png new file mode 100644 index 0000000..f1be515 Binary files /dev/null and b/showbits-assets/data/egg/cover_00.png differ diff --git a/showbits-assets/data/egg/cover_01.png b/showbits-assets/data/egg/cover_01.png new file mode 100644 index 0000000..116e748 Binary files /dev/null and b/showbits-assets/data/egg/cover_01.png differ diff --git a/showbits-assets/data/egg/cover_02.png b/showbits-assets/data/egg/cover_02.png new file mode 100644 index 0000000..b440d8d Binary files /dev/null and b/showbits-assets/data/egg/cover_02.png differ diff --git a/showbits-assets/data/egg/cover_03.png b/showbits-assets/data/egg/cover_03.png new file mode 100644 index 0000000..1827aa8 Binary files /dev/null and b/showbits-assets/data/egg/cover_03.png differ diff --git a/showbits-assets/data/egg/cover_04.png b/showbits-assets/data/egg/cover_04.png new file mode 100644 index 0000000..7d7159f Binary files /dev/null and b/showbits-assets/data/egg/cover_04.png differ diff --git a/showbits-assets/data/egg/cover_05.png b/showbits-assets/data/egg/cover_05.png new file mode 100644 index 0000000..ee89d9d Binary files /dev/null and b/showbits-assets/data/egg/cover_05.png differ diff --git a/showbits-assets/data/egg/cover_06.png b/showbits-assets/data/egg/cover_06.png new file mode 100644 index 0000000..081f8e8 Binary files /dev/null and b/showbits-assets/data/egg/cover_06.png differ diff --git a/showbits-assets/data/egg/ei.kra b/showbits-assets/data/egg/ei.kra new file mode 100644 index 0000000..963c802 Binary files /dev/null and b/showbits-assets/data/egg/ei.kra differ diff --git a/showbits-assets/data/egg/pattern_00.png b/showbits-assets/data/egg/pattern_00.png new file mode 100644 index 0000000..f9e9adb Binary files /dev/null and b/showbits-assets/data/egg/pattern_00.png differ diff --git a/showbits-assets/data/egg/pattern_01.png b/showbits-assets/data/egg/pattern_01.png new file mode 100644 index 0000000..43d3630 Binary files /dev/null and b/showbits-assets/data/egg/pattern_01.png differ diff --git a/showbits-assets/data/egg/pattern_02.png b/showbits-assets/data/egg/pattern_02.png new file mode 100644 index 0000000..7e2d625 Binary files /dev/null and b/showbits-assets/data/egg/pattern_02.png differ diff --git a/showbits-assets/data/egg/pattern_03.png b/showbits-assets/data/egg/pattern_03.png new file mode 100644 index 0000000..212bb8d Binary files /dev/null and b/showbits-assets/data/egg/pattern_03.png differ diff --git a/showbits-assets/data/egg/pattern_04.png b/showbits-assets/data/egg/pattern_04.png new file mode 100644 index 0000000..dfde965 Binary files /dev/null and b/showbits-assets/data/egg/pattern_04.png differ diff --git a/showbits-assets/data/egg/pattern_05.png b/showbits-assets/data/egg/pattern_05.png new file mode 100644 index 0000000..fac7f67 Binary files /dev/null and b/showbits-assets/data/egg/pattern_05.png differ diff --git a/showbits-assets/data/egg/pattern_06.png b/showbits-assets/data/egg/pattern_06.png new file mode 100644 index 0000000..3c4faa1 Binary files /dev/null and b/showbits-assets/data/egg/pattern_06.png differ diff --git a/showbits-assets/data/egg/pattern_07.png b/showbits-assets/data/egg/pattern_07.png new file mode 100644 index 0000000..a1fafdd Binary files /dev/null and b/showbits-assets/data/egg/pattern_07.png differ diff --git a/showbits-assets/data/egg/pattern_08.png b/showbits-assets/data/egg/pattern_08.png new file mode 100644 index 0000000..40771c9 Binary files /dev/null and b/showbits-assets/data/egg/pattern_08.png differ diff --git a/showbits-assets/data/egg/pattern_09.png b/showbits-assets/data/egg/pattern_09.png new file mode 100644 index 0000000..40a7eb2 Binary files /dev/null and b/showbits-assets/data/egg/pattern_09.png differ diff --git a/showbits-assets/data/egg/pattern_10.png b/showbits-assets/data/egg/pattern_10.png new file mode 100644 index 0000000..8c40f70 Binary files /dev/null and b/showbits-assets/data/egg/pattern_10.png differ diff --git a/showbits-assets/data/egg/pattern_11.png b/showbits-assets/data/egg/pattern_11.png new file mode 100644 index 0000000..282b41d Binary files /dev/null and b/showbits-assets/data/egg/pattern_11.png differ diff --git a/showbits-assets/data/egg/pattern_12.png b/showbits-assets/data/egg/pattern_12.png new file mode 100644 index 0000000..7784029 Binary files /dev/null and b/showbits-assets/data/egg/pattern_12.png differ diff --git a/showbits-assets/data/egg/pattern_13.png b/showbits-assets/data/egg/pattern_13.png new file mode 100644 index 0000000..f923751 Binary files /dev/null and b/showbits-assets/data/egg/pattern_13.png differ diff --git a/showbits-assets/data/egg/pattern_14.png b/showbits-assets/data/egg/pattern_14.png new file mode 100644 index 0000000..55b50e2 Binary files /dev/null and b/showbits-assets/data/egg/pattern_14.png differ diff --git a/showbits-assets/data/egg/pattern_15.png b/showbits-assets/data/egg/pattern_15.png new file mode 100644 index 0000000..14d7910 Binary files /dev/null and b/showbits-assets/data/egg/pattern_15.png differ diff --git a/showbits-assets/data/egg/pattern_16.png b/showbits-assets/data/egg/pattern_16.png new file mode 100644 index 0000000..e92573a Binary files /dev/null and b/showbits-assets/data/egg/pattern_16.png differ diff --git a/showbits-assets/data/egg/pattern_17.png b/showbits-assets/data/egg/pattern_17.png new file mode 100644 index 0000000..8ab4f9f Binary files /dev/null and b/showbits-assets/data/egg/pattern_17.png differ diff --git a/showbits-assets/data/egg/pattern_18.png b/showbits-assets/data/egg/pattern_18.png new file mode 100644 index 0000000..5f3995c Binary files /dev/null and b/showbits-assets/data/egg/pattern_18.png differ diff --git a/showbits-assets/data/egg/pattern_19.png b/showbits-assets/data/egg/pattern_19.png new file mode 100644 index 0000000..07fd81f Binary files /dev/null and b/showbits-assets/data/egg/pattern_19.png differ diff --git a/showbits-assets/data/egg/pattern_20.png b/showbits-assets/data/egg/pattern_20.png new file mode 100644 index 0000000..5eb81d0 Binary files /dev/null and b/showbits-assets/data/egg/pattern_20.png differ diff --git a/showbits-assets/data/egg/pattern_21.png b/showbits-assets/data/egg/pattern_21.png new file mode 100644 index 0000000..9281365 Binary files /dev/null and b/showbits-assets/data/egg/pattern_21.png differ diff --git a/showbits-assets/data/egg/pattern_22.png b/showbits-assets/data/egg/pattern_22.png new file mode 100644 index 0000000..c0c1531 Binary files /dev/null and b/showbits-assets/data/egg/pattern_22.png differ diff --git a/showbits-assets/data/egg/pattern_23.png b/showbits-assets/data/egg/pattern_23.png new file mode 100644 index 0000000..7b68373 Binary files /dev/null and b/showbits-assets/data/egg/pattern_23.png differ diff --git a/showbits-assets/data/egg/pattern_24.png b/showbits-assets/data/egg/pattern_24.png new file mode 100644 index 0000000..226c39d Binary files /dev/null and b/showbits-assets/data/egg/pattern_24.png differ diff --git a/showbits-assets/data/egg/pattern_25.png b/showbits-assets/data/egg/pattern_25.png new file mode 100644 index 0000000..b061516 Binary files /dev/null and b/showbits-assets/data/egg/pattern_25.png differ diff --git a/showbits-assets/data/egg/pattern_26.png b/showbits-assets/data/egg/pattern_26.png new file mode 100644 index 0000000..228766d Binary files /dev/null and b/showbits-assets/data/egg/pattern_26.png differ diff --git a/showbits-assets/data/egg/pattern_27.png b/showbits-assets/data/egg/pattern_27.png new file mode 100644 index 0000000..7c3618b Binary files /dev/null and b/showbits-assets/data/egg/pattern_27.png differ diff --git a/showbits-assets/data/egg/pattern_28.png b/showbits-assets/data/egg/pattern_28.png new file mode 100644 index 0000000..15483ab Binary files /dev/null and b/showbits-assets/data/egg/pattern_28.png differ diff --git a/showbits-assets/data/egg/pattern_29.png b/showbits-assets/data/egg/pattern_29.png new file mode 100644 index 0000000..67dc8da Binary files /dev/null and b/showbits-assets/data/egg/pattern_29.png differ diff --git a/showbits-assets/data/egg/pattern_30.png b/showbits-assets/data/egg/pattern_30.png new file mode 100644 index 0000000..ca93527 Binary files /dev/null and b/showbits-assets/data/egg/pattern_30.png differ diff --git a/showbits-assets/data/egg/pattern_31.png b/showbits-assets/data/egg/pattern_31.png new file mode 100644 index 0000000..103bf2d Binary files /dev/null and b/showbits-assets/data/egg/pattern_31.png differ diff --git a/showbits-assets/data/egg/pattern_32.png b/showbits-assets/data/egg/pattern_32.png new file mode 100644 index 0000000..23696c4 Binary files /dev/null and b/showbits-assets/data/egg/pattern_32.png differ diff --git a/showbits-assets/data/egg/pattern_33.png b/showbits-assets/data/egg/pattern_33.png new file mode 100644 index 0000000..9845e10 Binary files /dev/null and b/showbits-assets/data/egg/pattern_33.png differ diff --git a/showbits-assets/data/egg/pattern_34.png b/showbits-assets/data/egg/pattern_34.png new file mode 100644 index 0000000..4cc4c42 Binary files /dev/null and b/showbits-assets/data/egg/pattern_34.png differ diff --git a/showbits-assets/data/egg/pattern_35.png b/showbits-assets/data/egg/pattern_35.png new file mode 100644 index 0000000..c099849 Binary files /dev/null and b/showbits-assets/data/egg/pattern_35.png differ diff --git a/showbits-assets/data/egg/pattern_36.png b/showbits-assets/data/egg/pattern_36.png new file mode 100644 index 0000000..9cd9a41 Binary files /dev/null and b/showbits-assets/data/egg/pattern_36.png differ diff --git a/showbits-assets/data/egg/pattern_37.png b/showbits-assets/data/egg/pattern_37.png new file mode 100644 index 0000000..ab208b0 Binary files /dev/null and b/showbits-assets/data/egg/pattern_37.png differ diff --git a/showbits-assets/data/egg/pattern_38.png b/showbits-assets/data/egg/pattern_38.png new file mode 100644 index 0000000..d040fbc Binary files /dev/null and b/showbits-assets/data/egg/pattern_38.png differ diff --git a/showbits-assets/data/egg/pattern_39.png b/showbits-assets/data/egg/pattern_39.png new file mode 100644 index 0000000..dba990d Binary files /dev/null and b/showbits-assets/data/egg/pattern_39.png differ diff --git a/showbits-assets/data/egg_cover.png b/showbits-assets/data/egg_bad/cover_00.png similarity index 100% rename from showbits-assets/data/egg_cover.png rename to showbits-assets/data/egg_bad/cover_00.png diff --git a/showbits-assets/data/egg.xcf b/showbits-assets/data/egg_bad/egg.xcf similarity index 100% rename from showbits-assets/data/egg.xcf rename to showbits-assets/data/egg_bad/egg.xcf diff --git a/showbits-assets/data/egg_pattern_0.png b/showbits-assets/data/egg_bad/pattern_00.png similarity index 100% rename from showbits-assets/data/egg_pattern_0.png rename to showbits-assets/data/egg_bad/pattern_00.png diff --git a/showbits-assets/data/egg_pattern_1.png b/showbits-assets/data/egg_bad/pattern_01.png similarity index 100% rename from showbits-assets/data/egg_pattern_1.png rename to showbits-assets/data/egg_bad/pattern_01.png diff --git a/showbits-assets/data/egg_pattern_2.png b/showbits-assets/data/egg_bad/pattern_02.png similarity index 100% rename from showbits-assets/data/egg_pattern_2.png rename to showbits-assets/data/egg_bad/pattern_02.png diff --git a/showbits-assets/data/egg_pattern_3.png b/showbits-assets/data/egg_bad/pattern_03.png similarity index 100% rename from showbits-assets/data/egg_pattern_3.png rename to showbits-assets/data/egg_bad/pattern_03.png diff --git a/showbits-assets/data/egg_pattern_4.png b/showbits-assets/data/egg_bad/pattern_04.png similarity index 100% rename from showbits-assets/data/egg_pattern_4.png rename to showbits-assets/data/egg_bad/pattern_04.png diff --git a/showbits-assets/data/egg_pattern_5.png b/showbits-assets/data/egg_bad/pattern_05.png similarity index 100% rename from showbits-assets/data/egg_pattern_5.png rename to showbits-assets/data/egg_bad/pattern_05.png diff --git a/showbits-assets/data/egg_pattern_6.png b/showbits-assets/data/egg_bad/pattern_06.png similarity index 100% rename from showbits-assets/data/egg_pattern_6.png rename to showbits-assets/data/egg_bad/pattern_06.png diff --git a/showbits-assets/src/lib.rs b/showbits-assets/src/lib.rs index 0ca41c0..895e6d3 100644 --- a/showbits-assets/src/lib.rs +++ b/showbits-assets/src/lib.rs @@ -4,13 +4,65 @@ pub const UNIFONT_UPPER: &[u8] = include_bytes!("../data/unifont_upper-15.1.05.o pub const UNIFONT_NAME: &str = "Unifont"; pub const UNIFONT_SIZE: f32 = 16.0; -pub const EGG_COVER: &[u8] = include_bytes!("../data/egg_cover.png"); -pub const EGG_PATTERNS: &[&[u8]] = &[ - include_bytes!("../data/egg_pattern_0.png"), - include_bytes!("../data/egg_pattern_1.png"), - include_bytes!("../data/egg_pattern_2.png"), - include_bytes!("../data/egg_pattern_3.png"), - include_bytes!("../data/egg_pattern_4.png"), - include_bytes!("../data/egg_pattern_5.png"), - include_bytes!("../data/egg_pattern_6.png"), +pub const EGG_BAD_COVERS: &[&[u8]] = &[include_bytes!("../data/egg_bad/cover_00.png")]; +pub const EGG_BAD_PATTERNS: &[&[u8]] = &[ + include_bytes!("../data/egg_bad/pattern_00.png"), + include_bytes!("../data/egg_bad/pattern_01.png"), + include_bytes!("../data/egg_bad/pattern_02.png"), + include_bytes!("../data/egg_bad/pattern_03.png"), + include_bytes!("../data/egg_bad/pattern_04.png"), + include_bytes!("../data/egg_bad/pattern_05.png"), + include_bytes!("../data/egg_bad/pattern_06.png"), +]; + +pub const EGG_COVERS: &[&[u8]] = &[ + include_bytes!("../data/egg/cover_00.png"), + include_bytes!("../data/egg/cover_01.png"), + include_bytes!("../data/egg/cover_02.png"), + include_bytes!("../data/egg/cover_03.png"), + include_bytes!("../data/egg/cover_04.png"), + include_bytes!("../data/egg/cover_05.png"), + include_bytes!("../data/egg/cover_06.png"), +]; +pub const EGG_PATTERNS: &[&[u8]] = &[ + include_bytes!("../data/egg/pattern_00.png"), + include_bytes!("../data/egg/pattern_01.png"), + include_bytes!("../data/egg/pattern_02.png"), + include_bytes!("../data/egg/pattern_03.png"), + include_bytes!("../data/egg/pattern_04.png"), + include_bytes!("../data/egg/pattern_05.png"), + include_bytes!("../data/egg/pattern_06.png"), + include_bytes!("../data/egg/pattern_07.png"), + include_bytes!("../data/egg/pattern_08.png"), + include_bytes!("../data/egg/pattern_09.png"), + include_bytes!("../data/egg/pattern_10.png"), + include_bytes!("../data/egg/pattern_11.png"), + include_bytes!("../data/egg/pattern_12.png"), + include_bytes!("../data/egg/pattern_13.png"), + include_bytes!("../data/egg/pattern_14.png"), + include_bytes!("../data/egg/pattern_15.png"), + include_bytes!("../data/egg/pattern_16.png"), + include_bytes!("../data/egg/pattern_17.png"), + include_bytes!("../data/egg/pattern_18.png"), + include_bytes!("../data/egg/pattern_19.png"), + include_bytes!("../data/egg/pattern_20.png"), + include_bytes!("../data/egg/pattern_21.png"), + include_bytes!("../data/egg/pattern_22.png"), + include_bytes!("../data/egg/pattern_23.png"), + include_bytes!("../data/egg/pattern_24.png"), + include_bytes!("../data/egg/pattern_25.png"), + include_bytes!("../data/egg/pattern_26.png"), + include_bytes!("../data/egg/pattern_27.png"), + include_bytes!("../data/egg/pattern_28.png"), + include_bytes!("../data/egg/pattern_29.png"), + include_bytes!("../data/egg/pattern_30.png"), + include_bytes!("../data/egg/pattern_31.png"), + include_bytes!("../data/egg/pattern_32.png"), + include_bytes!("../data/egg/pattern_33.png"), + include_bytes!("../data/egg/pattern_34.png"), + include_bytes!("../data/egg/pattern_35.png"), + include_bytes!("../data/egg/pattern_36.png"), + include_bytes!("../data/egg/pattern_37.png"), + include_bytes!("../data/egg/pattern_38.png"), + include_bytes!("../data/egg/pattern_39.png"), ]; diff --git a/showbits-thermal-printer/src/drawer/egg.rs b/showbits-thermal-printer/src/drawer/egg.rs index ec59e3f..136fa6c 100644 --- a/showbits-thermal-printer/src/drawer/egg.rs +++ b/showbits-thermal-printer/src/drawer/egg.rs @@ -1,6 +1,6 @@ use image::{imageops, RgbaImage}; -use rand::Rng; -use showbits_assets::{EGG_COVER, EGG_PATTERNS}; +use rand::{seq::SliceRandom, Rng}; +use showbits_assets::{EGG_BAD_COVERS, EGG_BAD_PATTERNS, EGG_COVERS, EGG_PATTERNS}; use showbits_common::{ color::{self, WHITE}, widgets::{Image, Text}, @@ -14,29 +14,44 @@ use super::{Context, Drawing}; pub struct EggDrawing; -fn load_image(bytes: &[u8]) -> anyhow::Result { - Ok(image::load_from_memory(bytes)?.into_rgba8()) +fn load_image(bytes: &[u8]) -> RgbaImage { + image::load_from_memory(bytes) + .expect("malformed image data") + .into_rgba8() } impl Drawing for EggDrawing { fn draw(&self, printer: &mut Printer, ctx: &mut Context) -> anyhow::Result<()> { - // Load image data from memory - let cover = load_image(EGG_COVER)?; - let mut patterns = vec![]; - for pattern in EGG_PATTERNS { - patterns.push(load_image(pattern)?); - } + let mut rng = rand::thread_rng(); - // Prepare egg image + // Choose which set of egg images to use + let bad_egg = rng.gen_range(0..16) == 0; + let (covers, patterns) = if bad_egg { + (EGG_BAD_COVERS, EGG_BAD_PATTERNS) + } else { + (EGG_COVERS, EGG_PATTERNS) + }; + + // Load images from memory + let covers = covers.iter().map(|img| load_image(img)).collect::>(); + let patterns = patterns + .iter() + .map(|img| load_image(img)) + .collect::>(); + + // Choose a random cover + let cover = covers.choose(&mut rng).expect("too few covers"); + + // Prepare image of appropriate size let mut image = RgbaImage::from_pixel(cover.width(), cover.height(), color::to_image_color(WHITE)); // Draw patterns onto egg let mut last_idx = None; - let mut y = rand::thread_rng().gen_range(-100_i64..0); + let mut y = rng.gen_range(-100_i64..0); while y < image.height().into() { let idx = loop { - let idx = rand::thread_rng().gen_range(0..patterns.len()); + let idx = rng.gen_range(0..patterns.len()); if Some(idx) != last_idx { break idx; } @@ -49,7 +64,7 @@ impl Drawing for EggDrawing { } // Finally, draw the cover - imageops::overlay(&mut image, &cover, 0, 0); + imageops::overlay(&mut image, cover, 0, 0); let mut tree = Tree::::new(WHITE);