From 9c8de5a1fa19dc0f6f48398fc3c7179d71156314 Mon Sep 17 00:00:00 2001 From: Tangent Wantwight Date: Sun, 31 Oct 2021 19:20:10 -0400 Subject: [PATCH] Add 2021 Halloween pattern --- harrogate/Cargo.toml | 1 + harrogate/src/halloween_2021.rs | 58 +++++++++++++++++++++++++++++++++ harrogate/src/main.rs | 4 +++ 3 files changed, 63 insertions(+) create mode 100644 harrogate/src/halloween_2021.rs diff --git a/harrogate/Cargo.toml b/harrogate/Cargo.toml index 89fab8c..8ff261b 100644 --- a/harrogate/Cargo.toml +++ b/harrogate/Cargo.toml @@ -22,6 +22,7 @@ valentines-2020 = ["replace-default"] st-patricks-day = ["replace-default"] july-4 = ["replace-default"] halloween-2020 = ["replace-default"] +halloween-2021 = ["replace-default"] new-years-eve-2020 = ["replace-default"] november-2020 = ["replace-default"] diff --git a/harrogate/src/halloween_2021.rs b/harrogate/src/halloween_2021.rs new file mode 100644 index 0000000..f270a8b --- /dev/null +++ b/harrogate/src/halloween_2021.rs @@ -0,0 +1,58 @@ +//! purple-and-green with "lightning" flashes +use super::delay; +use house::{Harrogate, PORCH_BACK_LEN, PORCH_FRONT_LEN}; +use lights::{murmurf, rgb::Rgb, HardwareRgb, Lights}; + +const BLACK: Rgb = Rgb(0, 0, 0); +const GREEN: Rgb = Rgb(0, 255, 0); +const LIGHTNING: Rgb = Rgb(255, 200, 50); + +const PURPLE: Rgb = Rgb(100, 0, 128); + +// tenth of a second +const TIC: u32 = 4_800_000; + +#[allow(dead_code)] +#[inline(always)] +pub fn run(lights: &mut impl Lights) -> ! { + let mut rng = 0xB00u32; + let mut back_buffer = [BLACK; PORCH_BACK_LEN]; + + let mut draw = |back_buffer: &[Rgb]| { + let front_pattern = [PURPLE].iter().cycle().cloned(); + Harrogate { + porch_front: front_pattern.take(PORCH_FRONT_LEN), + porch_back: back_buffer.iter().cloned(), + } + .render_to(lights); + }; + + loop { + // clear + back_buffer.iter_mut().for_each(|pix| *pix = GREEN); + draw(&back_buffer); + + // delay 3-15 seconds + delay(TIC * (murmurf(&mut rng) % 120 + 30)); + + // flash 1 + back_buffer.iter_mut().for_each(|pix| *pix = BLACK); + flash(&mut rng, &mut back_buffer); + draw(&back_buffer); + delay(TIC * 2); + + // flash 2 + flash(&mut rng, &mut back_buffer); + draw(&back_buffer); + delay(TIC * 3); + } +} + +fn flash(rng: &mut u32, back_buffer: &mut [Rgb]) { + let start = murmurf(rng) as usize % (PORCH_BACK_LEN - 20); + let len = murmurf(rng) as usize % 20 + murmurf(rng) as usize % 20 + 10; + let end = (start + len).min(PORCH_BACK_LEN); + back_buffer.as_mut()[start..end] + .iter_mut() + .for_each(|pix| *pix = LIGHTNING); +} diff --git a/harrogate/src/main.rs b/harrogate/src/main.rs index 82bac7f..7b044c2 100644 --- a/harrogate/src/main.rs +++ b/harrogate/src/main.rs @@ -13,6 +13,7 @@ mod valentines_2020; mod st_patricks_day; mod july_4; mod halloween_2020; +mod halloween_2021; mod november_2020; mod new_years_eve_2020; mod door_light; @@ -45,6 +46,9 @@ fn main() -> ! { #[cfg(feature = "halloween-2020")] halloween_2020::run(&mut lights); + #[cfg(feature = "halloween-2021")] + halloween_2021::run(&mut lights); + #[cfg(feature = "new-years-eve-2020")] new_years_eve_2020::run(&mut lights);