12 constexpr
float kPi = 3.14159265358979323846f;
13 constexpr
float kPi2 = kPi / 2.f;
40 return -(p * (p - 2.f));
47 return p < 0.5f ? 2.f * p * p : (-2.f * p * p) + (4.f * p) - 1.f;
57 const float f = (p - 1.f);
58 return f * f * f + 1.f;
66 return 4.f * p * p * p;
68 const float f = ((2.f * p) - 2.f);
69 return 0.5f * f * f * f + 1.f;
79 const float f = (p - 1.f);
80 return f * f * f * (1.f - p) + 1.f;
88 return 8.f * p * p * p * p;
90 const float f = (p - 1.f);
91 return -8.f * f * f * f * f + 1.f;
96 return p * p * p * p * p;
101 const float f = (p - 1.f);
102 return f * f * f * f * f + 1.f;
110 return 16.f * p * p * p * p * p;
112 const float f = ((2.f * p) - 2.f);
113 return 0.5f * f * f * f * f * f + 1.f;
118 return std::sin((p - 1.f) * kPi2) + 1.f;
123 return std::sin(p * kPi2);
128 return 0.5f * (1.f - std::cos(p * kPi));
133 return 1.f - std::sqrt(1.f - (p * p));
138 return std::sqrt((2.f - p) * p);
146 return 0.5f * (1.f - std::sqrt(1.f - 4.f * (p * p)));
148 return 0.5f * (std::sqrt(-((2.f * p) - 3.f) * ((2.f * p) - 1.f)) + 1.f);
153 return (p == 0.f) ? p : std::pow(2.f, 10.f * (p - 1.f));
158 return (p == 1.f) ? p : 1.f - std::pow(2.f, -10.f * p);
165 if (p == 0.f || p == 1.f) {
170 return 0.5f * std::pow(2.f, (20.f * p) - 10.f);
172 return -0.5f * std::pow(2.f, (-20.f * p) + 10.f) + 1.f;
178 return std::sin(13.f * kPi2 * p) * std::pow(2.f, 10.f * (p - 1.f));
185 return std::sin(-13.f * kPi2 * (p + 1.f)) * std::pow(2.f, -10.f * p) + 1.f;
193 return 0.5f * std::sin(13.f * kPi2 * (2.f * p)) *
194 std::pow(2.f, 10.f * ((2.f * p) - 1.f));
196 return 0.5f * (std::sin(-13.f * kPi2 * ((2.f * p - 1.f) + 1.f)) *
197 std::pow(2.f, -10.f * (2.f * p - 1.f)) +
203 return p * p * p - p * std::sin(p * kPi);
208 const float f = (1.f - p);
209 return 1.f - (f * f * f - f * std::sin(f * kPi));
217 const float f = 2.f * p;
218 return 0.5f * (f * f * f - f * std::sin(f * kPi));
220 const float f = (1.f - (2.f * p - 1.f));
221 return 0.5f * (1.f - (f * f * f - f * std::sin(f * kPi))) + 0.5f;
229 if (p < 4.f / 11.f) {
230 return (121.f * p * p) / 16.f;
233 if (p < 8.f / 11.f) {
234 return (363.f / 40.f * p * p) - (99.f / 10.f * p) + 17.f / 5.f;
237 if (p < 9.f / 10.f) {
238 return (4356.f / 361.f * p * p) - (35442.f / 1805.f * p) + 16061.f / 1805.f;
241 return (54.f / 5.f * p * p) - (513 / 25.f * p) + 268 / 25.f;
248 return 0.5f *
BounceOut(p * 2.f - 1.f) + 0.5f;
262 easing_function_(std::move(easing_function)),
270 if (current_ >= duration_) {
278 *value_ = from_ + (to_ - from_) * easing_function_(current_ / duration_);
Animator(float *from, float to=0.f, Duration duration=std::chrono::milliseconds(250), easing::Function easing_function=easing::Linear, Duration delay=std::chrono::milliseconds(0))
void OnAnimation(Params &)
Duration duration() const
The duration this animation step represents.
float CircularInOut(float p)
float BounceInOut(float p)
float CubicInOut(float p)
float Linear(float p)
Modeled after the line y = x.
float CircularOut(float p)
float ExponentialInOut(float p)
float ElasticInOut(float p)
float QuarticInOut(float p)
float QuadraticInOut(float p)
float QuarticOut(float p)
float CircularIn(float p)
float ExponentialOut(float p)
float QuadraticOut(float p)
float QuinticOut(float p)
float QuadraticIn(float p)
Modeled after the parabola y = x^2.
float ExponentialIn(float p)
float ElasticOut(float p)
std::function< float(float)> Function
float QuinticInOut(float p)
std::chrono::duration< float > Duration
void RequestAnimationFrame()