improved synchronization of main game loop
[rocksndiamonds.git] / src / events.c
index 7a03f33ffd88cb2f6be5d0e7dad8332332ecc55f..4c71dca04ece48c1d1e0b436656b51234f4c5c90 100644 (file)
@@ -161,8 +161,13 @@ void EventLoop(void)
   {
     if (PendingEvent())                /* got event */
     {
+      // use separate frame delay counter to not reset main delay counter
+      unsigned int sync_frame_delay2 = 0;
+      unsigned int sync_frame_delay_value2 = sync_frame_delay_value;
       Event event;
 
+      ResetDelayCounter(&sync_frame_delay2);
+
       while (NextValidEvent(&event))
       {
        switch (event.type)
@@ -209,11 +214,13 @@ void EventLoop(void)
            break;
        }
 
-       if (DelayReached(&sync_frame_delay, sync_frame_delay_value))
-         BackToFront();
+       // do not handle events for longer than standard frame delay period
+       if (DelayReached(&sync_frame_delay2, sync_frame_delay_value2))
+         break;
       }
     }
-    else
+
+    // always handle non-event game actions for every game frame interval
     {
       if (game_status == GAME_MODE_TITLE)
       {