1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#[derive(Debug)] pub enum Interpolation { Step = 0, Linear = 1, Smooth = 2, Ramp = 3, } impl From<u8> for Interpolation { fn from(raw: u8) -> Interpolation { match raw { 0 => Interpolation::Step, 1 => Interpolation::Linear, 2 => Interpolation::Smooth, 3 => Interpolation::Ramp, _ => Interpolation::Step, } } } impl Interpolation { pub fn interpolate(&self, t: f32) -> f32 { match self { &Interpolation::Step => 0.0, &Interpolation::Linear => t, &Interpolation::Smooth => t * t * (3.0 - 2.0 * t), &Interpolation::Ramp => t.powi(2), } } }