JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
compile in version number from configure.ac
[vor.git] / main.c
diff --git a/main.c b/main.c
index fe864bd..708a1fa 100644 (file)
--- a/main.c
+++ b/main.c
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 
 #include "font.h"
 
 #include "args.h"
 #include "common.h"
 #include "config.h"
+#include "vorconfig.h"
 #include "dust.h"
 #include "file.h"
 #include "float.h"
@@ -68,12 +70,15 @@ struct dot {
        int heat;     // heat multiplier (color).
 };
 
+void draw(void);
+
 struct dot edot[MAXENGINEDOTS], *dotptr = edot;
 struct dot bdot[MAXBANGDOTS];
 
 // Other global variables
 char topline[1024];
 char *initerror = "";
+int screenshot_number = 0;
 
 struct ship ship = { SHIP, 0, NULL, XSIZE/2, YSIZE/2, BARRIER_SPEED, 0.0 };
          
@@ -133,6 +138,18 @@ extern int optind, opterr, optopt;
 
 // ************************************* FUNCS
 
+#ifdef nanosleep
+void
+tiny_sleep() {
+       struct timespec t;
+       t.tv_sec = 0;
+       t.tv_nsec = 1;
+       nanosleep(&t, 0);
+}
+#else
+#define tiny_sleep()
+#endif
+
 void
 init_engine_dots() {
        int i;
@@ -347,12 +364,31 @@ void font_cleanup() {
        font_free(g_font);
 }
 
+void
+set_video_mode() {
+       Uint32 flag;
+
+       // Attempt to get the required video size
+       flag = SDL_DOUBLEBUF | SDL_HWSURFACE;
+       if(opt_fullscreen) flag |= SDL_FULLSCREEN;
+       surf_screen = SDL_SetVideoMode(XSIZE,YSIZE,16,flag);
+}
+
+void
+toggle_fullscreen() {
+       opt_fullscreen = 1 - opt_fullscreen;
+       set_video_mode();
+       if(paused) {
+               draw();
+       }
+}
+
+
 int
 init(void) {
 
        int i;
        char *s;
-       Uint32 flag;
 
        // Where are our data files?
        if(!find_files()) exit(1);
@@ -377,10 +413,9 @@ init(void) {
 
        play_tune(TUNE_TITLE_PAGE);
 
+
        // Attempt to get the required video size
-       flag = SDL_DOUBLEBUF | SDL_HWSURFACE;
-       if(opt_fullscreen) flag |= SDL_FULLSCREEN;
-       surf_screen = SDL_SetVideoMode(XSIZE,YSIZE,16,flag);
+       set_video_mode();
 
        // Set the title bar text
        SDL_WM_SetCaption("Variations on Rockdodger", "VoR");
@@ -500,7 +535,7 @@ draw_title_page(void)
        x = (XSIZE-font_width(text))/2 + cos(fadetimer/4.5)*10;
        font_write(x,YSIZE-100 + cos(fadetimer/3)*5,text);
 
-       text = "Version " VERSION;
+       text = "Version " PACKAGE_VERSION;
        x = (XSIZE-font_width(text))/2 + sin(fadetimer/4.5)*10;
        font_write(x,YSIZE-50 + sin(fadetimer/2)*5,text);
 }
@@ -638,7 +673,7 @@ gameloop() {
                        autopilot(t_frame);
                }
 
-               while(SDL_PollEvent(&e)) {
+               while(paused ? SDL_WaitEvent(&e) : SDL_PollEvent(&e)) {
                        switch(e.type) {
                                case SDL_QUIT: return;
                                case SDL_KEYDOWN:
@@ -661,8 +696,21 @@ gameloop() {
                                                                return;
                                                        case SDLK_3:
                                                        case SDLK_PRINT:
-                                                               // FIXME make a unique filename like vor-screenshot-<pid>-<count>.bmp
-                                                               SDL_SaveBMP(surf_screen, "snapshot.bmp");
+                                                               {
+                                                                       FILE *screenshot_fp;
+                                                                       char tmp[30];
+                                                                       char *screenshot_filename = &(tmp[0]);
+                                                                       for(;;) {
+                                                                               snprintf(screenshot_filename, 30, "vor-screenshot-%02i.bmp", screenshot_number++);
+                                                                               screenshot_fp = fopen(screenshot_filename, "r");
+                                                                               if(screenshot_fp) {
+                                                                                       fclose(screenshot_fp);
+                                                                               } else {
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                                       SDL_SaveBMP(surf_screen, screenshot_filename);
+                                                               }
                                                                break;
                                                        case SDLK_p:
                                                        case SDLK_PAUSE:
@@ -674,6 +722,10 @@ gameloop() {
                                                                        ms_end = SDL_GetTicks();
                                                                }
                                                                break;
+                                                       case SDLK_f:
+                                                       case SDLK_F11:
+                                                               toggle_fullscreen();
+                                                               break;
                                                        default:
                                                                // other keys are handled by checking keystate each frame
                                                                break;
@@ -797,6 +849,8 @@ gameloop() {
                        state = HIGH_SCORE_DISPLAY;
                        state_timeout = 400;
                }
+
+               tiny_sleep();
        }
 }