X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=7a03f33ffd88cb2f6be5d0e7dad8332332ecc55f;hb=b4e74fe434deee25bf99f6d44376d6ae06b7c832;hp=e82d3667b42958144a01fdce30e24a70a3b8cec9;hpb=e43c14095cf443505e6c0d0bc140eab2993c98a4;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index e82d3667..7a03f33f 100644 --- a/src/events.c +++ b/src/events.c @@ -19,6 +19,7 @@ #include "editor.h" #include "files.h" #include "tape.h" +#include "cartoons.h" #include "network.h" @@ -153,6 +154,9 @@ boolean NextValidEvent(Event *event) void EventLoop(void) { + static unsigned int sync_frame_delay = 0; + unsigned int sync_frame_delay_value = GAME_FRAME_DELAY; + while (1) { if (PendingEvent()) /* got event */ @@ -204,6 +208,9 @@ void EventLoop(void) HandleOtherEvents(&event); break; } + + if (DelayReached(&sync_frame_delay, sync_frame_delay_value)) + BackToFront(); } } else @@ -246,18 +253,14 @@ void EventLoop(void) has its own synchronization and is CPU friendly, too */ if (game_status == GAME_MODE_PLAYING) - { HandleGameActions(); - } - else - { - if (!PendingEvent()) /* delay only if no pending events */ - Delay(10); - } /* refresh window contents from drawing buffer, if needed */ BackToFront(); + if (game_status != GAME_MODE_PLAYING) + WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value); + if (game_status == GAME_MODE_QUIT) return; } @@ -1567,7 +1570,8 @@ void HandleKey(Key key, int key_status) default: if (key == KSYM_Escape) { - game_status = GAME_MODE_MAIN; + SetGameStatus(GAME_MODE_MAIN); + DrawMainMenu(); return;