64 {
65 uint32_t elapsed_time;
66 bool looped;
67
68 if (frames().empty()) {
69 return false;
70 }
71
72 if ((bool)frames().at(current_frame()).second) {
74 set_current_frame(current_frame() +
75 elapsed_time / frames().at(current_frame()).second);
76 _remaining_time = elapsed_time % frames().at(current_frame()).second;
77 } else {
78 set_current_frame(current_frame() + 1);
79 _remaining_time = 0;
80 }
81
82 looped = frames().size() <= current_frame();
83 if (looped) {
84 set_current_frame(current_frame() % frames().size());
85 }
86
87 targets().erase(
88 std::remove_if(targets().begin(), targets().end(),
89 [&](std::weak_ptr<animatable> const& target) -> bool {
90 std::shared_ptr<animatable> locked;
91
92 locked = target.lock();
93 if (locked) {
94 if (locked->animated()) {
95 locked->set_texture(
96 frames().at(current_frame()).first);
97 }
98 return false;
99 }
100
101 return true;
102 }),
103 targets().end());
104
105 return looped;
106}
static float delta_time()
Gets the current delta time in milliseconds.