X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=ffd028953a4a7073ca1729af01a631f96e42081c;hb=b645a25fff77d62a36c744fa4047a3c0e5929341;hp=92cda6925740c592f8715e214c23593500fe4e69;hpb=74c0f7de91268e40d15948f473eac51a9760b9c0;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 92cda692..ffd02895 100644 --- a/src/events.c +++ b/src/events.c @@ -374,7 +374,11 @@ void HandleButton(int mx, int my, int button) old_my = my; } - HandleGadgets(mx, my, button); + if (HandleGadgets(mx, my, button)) + { + /* do not handle this button event anymore */ + mx = my = -32; /* force mouse event to be outside screen tiles */ + } switch(game_status) { @@ -398,7 +402,7 @@ void HandleButton(int mx, int my, int button) break; case GAME_MODE_INFO: - HandleInfoScreen(button); + HandleInfoScreen(mx,my, 0,0, button); break; case GAME_MODE_SETUP: @@ -409,11 +413,10 @@ void HandleButton(int mx, int my, int button) #ifdef DEBUG if (button == MB_RELEASED) { - int sx = (mx - SX) / TILEX; - int sy = (my - SY) / TILEY; - - if (IN_VIS_FIELD(sx,sy)) + if (IN_GFX_SCREEN(mx, my)) { + int sx = (mx - SX) / TILEX; + int sy = (my - SY) / TILEY; int x = LEVELX(sx); int y = LEVELY(sy); @@ -563,19 +566,6 @@ void HandleKey(Key key, int key_status) return; } - /* allow quick escape to the main menu with the Escape key */ - if (key == KSYM_Escape && - game_status != GAME_MODE_MAIN && - game_status != GAME_MODE_PLAYING && - game_status != GAME_MODE_EDITOR && - game_status != GAME_MODE_LEVELS && - game_status != GAME_MODE_SETUP) - { - game_status = GAME_MODE_MAIN; - DrawMainMenu(); - return; - } - /* special key shortcuts */ if (game_status == GAME_MODE_MAIN || game_status == GAME_MODE_PLAYING) { @@ -587,17 +577,11 @@ void HandleKey(Key key, int key_status) TapeTogglePause(TAPE_TOGGLE_MANUAL); } -#if 0 -#ifndef DEBUG - - if (game_status == GAME_MODE_PLAYING && (tape.playing || tape.pausing)) - return; - -#endif -#endif - - - HandleGadgetsKeyInput(key); + if (HandleGadgetsKeyInput(key)) + { + if (key != KSYM_Escape) /* always allow ESC key to be handled */ + key = KSYM_UNDEFINED; + } switch(game_status) { @@ -608,6 +592,7 @@ void HandleKey(Key key, int key_status) case GAME_MODE_MAIN: case GAME_MODE_LEVELS: case GAME_MODE_SETUP: + case GAME_MODE_INFO: switch(key) { case KSYM_Return: @@ -617,6 +602,8 @@ void HandleKey(Key key, int key_status) HandleChooseLevel(0,0, 0,0, MB_MENU_CHOICE); else if (game_status == GAME_MODE_SETUP) HandleSetupScreen(0,0, 0,0, MB_MENU_CHOICE); + else if (game_status == GAME_MODE_INFO) + HandleInfoScreen(0,0, 0,0, MB_MENU_CHOICE); break; case KSYM_Escape: @@ -624,6 +611,8 @@ void HandleKey(Key key, int key_status) HandleChooseLevel(0,0, 0,0, MB_MENU_LEAVE); else if (game_status == GAME_MODE_SETUP) HandleSetupScreen(0,0, 0,0, MB_MENU_LEAVE); + else if (game_status == GAME_MODE_INFO) + HandleInfoScreen(0,0, 0,0, MB_MENU_LEAVE); break; case KSYM_Page_Up: @@ -631,6 +620,8 @@ void HandleKey(Key key, int key_status) HandleChooseLevel(0,0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK); else if (game_status == GAME_MODE_SETUP) HandleSetupScreen(0,0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK); + else if (game_status == GAME_MODE_INFO) + HandleInfoScreen(0,0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK); break; case KSYM_Page_Down: @@ -638,6 +629,8 @@ void HandleKey(Key key, int key_status) HandleChooseLevel(0,0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); else if (game_status == GAME_MODE_SETUP) HandleSetupScreen(0,0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); + else if (game_status == GAME_MODE_INFO) + HandleInfoScreen(0,0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK); break; #ifdef DEBUG @@ -651,17 +644,13 @@ void HandleKey(Key key, int key_status) } break; - case GAME_MODE_INFO: - HandleInfoScreen(MB_RELEASED); - break; - case GAME_MODE_SCORES: switch(key) { case KSYM_Return: + case KSYM_Escape: game_status = GAME_MODE_MAIN; DrawMainMenu(); - BackToFront(); break; case KSYM_Page_Up: @@ -834,7 +823,13 @@ void HandleKey(Key key, int key_status) break; } default: - break; + if (key == KSYM_Escape) + { + game_status = GAME_MODE_MAIN; + DrawMainMenu(); + + return; + } } } @@ -899,6 +894,7 @@ void HandleJoystick() case GAME_MODE_MAIN: case GAME_MODE_LEVELS: case GAME_MODE_SETUP: + case GAME_MODE_INFO: { static unsigned long joystickmove_delay = 0; @@ -912,6 +908,8 @@ void HandleJoystick() HandleChooseLevel(0,0,dx,dy,newbutton ? MB_MENU_CHOICE : MB_MENU_MARK); else if (game_status == GAME_MODE_SETUP) HandleSetupScreen(0,0,dx,dy,newbutton ? MB_MENU_CHOICE : MB_MENU_MARK); + else if (game_status == GAME_MODE_INFO) + HandleInfoScreen(0,0,dx,dy,newbutton ? MB_MENU_CHOICE : MB_MENU_MARK); break; } @@ -919,10 +917,6 @@ void HandleJoystick() HandleHallOfFame(0,0, dx,dy, !newbutton); break; - case GAME_MODE_INFO: - HandleInfoScreen(!newbutton); - break; - case GAME_MODE_EDITOR: HandleLevelEditorIdle(); break;