X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=d29cfcfcf0d2d3100aeafe8aec024f16b65279c1;hb=0c2b6a7610933f9098ec233f7b4c2b52eac3535c;hp=2fe47e4de408086cd4b5d5cc7e1a8c0923c8830d;hpb=cd47bf969c6d8c602b8f5dfa100f0be944bd0e46;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 2fe47e4d..d29cfcfc 100644 --- a/src/events.c +++ b/src/events.c @@ -71,6 +71,9 @@ void EventLoop(void) Delay(10); } + /* refresh window contents from drawing buffer, if needed */ + BackToFront(); + if (game_status == EXITGAME) return; } @@ -270,22 +273,24 @@ void HandleButton(int mx, int my, int button) { static int old_mx = 0, old_my = 0; - if (mx<0 || my<0) + if (button < 0) { mx = old_mx; my = old_my; + button = -button; } else { old_mx = mx; old_my = my; - HandleGadgets(mx,my, button); HandleVideoButtons(mx,my, button); HandleSoundButtons(mx,my, button); HandleGameButtons(mx,my, button); } + HandleGadgets(mx, my, button); + switch(game_status) { case MAINMENU: @@ -332,7 +337,12 @@ void HandleButton(int mx, int my, int button) int x = LEVELX(sx); int y = LEVELY(sy); - printf("INFO: Feld[%d][%d] == %d\n", x,y, Feld[x][y]); + printf("INFO: SCREEN(%d, %d), LEVEL(%d, %d)\n", sx, sy, x, y); + + if (!IN_LEV_FIELD(x, y)) + break; + + printf(" Feld[%d][%d] == %d\n", x,y, Feld[x][y]); printf(" Store[%d][%d] == %d\n", x,y, Store[x][y]); printf(" Store2[%d][%d] == %d\n", x,y, Store2[x][y]); printf(" StorePlayer[%d][%d] == %d\n", x,y, StorePlayer[x][y]); @@ -429,7 +439,17 @@ void HandleKey(KeySym key, int key_status) /* allow quick escape to the main menu with the Escape key */ if (key == XK_Escape && game_status != MAINMENU) { - CloseDoor(DOOR_CLOSE_1 | DOOR_NO_DELAY); + if (game_status == LEVELED) + { + /* draw smaller door */ + XCopyArea(display, pix[PIX_DOOR], drawto, gc, + DOOR_GFX_PAGEX7, 64, + 108, 64, + EX - 4, EY - 12); + redraw_mask |= REDRAW_ALL; + } + + CloseDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY); game_status = MAINMENU; DrawMainMenu(); return; @@ -446,6 +466,8 @@ void HandleKey(KeySym key, int key_status) + HandleGadgetsKeyInput(key); + switch(game_status) { case TYPENAME: @@ -493,6 +515,7 @@ void HandleKey(KeySym key, int key_status) break; case LEVELED: + HandleLevelEditorKeyInput(key); LevelNameTyping(key); break; @@ -536,6 +559,22 @@ void HandleKey(KeySym key, int key_status) break; #endif +#if 1 + case XK_m: + if (MoveSpeed == 8) + { + MoveSpeed = 4; + ScrollStepSize = TILEX/4; + } + else + { + MoveSpeed = 8; + ScrollStepSize = TILEX/8; + } + printf("MoveSpeed == %d\n", MoveSpeed); + break; +#endif + case XK_f: ScrollStepSize = TILEX/8; printf("ScrollStepSize == %d (1/8)\n", ScrollStepSize); @@ -600,7 +639,7 @@ void HandleNoXEvent() { if (button_status && game_status != PLAYING) { - HandleButton(-1,-1, button_status); + HandleButton(0, 0, -button_status); return; } @@ -666,7 +705,8 @@ void HandleJoystick() { static unsigned long joystickmove_delay = 0; - if (joystick && !button && !DelayReached(&joystickmove_delay, 150)) + if (joystick && !button && + !DelayReached(&joystickmove_delay, GADGET_FRAME_DELAY)) newbutton = dx = dy = 0; if (game_status==MAINMENU)