X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=c669e5e7b5d24f189f297768a4c1c116515b31d8;hp=af4a4c5690f17aa8878fda42b2f556e10348567e;hb=4b0c6356359ee52f98cee8fa578179c6c41d4ef1;hpb=d4eb344ff45f9e02bf2de2192bc752f5d09be287 diff --git a/src/events.c b/src/events.c index af4a4c56..c669e5e7 100644 --- a/src/events.c +++ b/src/events.c @@ -70,10 +70,13 @@ void EventLoop(void) has its own synchronization and is CPU friendly, too */ if (game_status != PLAYING) - Delay(1000); + { + XSync(display, FALSE); + Delay(10000); + } } - if (game_status==EXITGAME) + if (game_status == EXITGAME) return; } } @@ -173,10 +176,17 @@ void HandleExposeEvent(XExposeEvent *event) SetDrawtoField(DRAW_DIRECT); } - if (soft_scrolling_on && game_status==PLAYING) + if (soft_scrolling_on && game_status == PLAYING) + { + int fx = FX, fy = FY; + + fx += (PlayerMovDir & (MV_LEFT|MV_RIGHT) ? ScreenMovPos : 0); + fy += (PlayerMovDir & (MV_UP|MV_DOWN) ? ScreenMovPos : 0); + XCopyArea(display,fieldbuffer,backbuffer,gc, - FX,FY, SXSIZE,SYSIZE, + fx,fy, SXSIZE,SYSIZE, SX,SY); + } XCopyArea(display,drawto,window,gc, x,y, width,height, x,y); @@ -288,9 +298,6 @@ void HandleButton(int mx, int my, int button) } } -int GameSpeed = 2; -int MoveSpeed = 8; - void HandleKey(KeySym key, int key_status) { int joy = 0; @@ -700,6 +707,7 @@ void HandleJoystick() break; case PLAYING: { + static int player_frame_reset_delay = 0; BOOL moved = FALSE, snapped = FALSE, bombed = FALSE; if (GameOver && newbutton) @@ -715,6 +723,8 @@ void HandleJoystick() if (joy) { + player_frame_reset_delay = 0; + if (button1) snapped = SnapField(dx,dy); else @@ -737,7 +747,8 @@ void HandleJoystick() { DigField(0,0,0,0,DF_NO_PUSH); SnapField(0,0); - PlayerFrame = 0; + if (++player_frame_reset_delay > MoveSpeed) + PlayerFrame = 0; } if (tape.playing && !tape.pausing && !joy && tape.counter