9 using EaseCb = std::function<void (float)>;
12 T ease(T _start, T _end, float _t, EaseType _e) {
15 case EaseType::cubic: f = (-2 * f + 3) * f * f; break;
16 case EaseType::quint: f = (6 * f * f - 15 * f + 10) * f * f * f; break;
17 case EaseType::sine: f = 0.5 - 0.5 * cos(M_PI * f); break;
20 return _start + (_end - _start) * f;
28 Ease() : t(0), d(0), cb([](float) {}) {}
29 Ease(float _duration, EaseCb _cb) : t(-1), d(_duration), cb(_cb) {}
31 bool finished() const { return t >= d; }
33 void update(float _dt) {
34 t = t < 0 ? 0 : std::fmin(t + _dt, d);
35 cb(std::fmin(1, t / d));