X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=2d9cbfcd159329dc24e59bf3e26092de59765c00;hp=c0bfafa156abe3914bc2363e6e8e9ec00b0c1ed2;hb=4a8368abd71c718621838773eed914b5bbd4e1d8;hpb=90c3a49422dd88de77ffc7b8dd1d4f1d73d0d9a3 diff --git a/src/events.c b/src/events.c index c0bfafa1..2d9cbfcd 100644 --- a/src/events.c +++ b/src/events.c @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * +* (c) 1995-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -127,7 +127,7 @@ void EventLoop(void) while (NextValidEvent(&event)) { - switch(event.type) + switch (event.type) { case EVENT_BUTTONPRESS: case EVENT_BUTTONRELEASE: @@ -194,7 +194,7 @@ void EventLoop(void) void HandleOtherEvents(Event *event) { - switch(event->type) + switch (event->type) { case EVENT_EXPOSE: HandleExposeEvent((ExposeEvent *) event); @@ -223,6 +223,10 @@ void HandleOtherEvents(Event *event) case SDL_JOYBUTTONUP: HandleJoystickEvent(event); break; + + case SDL_SYSWMEVENT: + HandleWindowManagerEvent(event); + break; #endif default: @@ -238,14 +242,18 @@ void ClearEventQueue() NextEvent(&event); - switch(event.type) + switch (event.type) { case EVENT_BUTTONRELEASE: button_status = MB_RELEASED; break; case EVENT_KEYRELEASE: +#if 1 + ClearPlayerAction(); +#else key_joystick_mapping = 0; +#endif break; default: @@ -277,7 +285,7 @@ void SleepWhileUnmapped() NextEvent(&event); - switch(event.type) + switch (event.type) { case EVENT_BUTTONRELEASE: button_status = MB_RELEASED; @@ -409,6 +417,13 @@ void HandleClientMessageEvent(ClientMessageEvent *event) CloseAllAndExit(0); } +void HandleWindowManagerEvent(Event *event) +{ +#if defined(TARGET_SDL) + SDLHandleWindowManagerEvent(event); +#endif +} + void HandleButton(int mx, int my, int button, int button_nr) { static int old_mx = 0, old_my = 0; @@ -562,6 +577,11 @@ static void HandleKeysSpecial(Key key) { DumpTape(&tape); } + else if (is_string_suffix(cheat_input, ":save-native-level") || + is_string_suffix(cheat_input, ":snl")) + { + SaveNativeLevel(&level); + } } else if (game_status == GAME_MODE_PLAYING) { @@ -663,8 +683,18 @@ void HandleKey(Key key, int key_status) element_dropped[pnr] = FALSE; } } +#if 1 + else if (tape.recording && tape.pausing) + { + /* prevent key release events from un-pausing a paused game */ + if (key_status == KEY_PRESSED && + (key_action & KEY_ACTION)) + TapeTogglePause(TAPE_TOGGLE_MANUAL); + } +#else else if (tape.recording && tape.pausing && (key_action & KEY_ACTION)) TapeTogglePause(TAPE_TOGGLE_MANUAL); +#endif } } else @@ -697,11 +727,19 @@ void HandleKey(Key key, int key_status) ToggleFullscreenIfNeeded(); + if (game_status == GAME_MODE_SETUP) + RedrawSetupScreenAfterFullscreenToggle(); + return; } +#if 0 + if (game_status == GAME_MODE_PLAYING && local_player->LevelSolved_GameEnd && + (key == KSYM_Return || key == setup.shortcut.toggle_pause)) +#else if (game_status == GAME_MODE_PLAYING && AllPlayersGone && (key == KSYM_Return || key == setup.shortcut.toggle_pause)) +#endif { GameEnd(); @@ -711,7 +749,7 @@ void HandleKey(Key key, int key_status) if (game_status == GAME_MODE_MAIN && (key == setup.shortcut.toggle_pause || key == KSYM_space)) { - StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE); + StartGameActions(options.network, setup.autorecord, level.random_seed); return; } @@ -758,7 +796,7 @@ void HandleKey(Key key, int key_status) key = KSYM_UNDEFINED; } - switch(game_status) + switch (game_status) { case GAME_MODE_PSEUDO_TYPENAME: HandleTypeName(0, key); @@ -770,7 +808,7 @@ void HandleKey(Key key, int key_status) case GAME_MODE_SETUP: case GAME_MODE_INFO: case GAME_MODE_SCORES: - switch(key) + switch (key) { case KSYM_space: case KSYM_Return: @@ -789,6 +827,9 @@ void HandleKey(Key key, int key_status) break; case KSYM_Escape: + if (game_status != GAME_MODE_MAIN) + FadeSkipNextFadeIn(); + if (game_status == GAME_MODE_TITLE) HandleTitleScreen(0, 0, 0, 0, MB_MENU_LEAVE); else if (game_status == GAME_MODE_LEVELS) @@ -841,7 +882,7 @@ void HandleKey(Key key, int key_status) case GAME_MODE_PLAYING: { - switch(key) + switch (key) { case KSYM_Escape: RequestQuitGame(setup.ask_on_escape); @@ -1006,7 +1047,7 @@ void HandleJoystick() int dx = (left ? -1 : right ? 1 : 0); int dy = (up ? -1 : down ? 1 : 0); - switch(game_status) + switch (game_status) { case GAME_MODE_TITLE: case GAME_MODE_MAIN: @@ -1045,7 +1086,11 @@ void HandleJoystick() if (tape.playing || keyboard) newbutton = ((joy & JOY_BUTTON) != 0); +#if 0 + if (local_player->LevelSolved_GameEnd && newbutton) +#else if (AllPlayersGone && newbutton) +#endif { GameEnd();