return FALSE;
}
-static boolean WaitEventFiltered(Event *event)
+static boolean WaitValidEvent(Event *event)
{
WaitEvent(event);
boolean NextValidEvent(Event *event)
{
while (PendingEvent())
- if (WaitEventFiltered(event))
+ if (WaitValidEvent(event))
return TRUE;
return FALSE;
cursor_inside_playfield &&
DelayReached(&special_cursor_delay, special_cursor_delay_value))
{
- SetMouseCursor(CURSOR_PLAYFIELD);
+ if (level.game_engine_type != GAME_ENGINE_TYPE_MM)
+ SetMouseCursor(CURSOR_PLAYFIELD);
}
}
else if (gfx.cursor_mode != CURSOR_DEFAULT)
}
}
+void ClearPlayerMouseAction()
+{
+ local_player->mouse_action.lx = 0;
+ local_player->mouse_action.ly = 0;
+ local_player->mouse_action.button = 0;
+}
+
void ClearPlayerAction()
{
int i;
stored_player[i].action = 0;
ClearJoystickState();
+ ClearPlayerMouseAction();
+}
+
+void SetPlayerMouseAction(int mx, int my, int button)
+{
+ int lx = getLevelFromScreenX(mx);
+ int ly = getLevelFromScreenY(my);
+
+ ClearPlayerMouseAction();
+
+ if (!IN_GFX_FIELD_PLAY(mx, my) || !IN_LEV_FIELD(lx, ly))
+ return;
+
+ local_player->mouse_action.lx = lx;
+ local_player->mouse_action.ly = ly;
+ local_player->mouse_action.button = button;
+
+ if (tape.recording && tape.pausing && tape.use_mouse)
+ {
+ /* prevent button release or motion events from un-pausing a paused game */
+ if (button && !motion_status)
+ TapeTogglePause(TAPE_TOGGLE_MANUAL);
+ }
}
void SleepWhileUnmapped()
{
Event event;
- if (!WaitEventFiltered(&event))
+ if (!WaitValidEvent(&event))
continue;
switch (event.type)
HandleSetupScreen(mx, my, 0, 0, button);
break;
-#if defined(TARGET_SDL2)
case GAME_MODE_PLAYING:
+ SetPlayerMouseAction(mx, my, button);
+
+#if defined(TARGET_SDL2)
HandleFollowFinger(mx, my, button);
#endif
#ifdef DEBUG
- if (button == MB_PRESSED && !motion_status && IN_GFX_FIELD_PLAY(mx, my) &&
- GetKeyModState() & KMOD_Control)
+ if (button == MB_PRESSED && !motion_status && !button_hold &&
+ IN_GFX_FIELD_PLAY(mx, my) && GetKeyModState() & KMOD_Control)
DumpTileFromScreen(mx, my);
#endif
has_snapped[pnr] = FALSE;
}
}
- else if (tape.recording && tape.pausing)
+ else if (tape.recording && tape.pausing && !tape.use_mouse)
{
/* prevent key release events from un-pausing a paused game */
if (key_status == KEY_PRESSED && key_action & KEY_ACTION)
void HandleNoEvent()
{
// if (button_status && game_status != GAME_MODE_PLAYING)
- if (button_status && (game_status != GAME_MODE_PLAYING || tape.pausing))
+ if (button_status && (game_status != GAME_MODE_PLAYING ||
+ tape.pausing ||
+ level.game_engine_type == GAME_ENGINE_TYPE_MM))
{
HandleButton(0, 0, button_status, -button_status);
}