#[cfg(feature = "f32")]
mod f32;
#[cfg(feature = "f32")]
pub use self::f32::*;
#[cfg(feature = "f64")]
mod f64;
#[cfg(feature = "f64")]
pub use self::f64::*;
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
pub enum Declicker {
SettledAt0,
#[default]
SettledAt1,
FadingTo0 {
frames_left: usize,
},
FadingTo1 {
frames_left: usize,
},
}
impl Declicker {
pub fn from_enabled(enabled: bool) -> Self {
if enabled {
Self::SettledAt1
} else {
Self::SettledAt0
}
}
pub fn has_settled(&self) -> bool {
*self == Self::SettledAt0 || *self == Self::SettledAt1
}
pub fn disabled(&self) -> bool {
*self == Self::SettledAt0
}
pub fn reset_to_target(&mut self) {
*self = match &self {
Self::FadingTo0 { .. } => Self::SettledAt0,
Self::FadingTo1 { .. } => Self::SettledAt1,
s => **s,
}
}
pub fn reset_to_0(&mut self) {
*self = Self::SettledAt0;
}
pub fn reset_to_1(&mut self) {
*self = Self::SettledAt1;
}
pub fn trending_towards_zero(&self) -> bool {
match self {
Declicker::SettledAt0 | Declicker::FadingTo0 { .. } => true,
_ => false,
}
}
pub fn trending_towards_one(&self) -> bool {
match self {
Declicker::SettledAt1 | Declicker::FadingTo1 { .. } => true,
_ => false,
}
}
pub fn frames_left(&self) -> usize {
match *self {
Declicker::FadingTo0 { frames_left } => frames_left,
Declicker::FadingTo1 { frames_left } => frames_left,
_ => 0,
}
}
}