moved flag for mouse click events from level to game structure
authorHolger Schemel <info@artsoft.org>
Mon, 20 Apr 2020 21:12:06 +0000 (23:12 +0200)
committerHolger Schemel <info@artsoft.org>
Tue, 19 May 2020 16:21:18 +0000 (18:21 +0200)
Without this change, click events for newly built levels that are
started from the level editor, but that are not yet saved, are not
recognized and not handled (because the corresponding flag was set
only when loading a level).

src/events.c
src/files.c
src/game.c
src/game.h
src/main.h

index 2b55372054f61a8479e66ccb911cbb7ed77dae75..2f5589fee711f23ae7cc8014138db14759f1e28b 100644 (file)
@@ -1375,7 +1375,7 @@ static void HandleButtonOrFinger(int mx, int my, int button)
   {
     if (strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER))
       HandleButtonOrFinger_FollowFinger(mx, my, button);
-    else if (level.has_mouse_events && valid_mouse_event)
+    else if (game.use_mouse_events && valid_mouse_event)
       SetPlayerMouseAction(mx, my, button);
   }
 }
index fa807e8f323dd0161959467fb6553ca5a703da52..54835e281f2136a93ba98abcf09ad7b074e122c8 100644 (file)
@@ -1733,9 +1733,6 @@ static void setLevelInfoToDefaults_Level(struct LevelInfo *level)
   // set all bug compatibility flags to "false" => do not emulate this bug
   level->use_action_after_change_bug = FALSE;
 
-  // other flags that may be set due to certain level properties
-  level->has_mouse_events = FALSE;
-
   if (leveldir_current)
   {
     // try to determine better author name than 'anonymous'
@@ -6564,18 +6561,6 @@ static void LoadLevel_InitCustomElements(struct LevelInfo *level)
       element_info[element].ignition_delay = 8;
     }
   }
-
-  // check for custom elements which have mouse click events defined
-  for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
-  {
-    int element = EL_CUSTOM_START + i;
-
-    if (HAS_CHANGE_EVENT(element, CE_CLICKED_BY_MOUSE) ||
-       HAS_CHANGE_EVENT(element, CE_PRESSED_BY_MOUSE) ||
-       HAS_CHANGE_EVENT(element, CE_MOUSE_CLICKED_ON_X) ||
-       HAS_CHANGE_EVENT(element, CE_MOUSE_PRESSED_ON_X))
-      level->has_mouse_events = TRUE;
-  }
 }
 
 static void LoadLevel_InitElements(struct LevelInfo *level)
index d73efcfba0f89ab7495599b0eba0636e1777d1e9..5d9e473b0d412d0cd976ff55ec44ece8308d33c5 100644 (file)
@@ -3279,6 +3279,23 @@ static void InitGameEngine(void)
   // Supaplex levels with time limit currently unsupported -- should be added
   if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
     level.time = 0;
+
+  // ----------initialize flag for handling mouse events ---------------------
+
+  // set flag to default value: do not handle mouse events
+  game.use_mouse_events = FALSE;
+
+  // now check for custom elements which have mouse click events defined
+  for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+  {
+    int element = EL_CUSTOM_START + i;
+
+    if (HAS_CHANGE_EVENT(element, CE_CLICKED_BY_MOUSE) ||
+       HAS_CHANGE_EVENT(element, CE_PRESSED_BY_MOUSE) ||
+       HAS_CHANGE_EVENT(element, CE_MOUSE_CLICKED_ON_X) ||
+       HAS_CHANGE_EVENT(element, CE_MOUSE_PRESSED_ON_X))
+      game.use_mouse_events = TRUE;
+  }
 }
 
 static int get_num_special_action(int element, int action_first,
index 94b96855ace5573a4d67a7ff68b5580baf69a2a7..74625440cae7d8ac3b7ca2a8b1b0415f279b81ef 100644 (file)
@@ -178,6 +178,9 @@ struct GameInfo
   boolean max_num_changes_per_frame;
   boolean use_reverse_scan_direction;
 
+  // flag to indicate if mouse events are processed by game engine
+  boolean use_mouse_events;
+
   // variable within running game
   int yamyam_content_nr;
   boolean robot_wheel_active;
index 75ed2ee83d63b996b7eaade707a59523321359fe..4fd367c74ab1d7c0c3bb8433b2e12b5bc39a09aa 100644 (file)
@@ -3195,9 +3195,6 @@ struct LevelInfo
 
   // runtime flags to handle bugs in old levels (not stored in level file)
   boolean use_action_after_change_bug;
-
-  // runtime flags to indicate level properties (not stored in level file)
-  boolean has_mouse_events;
 };
 
 struct NetworkLevelInfo