X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=18898fb2c8e1401c1a97d76580b6ddfc1a849914;hb=81da35db369b73242e6ff3902657b3703efb4fa4;hp=2365674739f44880cc7890a31ea06d5e482b6be1;hpb=d9ea00b22977a971eaf8ee580b4f8804dd2f6fc1;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 23656747..18898fb2 100644 --- a/src/events.c +++ b/src/events.c @@ -298,7 +298,8 @@ void HandleMouseCursor() 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) @@ -369,6 +370,13 @@ void ClearEventQueue() } } +void ClearPlayerMouseAction() +{ + local_player->mouse_action.lx = 0; + local_player->mouse_action.ly = 0; + local_player->mouse_action.button = 0; +} + void ClearPlayerAction() { int i; @@ -379,6 +387,29 @@ void ClearPlayerAction() 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() @@ -1324,16 +1355,15 @@ void HandleButton(int mx, int my, int button, int button_nr) break; case GAME_MODE_PLAYING: - if (level.game_engine_type == GAME_ENGINE_TYPE_MM) - ClickElement(mx, my, button); + SetPlayerMouseAction(mx, my, button); + #if defined(TARGET_SDL2) - else - HandleFollowFinger(mx, my, button); + 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 @@ -1624,7 +1654,7 @@ void HandleKey(Key key, int key_status) 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)