From 393f7aa8914a40a09233f5fa389fee657ae11a68 Mon Sep 17 00:00:00 2001 From: Michael Sippel Date: Sat, 27 Apr 2024 11:30:10 +0200 Subject: [PATCH] more patterns --- src/main.rs | 89 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index adb4d31..9fc4771 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,7 +30,7 @@ use crate::{ #[derive(Clone)] -struct Inputs { +pub struct Inputs { t: Duration, transition_time: Duration, @@ -39,7 +39,7 @@ struct Inputs { intensity: f32, cycle_len: Duration, - wave_peak: f32, + wave_peak: f32 } @@ -57,11 +57,11 @@ impl ColorGrid for Breathing { let mirrorphi = if phi < 0.5 { phi } else { 1.0-phi }; let gamma = ( - (30.0) * + (5.0) * mirrorphi * ( 0.5+ 0.5*f32::sin( - inputs.t.as_millis() as f32 + inputs.t.as_millis() as f32 / inputs.cycle_len.as_millis() as f32 ) ) @@ -76,9 +76,8 @@ impl ColorGrid for Breathing { ) } } - -struct Anim2 { inputs: Arc> } -impl ColorGrid for Anim2 { +struct PastelFade { inputs: Arc> } +impl ColorGrid for PastelFade { fn get(&self, p: &Vector2) -> Rgb { let inputs = self.inputs.read().unwrap().clone(); // let millis = self @@ -95,6 +94,60 @@ impl ColorGrid for Anim2 { } } +struct UbootPrüfstandFade { inputs: Arc> } +impl ColorGrid for UbootPrüfstandFade { + fn get(&self, p: &Vector2) -> Rgb { + let inputs = self.inputs.read().unwrap().clone(); +// let millis = self + + let i = ( inputs.t.as_millis() as f32 / (4.0*inputs.cycle_len.as_millis() as f32) ) % 1.0; + + let pi2 = 2.0 * 3.1415926; + + let col1 = + Rgb::from_color( + &Hsv::>::new( + Turns( 0.65 ), + 0.9, + 0.5 + 0.5*f32::sin(i*pi2),//(4.0*i) %1.0 + ) + ); + + let col2 = Rgb::new(0.5+0.5*f32::sin(i*pi2), 0.0, 0.0); + + let p = ( inputs.t.as_millis() as f32 / (32.0*inputs.cycle_len.as_millis() as f32)) % 1.0; + if p >= 0.7 { + col2 + } else { + col1 + } + } +} + +struct ArcticRain { inputs: Arc> } +impl ColorGrid for ArcticRain { + fn get(&self, p: &Vector2) -> Rgb { + let inputs = self.inputs.read().unwrap().clone(); +// let millis = self + + let i = ( inputs.t.as_millis() as f32 / (4.0*inputs.cycle_len.as_millis() as f32) ) % 1.0; + + let pi2 = 2.0 * 3.1415926; + + let col1 = + Rgb::from_color( + &Hsv::>::new( + Turns( 0.65 ), + 0.9, + 1.0 - ((i + (2.0-p.y/4.0)) * 12.0) % 1.0, +// (f32::sin(-p.y+i) * 12.0) % 1.0, + ) + ); + + col1 + } +} + enum Waveform { Sawtooth{ pulse_width: Duration }, Square{ }, @@ -144,7 +197,9 @@ impl SceneLibrary { Box::new( Strobe{ inputs: inputs.clone(), subdivision: 16 } ), // others - Box::new( Anim2{ inputs: inputs.clone() } ), + Box::new( PastelFade{ inputs: inputs.clone() } ), + Box::new( UbootPrüfstandFade{ inputs: inputs.clone() } ), + Box::new( ArcticRain{ inputs: inputs.clone() } ), ], current_scene: RwLock::new(0), inputs, @@ -217,7 +272,7 @@ async fn main() { // .with_driver( Box::new(MatrixTcpDriver::new("ip:port")) ), Fixture::new_stripe() -// .with_driver( Box::new(StripeDriver::new("192.168.0.111:4210", socket.clone())) ) + .with_driver( Box::new(StripeDriver::new("192.168.0.111:4210", socket.clone())) ) .offset(Vector2::new(-0.5, 0.0)), Fixture::new_stripe() @@ -225,7 +280,7 @@ async fn main() { .offset(Vector2::new(-0.4, 0.0)), Fixture::new_stripe() -// .with_driver( Box::new(StripeDriver::new("192.168.0.113:4210", socket.clone())) ) + .with_driver( Box::new(StripeDriver::new("192.168.0.113:4210", socket.clone())) ) .offset(Vector2::new(0.4, 0.0)), Fixture::new_stripe() @@ -249,7 +304,7 @@ async fn main() { inputs.write().unwrap().t = tcur - tbegin; inputs.write().unwrap().transition_time = tcur - transition_begin; lighting_setup.update_buffers(); - //lighting_setup.update_outputs(); + lighting_setup.update_outputs(); match event { Event::WindowEvent { window_id, event: WindowEvent::RedrawRequested } if window_id == window.id() => { @@ -313,6 +368,18 @@ async fn main() { inputs.write().unwrap().scene_select = 4; transition_begin = std::time::Instant::now(); } + "5" => { + inputs.write().unwrap().scene_select = 5; + transition_begin = std::time::Instant::now(); + }, + "6" => { + inputs.write().unwrap().scene_select = 6; + transition_begin = std::time::Instant::now(); + } + "7" => { + inputs.write().unwrap().scene_select = 7; + transition_begin = std::time::Instant::now(); + } _=>{} }