added "passthrough" option for clickable global animations
[rocksndiamonds.git] / src / anim.c
index d1ae06a105391ab6b4deda15d2199ce6ec1279fa..0a4946a2a1da9a739a0c80f44f8edf0690d82efb 100644 (file)
@@ -1003,6 +1003,13 @@ static boolean isClickedPart(struct GlobalAnimPartControlInfo *part,
   return TRUE;
 }
 
+static boolean setPartClicked(struct GlobalAnimPartControlInfo *part)
+{
+  part->clicked = TRUE;
+
+  return (part->control_info.style & STYLE_PASSTHROUGH ? FALSE : TRUE);
+}
+
 int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state)
 {
   struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[part->mode_nr];
@@ -1510,7 +1517,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked)
 
        // always handle "any" click events (clicking anywhere on screen) ...
        if (isClickablePart(part, ANIM_EVENT_ANY))
-         anything_clicked = part->clicked = TRUE;
+         anything_clicked = setPartClicked(part);
 
        // ... but only handle the first (topmost) clickable animation
        if (any_part_clicked)
@@ -1530,7 +1537,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked)
          any_part_clicked = TRUE;
 
          if (isClickablePart(part, ANIM_EVENT_SELF))
-           anything_clicked = part->clicked = TRUE;
+           anything_clicked = setPartClicked(part);
 
          // check if this click is defined to trigger other animations
          int gic_anim_nr = part->old_anim_nr + 1;      // X as in "anim_X"
@@ -1556,7 +1563,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked)
 
              if (isClickablePart(part2, mask))
              {
-               anything_clicked = part2->clicked = TRUE;
+               setPartClicked(part2);
 
 #if 0
                printf("::: %d.%d TRIGGER CLICKED [%d]\n", anim2_nr, part2_nr,