rnd-20000831-1-src
authorHolger Schemel <info@artsoft.org>
Thu, 31 Aug 2000 18:31:57 +0000 (20:31 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:34:51 +0000 (10:34 +0200)
src/game.c
src/main.h
src/misc.c
src/tools.c

index 4e716e3e9cf894b0f5d36099f07aae4526c4fbd6..5561d17caaa752f1b63d4cb236696b39ca2dba61 100644 (file)
@@ -4563,6 +4563,25 @@ void GameActions()
   }
 
   DrawAllPlayers();
+
+  if (options.debug)                   /* calculate frames per second */
+  {
+    static unsigned long fps_counter = 0;
+    static int fps_frames = 0;
+    unsigned long fps_delay_ms = Counter() - fps_counter;
+
+    fps_frames++;
+
+    if (fps_delay_ms >= 500)   /* calculate fps every 0.5 seconds */
+    {
+      global.frames_per_second = 1000 * (float)fps_frames / fps_delay_ms;
+
+      fps_frames = 0;
+      fps_counter = Counter();
+    }
+
+    redraw_mask |= REDRAW_FPS;
+  }
 }
 
 static boolean AllPlayersInSight(struct PlayerInfo *player, int x, int y)
index 568e5c0eba1f1bc97bf6c99b1b59a9e3a6d3b68f..dfec496c843bb5491109a66fa61c187e2f4faa77 100644 (file)
@@ -247,6 +247,7 @@ struct OptionInfo
   boolean serveronly;
   boolean network;
   boolean verbose;
+  boolean debug;
 };
 
 struct SetupJoystickInfo
@@ -443,7 +444,7 @@ struct GameInfo
 
 struct GlobalInfo
 {
-  int dummy;
+  float frames_per_second;
 };
 
 extern Display        *display;
@@ -1701,6 +1702,7 @@ extern char               *element_info[];
 #define REDRAW_MAIN            (REDRAW_FIELD | \
                                 REDRAW_TILES | \
                                 REDRAW_MICROLEVEL)
+#define REDRAW_FPS             (1 << 10)
 #define REDRAWTILES_THRESHOLD  (SCR_FIELDX * SCR_FIELDY / 2)
 
 /* areas in bitmap PIX_DOOR */
index 8b86b89c3476d77a01244b9cf956bf1ce82309b4..90bbe16a0ffc1baeb99fac530ca07264ad977ebd 100644 (file)
@@ -464,6 +464,10 @@ void GetOptions(char *argv[])
   options.serveronly = FALSE;
   options.network = FALSE;
   options.verbose = FALSE;
+  options.debug = FALSE;
+
+  /* initialize some more global variables */
+  global.frames_per_second = 0;
 
   while (*options_left)
   {
@@ -505,7 +509,7 @@ void GetOptions(char *argv[])
             "Options:\n"
             "  -d, --display machine:0       X server display\n"
             "  -b, --basepath directory      alternative base directory\n"
-            "  -l, --level directory        alternative level directory\n"
+            "  -l, --level directory         alternative level directory\n"
             "  -s, --serveronly              only start network server\n"
             "  -n, --network                 network multiplayer game\n"
             "  -v, --verbose                 verbose mode\n",
@@ -557,6 +561,10 @@ void GetOptions(char *argv[])
     {
       options.verbose = TRUE;
     }
+    else if (strncmp(option, "-debug", option_len) == 0)
+    {
+      options.debug = TRUE;
+    }
     else if (*option == '-')
     {
       Error(ERR_EXIT_HELP, "unrecognized option '%s'", option_str);
index 685323c8a45ac9497ec0748431db40dd0133812d..d4e42abbafe356c94354a505e4c547aecba8a343 100644 (file)
@@ -99,6 +99,49 @@ void BackToFront()
   if (!redraw_mask)
     return;
 
+
+
+  if (1 &&   game_status == PLAYING)
+  {
+    static boolean last_frame_skipped = 0;
+    int fps_slowdown_factor = 2;
+    boolean skip_even_when_not_scrolling = 1;
+    boolean just_scrolling = (ScreenMovDir != 0);
+    boolean p = 0;
+
+    /*
+    printf("ScreenMovDir = %d\n", ScreenMovDir);
+    */
+
+    /*
+    printf("ScreenGfxPos = %d\n", ScreenGfxPos);
+    */
+
+    if (fps_slowdown_factor > 1 &&
+       (FrameCounter % fps_slowdown_factor) &&
+       (just_scrolling || skip_even_when_not_scrolling))
+    {
+      redraw_mask &= ~REDRAW_MAIN;
+
+      if (p)
+       printf("FRAME SKIPPED\n");
+
+      last_frame_skipped = 1;
+    }
+    else
+    {
+      if (last_frame_skipped)
+       redraw_mask |= REDRAW_FIELD;
+
+      last_frame_skipped = 0;
+
+      if (p)
+       printf("frame not skipped\n");
+    }
+  }
+
+
+
   /* synchronize X11 graphics at this point; if we would synchronize the
      display immediately after the buffer switching (after the XFlush),
      this could mean that we have to wait for the graphics to complete,
@@ -151,6 +194,7 @@ void BackToFront()
 #endif
       }
     }
+
     redraw_mask &= ~REDRAW_MAIN;
   }
 
@@ -207,6 +251,14 @@ void BackToFront()
                     SX + x * TILEX, SY + y * TILEY);
   }
 
+  if (redraw_mask & REDRAW_FPS)                /* display frames per second */
+  {
+    char text[100];
+
+    sprintf(text, "%.1f fps", global.frames_per_second);
+    DrawTextExt(window, gc, SX, SY, text, FS_SMALL, FC_YELLOW);
+  }
+
   FlushDisplay();
 
   for(x=0; x<MAX_BUF_XSIZE; x++)