fixed bug when handling init and anim events for global animations
authorHolger Schemel <info@artsoft.org>
Sun, 20 Aug 2023 11:53:24 +0000 (13:53 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 3 Sep 2023 20:59:58 +0000 (22:59 +0200)
Before, defining ".init_event" as "click:anim_X" and ".anim_event" as
"click" resulted in the global animation being started by clicking
global animation "anim_X" (which is correct), but resulted in stopping
it by clicking the animation itself (which is correct), but also by
clicking global animation "anim_X" (which is not correct).

src/anim.c

index 219c79fd4c97b88ff074a77db45fee1052a25672..a20ee4a3153c7881e9235b6c852f448a2ff83976 100644 (file)
@@ -1210,24 +1210,32 @@ static boolean checkGlobalAnimEvent(int anim_event, int mask)
 static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
 {
   struct GraphicInfo *c = &part->control_info;
-  int num_init_events = GetGlobalAnimEventValueCount(c->init_event);
-  int num_anim_events = GetGlobalAnimEventValueCount(c->anim_event);
   int i;
 
-  for (i = 0; i < num_init_events; i++)
+  if (part->init_event_state)
   {
-    int init_event = GetGlobalAnimEventValue(c->init_event, i);
+    int num_init_events = GetGlobalAnimEventValueCount(c->init_event);
+
+    for (i = 0; i < num_init_events; i++)
+    {
+      int init_event = GetGlobalAnimEventValue(c->init_event, i);
 
-    if (checkGlobalAnimEvent(init_event, mask))
-      return TRUE;
+      if (checkGlobalAnimEvent(init_event, mask))
+       return TRUE;
+    }
   }
 
-  for (i = 0; i < num_anim_events; i++)
+  if (part->anim_event_state)
   {
-    int anim_event = GetGlobalAnimEventValue(c->anim_event, i);
+    int num_anim_events = GetGlobalAnimEventValueCount(c->anim_event);
 
-    if (checkGlobalAnimEvent(anim_event, mask))
-      return TRUE;
+    for (i = 0; i < num_anim_events; i++)
+    {
+      int anim_event = GetGlobalAnimEventValue(c->anim_event, i);
+
+      if (checkGlobalAnimEvent(anim_event, mask))
+       return TRUE;
+    }
   }
 
   return FALSE;