7#include "hires_utc_clock.hpp"
8#include "algorithm.hpp"
11#include "concepts.hpp"
33 if (not initialized) {
35 _old_value = new_value;
36 _new_value = new_value;
37 _start_time = current_time;
39 }
else if (new_value != _new_value) {
40 _old_value = _new_value;
41 _new_value = new_value;
42 _start_time = current_time;
44 _current_time = current_time;
51 tt_axiom(initialized);
52 return progress() < 1.0f;
58 tt_axiom(initialized);
59 return std::lerp(_old_value, _new_value, progress());
63 value_type _old_value;
64 value_type _new_value;
68 bool initialized =
false;
70 float progress() const noexcept
72 ttlet dt = _current_time - _start_time;
73 ttlet p =
static_cast<float>(dt / 1ms) /
static_cast<float>(_animation_duration / 1ms);
74 return std::clamp(p, 0.0f, 1.0f);
A type that gets animated between two values.
Definition animator.hpp:18
void update(value_type new_value, hires_utc_clock::time_point current_time) noexcept
Update the value and time.
Definition animator.hpp:31
bool is_animating() const noexcept
Check if the animation is currently running.
Definition animator.hpp:49
animator(hires_utc_clock::duration animation_duration) noexcept
Constructor.
Definition animator.hpp:25
value_type current_value() const noexcept
The interpolated value between start and end value.
Definition animator.hpp:57