fixed one-frame delay when global animations leave "init" state
authorHolger Schemel <info@artsoft.org>
Sun, 20 Aug 2023 14:36:36 +0000 (16:36 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 3 Sep 2023 20:59:58 +0000 (22:59 +0200)
This fixes a bug for global animations which either have an initial
delay or an initial event defined, causing a delay of one screen frame
after the initial waiting state has ended and before the running state
(which displays the global animation) is started.

This can especially be visible if a changing CE is graphically replaced
with a global animation triggered by the CE change.

src/anim.c

index c1fb1ee6c2fd5a2efdd7fab4d3b64b76d44e878c..de94b17f88abb50a3a3fc41ce4e0c4e1c27accde 100644 (file)
@@ -1598,7 +1598,7 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part,
     if (part->initial_anim_sync_frame > 0)
     {
       if (part->init_delay_counter > 0)
-       part->initial_anim_sync_frame -= part->init_delay_counter - 1;
+       part->initial_anim_sync_frame -= part->init_delay_counter;
       else
        part->initial_anim_sync_frame = anim_sync_frame;
     }
@@ -1630,9 +1630,13 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part,
 
       HandleGlobalAnimDelay(part, ANIM_DELAY_INIT,  "START [INIT_DELAY]");
       HandleGlobalAnimEvent(part, ANIM_EVENT_START, "START [ANIM]");
-    }
 
-    return ANIM_STATE_WAITING;
+      // continue with state ANIM_STATE_RUNNING (set below)
+    }
+    else
+    {
+      return ANIM_STATE_WAITING;
+    }
   }
 
   if (part->init_event_state)