mirror of
https://github.com/qmk/qmk_firmware
synced 2024-11-11 22:44:56 +00:00
Add last and first update of frame for anims
This commit is contained in:
parent
0e0488623e
commit
444132edd0
2 changed files with 11 additions and 0 deletions
|
@ -103,6 +103,8 @@ void stop_keyframe_animation(keyframe_animation_t* animation) {
|
||||||
animation->current_frame = animation->num_frames;
|
animation->current_frame = animation->num_frames;
|
||||||
animation->time_left_in_frame = 0;
|
animation->time_left_in_frame = 0;
|
||||||
animation->need_update = true;
|
animation->need_update = true;
|
||||||
|
animation->first_update_of_frame = false;
|
||||||
|
animation->last_update_of_frame = false;
|
||||||
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
|
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
|
||||||
if (animations[i] == animation) {
|
if (animations[i] == animation) {
|
||||||
animations[i] = NULL;
|
animations[i] = NULL;
|
||||||
|
@ -117,6 +119,8 @@ void stop_all_keyframe_animations(void) {
|
||||||
animations[i]->current_frame = animations[i]->num_frames;
|
animations[i]->current_frame = animations[i]->num_frames;
|
||||||
animations[i]->time_left_in_frame = 0;
|
animations[i]->time_left_in_frame = 0;
|
||||||
animations[i]->need_update = true;
|
animations[i]->need_update = true;
|
||||||
|
animations[i]->first_update_of_frame = false;
|
||||||
|
animations[i]->last_update_of_frame = false;
|
||||||
animations[i] = NULL;
|
animations[i] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,16 +137,20 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize
|
||||||
animation->current_frame = 0;
|
animation->current_frame = 0;
|
||||||
animation->time_left_in_frame = animation->frame_lengths[0];
|
animation->time_left_in_frame = animation->frame_lengths[0];
|
||||||
animation->need_update = true;
|
animation->need_update = true;
|
||||||
|
animation->first_update_of_frame = true;
|
||||||
} else {
|
} else {
|
||||||
animation->time_left_in_frame -= delta;
|
animation->time_left_in_frame -= delta;
|
||||||
while (animation->time_left_in_frame <= 0) {
|
while (animation->time_left_in_frame <= 0) {
|
||||||
int left = animation->time_left_in_frame;
|
int left = animation->time_left_in_frame;
|
||||||
if (animation->need_update) {
|
if (animation->need_update) {
|
||||||
animation->time_left_in_frame = 0;
|
animation->time_left_in_frame = 0;
|
||||||
|
animation->last_update_of_frame = true;
|
||||||
(*animation->frame_functions[animation->current_frame])(animation, state);
|
(*animation->frame_functions[animation->current_frame])(animation, state);
|
||||||
|
animation->last_update_of_frame = false;
|
||||||
}
|
}
|
||||||
animation->current_frame++;
|
animation->current_frame++;
|
||||||
animation->need_update = true;
|
animation->need_update = true;
|
||||||
|
animation->first_update_of_frame = true;
|
||||||
if (animation->current_frame == animation->num_frames) {
|
if (animation->current_frame == animation->num_frames) {
|
||||||
if (animation->loop) {
|
if (animation->loop) {
|
||||||
animation->current_frame = 0;
|
animation->current_frame = 0;
|
||||||
|
@ -159,6 +167,7 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize
|
||||||
}
|
}
|
||||||
if (animation->need_update) {
|
if (animation->need_update) {
|
||||||
animation->need_update = (*animation->frame_functions[animation->current_frame])(animation, state);
|
animation->need_update = (*animation->frame_functions[animation->current_frame])(animation, state);
|
||||||
|
animation->first_update_of_frame = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wanted_sleep = animation->need_update ? 10 : animation->time_left_in_frame;
|
int wanted_sleep = animation->need_update ? 10 : animation->time_left_in_frame;
|
||||||
|
|
|
@ -95,6 +95,8 @@ typedef struct keyframe_animation_t {
|
||||||
// keyframe update functions
|
// keyframe update functions
|
||||||
int current_frame;
|
int current_frame;
|
||||||
int time_left_in_frame;
|
int time_left_in_frame;
|
||||||
|
bool first_update_of_frame;
|
||||||
|
bool last_update_of_frame;
|
||||||
bool need_update;
|
bool need_update;
|
||||||
|
|
||||||
} keyframe_animation_t;
|
} keyframe_animation_t;
|
||||||
|
|
Loading…
Reference in a new issue