1 module animate.animate.interpolator; 2 3 import std.math; 4 5 interface Interpolator 6 { 7 /+ 8 + This takes a value from 0 to 1, and 9 + returns an interpolated value from 0 to 1 10 + based on the type of curve desired. 11 +/ 12 double interpolate(double progress) 13 in 14 { 15 assert(progress >= 0 && progress <= 1); 16 } 17 out 18 { 19 assert(progress >= 0 && progress <= 1); 20 } 21 } 22 23 class LinearInterpolator : Interpolator 24 { 25 double interpolate(double progress) 26 { 27 return progress; 28 } 29 } 30 31 class CosineInterpolator : Interpolator 32 { 33 double interpolate(double progress) 34 { 35 return cos(PI * 2 * progress); 36 } 37 } 38 39 class SineInterpolator : Interpolator 40 { 41 double interpolate(double progress) 42 { 43 return sin(PI * 2 * progress); 44 } 45 } 46 47 class AccelerationInterpolator : Interpolator 48 { 49 double interpolate(double progress) 50 { 51 return progress * progress; 52 } 53 } 54 55 class DecelerationInterpolator : Interpolator 56 { 57 double interpolate(double progress) 58 { 59 return 1.0 - (1.0 - progress)^^2; 60 } 61 } 62 63 class AccelerationDecelerationInterpolator : Interpolator 64 { 65 double interpolate(double progress) 66 { 67 return ((cos(progress + 1) * PI) / 2.0) + .5; 68 } 69 }