fixed bug with triggering global animations in certain cases
authorHolger Schemel <info@artsoft.org>
Tue, 14 Nov 2023 22:51:53 +0000 (23:51 +0100)
committerHolger Schemel <info@artsoft.org>
Wed, 15 Nov 2023 10:39:39 +0000 (11:39 +0100)
This fixes a bug that prevents global animations (that have defined
an initial (start) event using ".init_event") from being triggered by
other animation states or by custom element changes if they have
either no parts defined (like "global.anim_1"), or if they have parts
defined (like "global.anim_1.part_1"), but have the "main" animation
defined to play all parts at the same time (which means that there is
a definition "global.anim_1.anim_mode: all").

This bug was caused by the fact that animations waiting for an initial
event should be in state "waiting", which was not checked in case of
an event (as parts defined for global animations that are not defined
to be played all at the same time are in state "running" even if they
are waiting for an initial event, which should also be fixed).

src/anim.c

index 4f1034eb35d43b4251d97332dafced2b574f0823..7ecdf8fdc04d9aeadd06f7bbb6c0ef639016623b 100644 (file)
@@ -1394,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))
@@ -1457,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)