fixed state of global animation parts waiting for initial event
[rocksndiamonds.git] / src / anim.c
index 1f22861eee75de90f9ecf2558bacbf9603e9588f..222369e1abb3b0c364e6198dfae4f23bae4256b8 100644 (file)
@@ -1271,8 +1271,7 @@ static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
        return TRUE;
     }
   }
-
-  if (part->anim_event_state)
+  else if (part->anim_event_state)
   {
     int num_anim_events = GetGlobalAnimEventValueCount(c->anim_event);
 
@@ -1395,7 +1394,7 @@ static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part,
     {
       struct GlobalAnimPartControlInfo *part2 = &anim2->part[part2_nr];
 
-      if (!(part2->state & ANIM_STATE_RUNNING))
+      if (!(part2->state & (ANIM_STATE_RUNNING | ANIM_STATE_WAITING)))
        continue;
 
       if (isClickablePart(part2, mask))
@@ -1458,7 +1457,7 @@ static void InitGlobalAnim_Triggered_ByCustomElement(int nr, int page,
     {
       struct GlobalAnimPartControlInfo *part2 = &anim2->part[part2_nr];
 
-      if (!(part2->state & ANIM_STATE_RUNNING))
+      if (!(part2->state & (ANIM_STATE_RUNNING | ANIM_STATE_WAITING)))
        continue;
 
       if (isClickablePart(part2, mask) && !part2->triggered)
@@ -1935,9 +1934,13 @@ static void HandleGlobalAnim_Main(struct GlobalAnimMainControlInfo *anim,
   for (i = 0; i < num_parts; i++)
     anim->part[i].state = ANIM_STATE_INACTIVE;
 
-  // ... then set current animation parts to "running"
+  // ... then set current animation part to "running" ...
   part->state = ANIM_STATE_RUNNING;
 
+  // ... unless it is waiting for an initial event
+  if (part->init_event_state)
+    part->state = ANIM_STATE_WAITING;
+
   anim->state = HandleGlobalAnim_Part(part, anim->state);
 
   if (anim->state & ANIM_STATE_RESTART)