|
|
@ -103,6 +103,8 @@ void stop_keyframe_animation(keyframe_animation_t* animation) { |
|
|
|
animation->current_frame = animation->num_frames; |
|
|
|
animation->time_left_in_frame = 0; |
|
|
|
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++) { |
|
|
|
if (animations[i] == animation) { |
|
|
|
animations[i] = NULL; |
|
|
@ -117,6 +119,8 @@ void stop_all_keyframe_animations(void) { |
|
|
|
animations[i]->current_frame = animations[i]->num_frames; |
|
|
|
animations[i]->time_left_in_frame = 0; |
|
|
|
animations[i]->need_update = true; |
|
|
|
animations[i]->first_update_of_frame = false; |
|
|
|
animations[i]->last_update_of_frame = false; |
|
|
|
animations[i] = NULL; |
|
|
|
} |
|
|
|
} |
|
|
@ -133,16 +137,20 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize |
|
|
|
animation->current_frame = 0; |
|
|
|
animation->time_left_in_frame = animation->frame_lengths[0]; |
|
|
|
animation->need_update = true; |
|
|
|
animation->first_update_of_frame = true; |
|
|
|
} else { |
|
|
|
animation->time_left_in_frame -= delta; |
|
|
|
while (animation->time_left_in_frame <= 0) { |
|
|
|
int left = animation->time_left_in_frame; |
|
|
|
if (animation->need_update) { |
|
|
|
animation->time_left_in_frame = 0; |
|
|
|
animation->last_update_of_frame = true; |
|
|
|
(*animation->frame_functions[animation->current_frame])(animation, state); |
|
|
|
animation->last_update_of_frame = false; |
|
|
|
} |
|
|
|
animation->current_frame++; |
|
|
|
animation->need_update = true; |
|
|
|
animation->first_update_of_frame = true; |
|
|
|
if (animation->current_frame == animation->num_frames) { |
|
|
|
if (animation->loop) { |
|
|
|
animation->current_frame = 0; |
|
|
@ -159,6 +167,7 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize |
|
|
|
} |
|
|
|
if (animation->need_update) { |
|
|
|
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; |
|
|
|