X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=c1c5e00d42994d454b4835ce82e36123fb13b360;hb=82514140084028004046e95c2aaddaecd839fc30;hp=4a1ecbfee9df368244a8d26d596c7b677fcce925;hpb=f6e0228a241d63761208d8e64d292745d03fd07e;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 4a1ecbfe..c1c5e00d 100644 --- a/src/events.c +++ b/src/events.c @@ -36,8 +36,7 @@ static boolean cursor_inside_playfield = FALSE; static int cursor_mode_last = CURSOR_DEFAULT; -static unsigned int special_cursor_delay = 0; -static unsigned int special_cursor_delay_value = 1000; +static DelayCounter special_cursor_delay = { 1000 }; static boolean special_cursor_enabled = FALSE; static boolean stop_processing_events = FALSE; @@ -211,8 +210,7 @@ void StopProcessingEvents(void) static void HandleEvents(void) { Event event; - unsigned int event_frame_delay = 0; - unsigned int event_frame_delay_value = GAME_FRAME_DELAY; + DelayCounter event_frame_delay = { GAME_FRAME_DELAY }; ResetDelayCounter(&event_frame_delay); @@ -277,7 +275,7 @@ static void HandleEvents(void) ResetDelayCounter(&event_frame_delay); // do not handle events for longer than standard frame delay period - if (DelayReached(&event_frame_delay, event_frame_delay_value)) + if (DelayReached(&event_frame_delay)) break; // do not handle any further events if triggered by a special flag @@ -330,7 +328,7 @@ static void HandleMouseCursor(void) // when showing title screens, hide mouse pointer (if not moved) if (gfx.cursor_mode != CURSOR_NONE && - DelayReached(&special_cursor_delay, special_cursor_delay_value)) + DelayReached(&special_cursor_delay)) { SetMouseCursor(CURSOR_NONE); } @@ -347,7 +345,7 @@ static void HandleMouseCursor(void) if (gfx.cursor_mode != CURSOR_PLAYFIELD && cursor_inside_playfield && special_cursor_enabled && - DelayReached(&special_cursor_delay, special_cursor_delay_value)) + DelayReached(&special_cursor_delay)) { SetMouseCursor(CURSOR_PLAYFIELD); } @@ -585,7 +583,7 @@ void HandleWheelEvent(WheelEvent *event) event->y < 0 ? MB_WHEEL_DOWN : event->y > 0 ? MB_WHEEL_UP : 0); -#if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX) +#if defined(PLATFORM_WINDOWS) || defined(PLATFORM_MAC) // accelerated mouse wheel available on Mac and Windows wheel_steps = (event->x ? ABS(event->x) : ABS(event->y)); #else @@ -622,6 +620,8 @@ void HandleWindowEvent(WindowEvent *event) subtype == SDL_WINDOWEVENT_FOCUS_GAINED ? "SDL_WINDOWEVENT_FOCUS_GAINED" : subtype == SDL_WINDOWEVENT_FOCUS_LOST ? "SDL_WINDOWEVENT_FOCUS_LOST" : subtype == SDL_WINDOWEVENT_CLOSE ? "SDL_WINDOWEVENT_CLOSE" : + subtype == SDL_WINDOWEVENT_TAKE_FOCUS ? "SDL_WINDOWEVENT_TAKE_FOCUS" : + subtype == SDL_WINDOWEVENT_HIT_TEST ? "SDL_WINDOWEVENT_HIT_TEST" : "(UNKNOWN)"); Debug("event:window", "name: '%s', data1: %ld, data2: %ld", @@ -1718,9 +1718,11 @@ void HandleButton(int mx, int my, int button, int button_nr) // when playing, only handle gadgets when using "follow finger" controls // or when using touch controls in combination with the MM game engine // or when using gadgets that do not overlap with virtual buttons + // or when touch controls are disabled (e.g., with mouse-only levels) handle_gadgets = (game_status != GAME_MODE_PLAYING || level.game_engine_type == GAME_ENGINE_TYPE_MM || + strEqual(setup.touch.control_type, TOUCH_CONTROL_OFF) || strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER) || (strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS) && !CheckVirtualButtonPressed(mx, my, button))); @@ -1781,7 +1783,11 @@ void HandleButton(int mx, int my, int button, int button_nr) break; case GAME_MODE_SCORES: - HandleHallOfFame(0, 0, 0, 0, button); + HandleHallOfFame(mx, my, 0, 0, button); + break; + + case GAME_MODE_SCOREINFO: + HandleScoreInfo(mx, my, 0, 0, button); break; case GAME_MODE_EDITOR: @@ -2284,6 +2290,10 @@ void HandleKey(Key key, int key_status) TapeQuickSave(); else if (key == setup.shortcut.load_game) TapeQuickLoad(); + else if (key == setup.shortcut.restart_game) + TapeRestartGame(); + else if (key == setup.shortcut.pause_before_end) + TapeReplayAndPauseBeforeEnd(); else if (key == setup.shortcut.toggle_pause) TapeTogglePause(TAPE_TOGGLE_MANUAL | TAPE_TOGGLE_PLAY_PAUSE); @@ -2291,6 +2301,11 @@ void HandleKey(Key key, int key_status) HandleSoundButtonKeys(key); } + if (game_status == GAME_MODE_SCOREINFO) + { + HandleScreenGadgetKeys(key); + } + if (game_status == GAME_MODE_PLAYING && !network_playing) { int centered_player_nr_next = -999; @@ -2320,6 +2335,14 @@ void HandleKey(Key key, int key_status) if (HandleGadgetsKeyInput(key)) return; // do not handle already processed keys again + // special case: on "space" key, either continue playing or go to main menu + if (game_status == GAME_MODE_SCORES && key == KSYM_space) + { + HandleHallOfFame(0, 0, 0, 0, MB_MENU_CONTINUE); + + return; + } + switch (game_status) { case GAME_MODE_PSEUDO_TYPENAME: @@ -2335,6 +2358,7 @@ void HandleKey(Key key, int key_status) case GAME_MODE_SETUP: case GAME_MODE_INFO: case GAME_MODE_SCORES: + case GAME_MODE_SCOREINFO: if (anyTextGadgetActiveOrJustFinished && key != KSYM_Escape) break; @@ -2359,6 +2383,8 @@ void HandleKey(Key key, int key_status) HandleInfoScreen(0, 0, 0, 0, MB_MENU_CHOICE); else if (game_status == GAME_MODE_SCORES) HandleHallOfFame(0, 0, 0, 0, MB_MENU_CHOICE); + else if (game_status == GAME_MODE_SCOREINFO) + HandleScoreInfo(0, 0, 0, 0, MB_MENU_CHOICE); break; case KSYM_Escape: @@ -2379,6 +2405,8 @@ void HandleKey(Key key, int key_status) HandleInfoScreen(0, 0, 0, 0, MB_MENU_LEAVE); else if (game_status == GAME_MODE_SCORES) HandleHallOfFame(0, 0, 0, 0, MB_MENU_LEAVE); + else if (game_status == GAME_MODE_SCOREINFO) + HandleScoreInfo(0, 0, 0, 0, MB_MENU_LEAVE); break; case KSYM_Page_Up: @@ -2394,6 +2422,8 @@ void HandleKey(Key key, int key_status) HandleInfoScreen(0, 0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK); else if (game_status == GAME_MODE_SCORES) HandleHallOfFame(0, 0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK); + else if (game_status == GAME_MODE_SCOREINFO) + HandleScoreInfo(0, 0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK); break; case KSYM_Page_Down: @@ -2409,6 +2439,8 @@ void HandleKey(Key key, int key_status) HandleInfoScreen(0, 0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); else if (game_status == GAME_MODE_SCORES) HandleHallOfFame(0, 0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); + else if (game_status == GAME_MODE_SCOREINFO) + HandleScoreInfo(0, 0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); break; default: @@ -2557,8 +2589,7 @@ static int HandleJoystickForAllPlayers(void) void HandleJoystick(void) { - static unsigned int joytest_delay = 0; - static unsigned int joytest_delay_value = GADGET_FRAME_DELAY; + static DelayCounter joytest_delay = { GADGET_FRAME_DELAY }; static int joytest_last = 0; int delay_value_first = GADGET_FRAME_DELAY_FIRST; int delay_value = GADGET_FRAME_DELAY; @@ -2616,7 +2647,7 @@ void HandleJoystick(void) if (dx || dy || button) SetPlayfieldMouseCursorEnabled(TRUE); - if (joytest && !button && !DelayReached(&joytest_delay, joytest_delay_value)) + if (joytest && !button && !DelayReached(&joytest_delay)) { // delay joystick/keyboard actions if axes/keys continually pressed newbutton = dx = dy = 0; @@ -2624,7 +2655,7 @@ void HandleJoystick(void) else { // first start with longer delay, then continue with shorter delay - joytest_delay_value = + joytest_delay.value = (use_delay_value_first ? delay_value_first : delay_value); } @@ -2640,6 +2671,7 @@ void HandleJoystick(void) case GAME_MODE_SETUP: case GAME_MODE_INFO: case GAME_MODE_SCORES: + case GAME_MODE_SCOREINFO: { if (anyTextGadgetActive()) break; @@ -2660,6 +2692,8 @@ void HandleJoystick(void) HandleInfoScreen(0,0,dx,dy, newbutton ? MB_MENU_CHOICE : MB_MENU_MARK); else if (game_status == GAME_MODE_SCORES) HandleHallOfFame(0,0,dx,dy, newbutton ? MB_MENU_CHOICE : MB_MENU_MARK); + else if (game_status == GAME_MODE_SCOREINFO) + HandleScoreInfo(0,0,dx,dy, newbutton ? MB_MENU_CHOICE : MB_MENU_MARK); break; }