X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=c40075e4d375faa0157249fbd68e9d909ba26b41;hb=84b00c096ac7311cd019cc84969ff2d88353b3fa;hp=5dabff98e944b25fb815cf470f6e58c58b1011b2;hpb=de9f167f6960194e913af2a768456d502d4fdf1a;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 5dabff98..c40075e4 100644 --- a/src/events.c +++ b/src/events.c @@ -304,7 +304,8 @@ void HandleMouseCursor() cursor_inside_playfield && DelayReached(&special_cursor_delay, special_cursor_delay_value)) { - if (level.game_engine_type != GAME_ENGINE_TYPE_MM) + if (level.game_engine_type != GAME_ENGINE_TYPE_MM || + tile_cursor.enabled) SetMouseCursor(CURSOR_PLAYFIELD); } } @@ -2242,6 +2243,8 @@ void HandleJoystick() static unsigned int joytest_delay = 0; static unsigned int joytest_delay_value = GADGET_FRAME_DELAY; static int joytest_last = 0; + int delay_value_first = GADGET_FRAME_DELAY_FIRST; + int delay_value = GADGET_FRAME_DELAY; int joystick = HandleJoystickForAllPlayers(); int keyboard = key_joystick_mapping; int joy = (joystick | keyboard); @@ -2254,6 +2257,7 @@ void HandleJoystick() int newbutton = (AnyJoystickButton() == JOY_BUTTON_NEW_PRESSED); int dx = (left ? -1 : right ? 1 : 0); int dy = (up ? -1 : down ? 1 : 0); + boolean use_delay_value_first = (joytest != joytest_last); if (HandleGlobalAnimClicks(-1, -1, newbutton)) { @@ -2263,10 +2267,18 @@ void HandleJoystick() if (level.game_engine_type == GAME_ENGINE_TYPE_MM) { - // when playing MM style levels, also use delay for keyboard events if (game_status == GAME_MODE_PLAYING) + { + // when playing MM style levels, also use delay for keyboard events joytest |= keyboard; + // only use first delay value for new events, but not for changed events + use_delay_value_first = (!joytest != !joytest_last); + + // only use delay after the initial keyboard event + delay_value = 0; + } + // for any joystick or keyboard event, enable playfield tile cursor if (dx || dy || button) SetTileCursorEnabled(TRUE); @@ -2281,7 +2293,7 @@ void HandleJoystick() { /* first start with longer delay, then continue with shorter delay */ joytest_delay_value = - (joytest != joytest_last ? GADGET_FRAME_DELAY_FIRST : GADGET_FRAME_DELAY); + (use_delay_value_first ? delay_value_first : delay_value); } joytest_last = joytest;