Browse Source

Add last and first update of frame for anims

Fred Sundvik 9 years ago
parent
commit
444132edd0
2 changed files with 11 additions and 0 deletions
  1. 9 0
      visualizer.c
  2. 2 0
      visualizer.h

+ 9 - 0
visualizer.c

@@ -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;

+ 2 - 0
visualizer.h

@@ -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;