X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=652ff31da2097c2690414392f1d62cfc29242e21;hb=41e8d55b767c898f20c29a1b0b8d2ef8840be2f5;hp=470271cbefe3a68b6de54c4fc79d1a6d9b23cc6c;hpb=2d57e3c2b6241f64246029e78b4b004b4a0ebf2f;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 470271cb..652ff31d 100644 --- a/src/events.c +++ b/src/events.c @@ -1,26 +1,26 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2001 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* events.c * +* events.c * ***********************************************************/ +#include "libgame/libgame.h" + #include "events.h" #include "init.h" #include "screens.h" #include "tools.h" #include "game.h" #include "editor.h" -#include "misc.h" +#include "files.h" #include "tape.h" -#include "joystick.h" -#include "buttons.h" #include "network.h" /* values for key_status */ @@ -33,7 +33,7 @@ delay problems with lots of mouse motion events when mouse button not pressed */ -int EventFilter(const Event *event) +int FilterMouseMotionEvents(const Event *event) { if (event->type != EVENT_MOTIONNOTIFY) return 1; @@ -45,6 +45,23 @@ int EventFilter(const Event *event) return 1; } +/* this is only really needed for non-SDL targets to filter unwanted events; + when using SDL with properly installed event filter, this function can be + replaced with a simple "NextEvent()" call, but it doesn't hurt either */ + +static boolean NextValidEvent(Event *event) +{ + while (PendingEvent()) + { + NextEvent(event); + + if (FilterMouseMotionEvents(event)) + return TRUE; + } + + return FALSE; +} + void EventLoop(void) { while(1) @@ -53,9 +70,7 @@ void EventLoop(void) { Event event; - NextEvent(&event); - - if (EventFilter(&event)) + if (NextValidEvent(&event)) { switch(event.type) { @@ -123,7 +138,7 @@ void HandleOtherEvents(Event *event) HandleClientMessageEvent((ClientMessageEvent *) event); break; -#ifdef USE_SDL_JOYSTICK +#if defined(TARGET_SDL) case SDL_JOYAXISMOTION: case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: @@ -206,7 +221,7 @@ void SleepWhileUnmapped() void HandleExposeEvent(ExposeEvent *event) { -#ifndef USE_SDL_LIBRARY +#ifndef TARGET_SDL int x = event->x, y = event->y; int width = event->width, height = event->height; @@ -288,8 +303,8 @@ void HandleFocusEvent(FocusChangeEvent *event) int i; KeyboardAutoRepeatOn(); - old_joystick_status = joystick_status; - joystick_status = JOYSTICK_OFF; + old_joystick_status = joystick.status; + joystick.status = JOYSTICK_NOT_AVAILABLE; /* simulate key release events for still pressed keys */ key_joystick_mapping = 0; @@ -320,21 +335,14 @@ void HandleFocusEvent(FocusChangeEvent *event) KeyboardAutoRepeatOff(); } if (old_joystick_status != -1) - joystick_status = old_joystick_status; + joystick.status = old_joystick_status; } } void HandleClientMessageEvent(ClientMessageEvent *event) { -#ifdef USE_SDL_LIBRARY - CloseAllAndExit(0); /* the only possible message here is SDL_QUIT */ -#else -#ifndef MSDOS - if ((event->window == window) && - (event->data.l[0] == XInternAtom(display, "WM_DELETE_WINDOW", FALSE))) + if (CheckCloseWindowEvent(event)) CloseAllAndExit(0); -#endif -#endif } void HandleButton(int mx, int my, int button) @@ -362,7 +370,7 @@ void HandleButton(int mx, int my, int button) break; case TYPENAME: - HandleTypeName(0, KEY_Return); + HandleTypeName(0, KSYM_Return); break; case CHOOSELEVEL: @@ -492,7 +500,7 @@ void HandleKey(Key key, int key_status) if (key_status == KEY_RELEASED) return; - if ((key == KEY_Return || key == KEY_space) && + if ((key == KSYM_Return || key == KSYM_space) && game_status == PLAYING && AllPlayersGone) { CloseDoor(DOOR_CLOSE_1); @@ -502,9 +510,9 @@ void HandleKey(Key key, int key_status) } /* allow quick escape to the main menu with the Escape key */ - if (key == KEY_Escape && game_status != MAINMENU) + if (key == KSYM_Escape && + game_status != MAINMENU && game_status != LEVELED) { - CloseDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY); game_status = MAINMENU; DrawMainMenu(); return; @@ -535,8 +543,8 @@ void HandleKey(Key key, int key_status) case SETUPINPUT: switch(key) { - case KEY_Return: - case KEY_space: + case KSYM_Return: + case KSYM_space: if (game_status == MAINMENU) HandleMainMenu(0,0, 0,0, MB_MENU_CHOICE); else if (game_status == CHOOSELEVEL) @@ -547,16 +555,22 @@ void HandleKey(Key key, int key_status) HandleSetupInputScreen(0,0, 0,0, MB_MENU_CHOICE); break; - case KEY_Page_Up: + case KSYM_Page_Up: if (game_status == CHOOSELEVEL) HandleChooseLevel(0,0, 0,-SCR_FIELDY, MB_MENU_MARK); break; - case KEY_Page_Down: + case KSYM_Page_Down: if (game_status == CHOOSELEVEL) HandleChooseLevel(0,0, 0,SCR_FIELDY, MB_MENU_MARK); break; +#ifdef DEBUG + case KSYM_t: + DumpTape(&tape); + break; +#endif + default: break; } @@ -569,18 +583,18 @@ void HandleKey(Key key, int key_status) case HALLOFFAME: switch(key) { - case KEY_Return: - case KEY_space: + case KSYM_Return: + case KSYM_space: game_status = MAINMENU; DrawMainMenu(); BackToFront(); break; - case KEY_Page_Up: + case KSYM_Page_Up: HandleHallOfFame(0,0, 0,-SCR_FIELDY, MB_MENU_MARK); break; - case KEY_Page_Down: + case KSYM_Page_Down: HandleHallOfFame(0,0, 0,SCR_FIELDY, MB_MENU_MARK); break; @@ -590,7 +604,7 @@ void HandleKey(Key key, int key_status) break; case LEVELED: - if (!anyTextGadgetActiveOrJustFinished) + if (!anyTextGadgetActiveOrJustFinished || key == KSYM_Escape) HandleLevelEditorKeyInput(key); break; @@ -600,17 +614,17 @@ void HandleKey(Key key, int key_status) { #ifdef DEBUG - case KEY_0: - case KEY_1: - case KEY_2: - case KEY_3: - case KEY_4: - case KEY_5: - case KEY_6: - case KEY_7: - case KEY_8: - case KEY_9: - if (key == KEY_0) + case KSYM_0: + case KSYM_1: + case KSYM_2: + case KSYM_3: + case KSYM_4: + case KSYM_5: + case KSYM_6: + case KSYM_7: + case KSYM_8: + case KSYM_9: + if (key == KSYM_0) { if (GameFrameDelay == 500) GameFrameDelay = GAME_FRAME_DELAY; @@ -618,12 +632,12 @@ void HandleKey(Key key, int key_status) GameFrameDelay = 500; } else - GameFrameDelay = (key - KEY_0) * 10; + GameFrameDelay = (key - KSYM_0) * 10; printf("Game speed == %d%% (%d ms delay between two frames)\n", GAME_FRAME_DELAY * 100 / GameFrameDelay, GameFrameDelay); break; - case KEY_d: + case KSYM_d: if (options.debug) { options.debug = FALSE; @@ -636,7 +650,7 @@ void HandleKey(Key key, int key_status) } break; - case KEY_s: + case KSYM_s: if (!global.fps_slowdown) { global.fps_slowdown = TRUE; @@ -657,7 +671,7 @@ void HandleKey(Key key, int key_status) break; #if 0 - case KEY_a: + case KSYM_a: if (ScrollStepSize == TILEX/8) ScrollStepSize = TILEX/4; else @@ -667,7 +681,7 @@ void HandleKey(Key key, int key_status) #endif #if 0 - case KEY_m: + case KSYM_m: if (MoveSpeed == 8) { MoveSpeed = 4; @@ -682,30 +696,28 @@ void HandleKey(Key key, int key_status) break; #endif - case KEY_f: + case KSYM_f: ScrollStepSize = TILEX/8; printf("ScrollStepSize == %d (1/8)\n", ScrollStepSize); break; - case KEY_g: + case KSYM_g: ScrollStepSize = TILEX/4; printf("ScrollStepSize == %d (1/4)\n", ScrollStepSize); break; - case KEY_h: + case KSYM_h: ScrollStepSize = TILEX/2; printf("ScrollStepSize == %d (1/2)\n", ScrollStepSize); break; - case KEY_l: + case KSYM_l: ScrollStepSize = TILEX; printf("ScrollStepSize == %d (1/1)\n", ScrollStepSize); break; -#ifndef MSDOS - case KEY_Q: -#endif - case KEY_q: + case KSYM_Q: + case KSYM_q: local_player->dynamite = 1000; break; @@ -713,7 +725,7 @@ void HandleKey(Key key, int key_status) #if 0 - case KEY_z: + case KSYM_z: { int i; @@ -750,7 +762,7 @@ void HandleNoEvent() return; } -#if !defined(MSDOS) && !defined(WIN32) +#if defined(PLATFORM_UNIX) if (options.network) HandleNetworking(); #endif