use crate::*;
use std::ops::Range;
#[derive(Clone, Debug, PartialEq, Hash, Default)]
#[cfg_attr(feature = "rkyv", derive(Archive, RkyvSerialize, RkyvDeserialize))]
pub struct Shutter {
pub range: Range<Time>,
pub opening: Range<Time>,
}
impl Shutter {
#[inline]
pub fn opening(&self, pos: Time) -> f32 {
if pos < self.opening.start {
f32::from(pos) / f32::from(self.opening.start)
} else {
1.0f32 - f32::from(pos - self.opening.end) / f32::from(self.opening.end)
}
}
#[inline]
pub fn evaluate(&self, pos: f32) -> Time {
self.range.start.lerp(self.range.end, pos as _)
}
#[inline]
pub fn center(&self) -> Time {
(self.range.start + self.range.end) * 0.5
}
}
impl Eq for Shutter {}