finished lerp
This commit is contained in:
parent
8e615a31d1
commit
fbfbd232a9
@ -3,7 +3,7 @@ use ws281x_rpi::Ws2812Rpi;
|
||||
use crate::{DBPool, animations::Animation};
|
||||
|
||||
use std::error::Error;
|
||||
use smart_leds::{RGB8, SmartLedsWrite};
|
||||
use smart_leds::{RGB8, SmartLedsWrite, RGB};
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
@ -277,17 +277,33 @@ impl Render {
|
||||
|
||||
if self.last.is_empty() || !self.last.clone().iter().eq(data.clone().iter()) {
|
||||
|
||||
let lerp_data = data.iter().zip(self.last).map(|(d, l)| d - ((l - d) * 0.2));
|
||||
let lerp_data: Vec<RGB<u8>> = data.iter().zip(&self.last).map(|(d, l)| d.lerp(l)).collect();
|
||||
|
||||
let err = self.ws.as_mut().unwrap().write(data.clone().into_iter());
|
||||
let err = self.ws.as_mut().unwrap().write(lerp_data.clone().into_iter());
|
||||
|
||||
if err.is_err() || err.ok().is_none() {
|
||||
println!("Failed to write data");
|
||||
}
|
||||
|
||||
self.last = data;
|
||||
self.last = lerp_data;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
trait Lerp {
|
||||
fn lerp(self, other: &Self) -> Self;
|
||||
}
|
||||
|
||||
impl Lerp for u8 {
|
||||
fn lerp(self, other: &Self) -> Self {
|
||||
((self as f64) + (((*other as f64) - (self as f64)) * 0.2)) as u8
|
||||
}
|
||||
}
|
||||
|
||||
impl Lerp for RGB<u8> {
|
||||
fn lerp(self, other: &Self) -> Self {
|
||||
RGB::new(self.r.lerp(&other.r), self.g.lerp(&other.g), self.b.lerp(&other.b))
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user