added animation event by 'any' input (click anywhere, space, enter, escape)
authorHolger Schemel <info@artsoft.org>
Sun, 23 Apr 2017 17:55:42 +0000 (19:55 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 23 Apr 2017 17:55:42 +0000 (19:55 +0200)
src/anim.c
src/events.c
src/libgame/misc.c
src/libgame/system.h

index b566bddcbc27132d458a1dbf28519f4b3aba6d78..4a6d2db01199b4a21d20590740185ed84b69ffb7 100644 (file)
@@ -936,9 +936,14 @@ static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
 {
   struct GraphicInfo *c = &part->control_info;
 
+  boolean clickable_any = FALSE;
   boolean clickable_self = FALSE;
   boolean clickable_triggered = FALSE;
 
+  if (mask & ANIM_EVENT_CLICK_ANY)
+    clickable_any = (c->init_event & ANIM_EVENT_CLICK_ANY ||
+                    c->anim_event & ANIM_EVENT_CLICK_ANY);
+
   if (mask & ANIM_EVENT_CLICK_SELF)
     clickable_self = (c->init_event & ANIM_EVENT_CLICK_SELF ||
                      c->anim_event & ANIM_EVENT_CLICK_SELF);
@@ -946,7 +951,7 @@ static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
   clickable_triggered = (matchesAnimEventMask(c->init_event, mask) ||
                         matchesAnimEventMask(c->anim_event, mask));
 
-  return (clickable_self || clickable_triggered);
+  return (clickable_any || clickable_self || clickable_triggered);
 }
 
 static boolean isClickedPart(struct GlobalAnimPartControlInfo *part,
@@ -1452,8 +1457,13 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked)
          continue;
        }
 
-       if (part->clickable &&
-           isClickedPart(part, mx, my, clicked))
+       if (!part->clickable)
+         continue;
+
+       if (isClickablePart(part, ANIM_EVENT_CLICK_ANY))
+         any_part_clicked = part->clicked = TRUE;
+
+       if (isClickedPart(part, mx, my, clicked))
        {
 #if 0
          printf("::: %d.%d CLICKED\n", anim_nr, part_nr);
index 93b135503b073c32e9a34ee79ccf5fbbcf13562a..6dbb1e7154fd6823a9e5d7ebcfaebbfb9c0830d4 100644 (file)
@@ -1703,6 +1703,15 @@ void HandleKey(Key key, int key_status)
     return;
   }
 
+  if (HandleGlobalAnimClicks(-1, -1, (key == KSYM_space ||
+                                     key == KSYM_Return ||
+                                     key == KSYM_Escape)))
+  {
+    /* do not handle this key event anymore */
+    if (key != KSYM_Escape)    /* always allow ESC key to be handled */
+      return;
+  }
+
   if (game_status == GAME_MODE_PLAYING && AllPlayersGone &&
       (key == KSYM_Return || key == setup.shortcut.toggle_pause))
   {
@@ -1957,6 +1966,12 @@ void HandleJoystick()
   int dx       = (left ? -1    : right ? 1     : 0);
   int dy       = (up   ? -1    : down  ? 1     : 0);
 
+  if (HandleGlobalAnimClicks(-1, -1, newbutton))
+  {
+    /* do not handle this button event anymore */
+    return;
+  }
+
   switch (game_status)
   {
     case GAME_MODE_TITLE:
index 4c1f5683c67175dc0641771d72ddee2bdeed337e..470fc057c171ed428d309b38b30ab0d80f6ff67a 100644 (file)
@@ -2859,6 +2859,9 @@ int get_parameter_value(char *value_raw, char *suffix, int type)
   {
     result = ANIM_EVENT_DEFAULT;
 
+    if (string_has_parameter(value, "any"))
+      result |= ANIM_EVENT_CLICK_ANY;
+
     if (string_has_parameter(value, "click"))
       result |= ANIM_EVENT_CLICK_SELF;
 
index 406a6f364672ec6d241d0259328999d78eccd0a6..b214ba752733cc58ea9ffbc94797c577b4f9df61 100644 (file)
 #define ANIM_EVENT_CLICK_PART_7        (1 << 14)
 #define ANIM_EVENT_CLICK_PART_8        (1 << 15)
 #define ANIM_EVENT_CLICK_SELF  (1 << 16)
+#define ANIM_EVENT_CLICK_ANY   (1 << 17)
 
 #define ANIM_EVENT_CLICK_ANIM_ALL      (ANIM_EVENT_CLICK_ANIM_1 |      \
                                          ANIM_EVENT_CLICK_ANIM_2 |     \