diff --git a/src/main.rs b/src/main.rs index 904c5d0..f414c7e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -103,7 +103,7 @@ fn ligth_controll( }, Action::Stop => { render.blank(); - render.render(); + render.im_render(); break 'mainloop; }, } diff --git a/src/render.rs b/src/render.rs index f5de026..030f733 100644 --- a/src/render.rs +++ b/src/render.rs @@ -52,6 +52,11 @@ pub struct Render { local_led_config: Vec, } +struct GetRender { + data: Vec>, + delta: u128, +} + fn try_into_usize (input: Option) -> Option { if input.is_none() {return None;} @@ -230,9 +235,7 @@ impl Render { } } - pub fn render(&mut self) { - - if self.ws.is_none() { return; } + fn get_render(&mut self) -> GetRender { let mut data: Vec> = vec![RGB::default(); self.num_leds.try_into().unwrap()]; @@ -290,6 +293,21 @@ impl Render { to_clean.iter().for_each(|i| self.remove_animation(i.to_string())); + return GetRender { + data, + delta + }; + } + + pub fn render(&mut self) { + + if self.ws.is_none() { return; } + + let get_render = self.get_render(); + + let data = get_render.data; + let delta = get_render.delta; + if self.last.is_empty() || !self.last.clone().iter().eq(data.clone().iter()) { if self.last.len() == 0 { @@ -313,6 +331,31 @@ impl Render { } } + + pub fn im_render(&mut self) { + + if self.ws.is_none() { return; } + + let data = self.get_render().data; + + if self.last.is_empty() || !self.last.clone().iter().eq(data.clone().iter()) { + + if self.last.len() == 0 { + self.last = data.clone(); + } + + let to_set_data: Vec> = rgbs_f64_to_u8(&data); + + let err = self.ws.as_mut().unwrap().write(to_set_data.into_iter()); + + if err.is_err() || err.ok().is_none() { + println!("Failed to write data"); + } + + self.last = data; + } + + } } pub fn rgbs_f64_to_u8(data: &Vec>) -> Vec>{