JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
inching towards opengl
[vor.git] / main.c
diff --git a/main.c b/main.c
index 2bf7715..528509c 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 <config.h>
+#include "vorconfig.h"
 #include "dust.h"
 #include "file.h"
 #include "float.h"
@@ -68,6 +70,8 @@ struct dot {
        int heat;     // heat multiplier (color).
 };
 
+void draw(void);
+
 struct dot edot[MAXENGINEDOTS], *dotptr = edot;
 struct dot bdot[MAXBANGDOTS];
 
@@ -134,6 +138,18 @@ extern int optind, opterr, optopt;
 
 // ************************************* FUNCS
 
+#ifdef HAVE_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;
@@ -323,21 +339,35 @@ draw_dots(void) {
 }
 
 SDL_Surface *
-load_image(char *filename)
-{
+_load_image(char *filename, int alpha) {
        SDL_Surface *tmp, *img = NULL;
        char *s = add_data_path(filename);
        if(s) {
                tmp = IMG_Load(s);
                free(s);
                if(tmp) {
-                       img = SDL_DisplayFormat(tmp);
+                       if(alpha) {
+                               img = SDL_DisplayFormatAlpha(tmp);
+                       } else {
+                               img = SDL_DisplayFormat(tmp);
+                       }
                        SDL_FreeSurface(tmp);
                }
        }
        return img;
 }
 
+SDL_Surface *
+load_image(char *filename) {
+       return _load_image(filename, 0);
+}
+
+SDL_Surface *
+load_image_alpha(char *filename) {
+       return _load_image(filename, 1);
+}
+
+
 void
 load_ship(void)
 {
@@ -362,6 +392,9 @@ void
 toggle_fullscreen() {
        opt_fullscreen = 1 - opt_fullscreen;
        set_video_mode();
+       if(paused) {
+               draw();
+       }
 }
 
 
@@ -412,12 +445,12 @@ init(void) {
        }
 
        // Load the banners
-       NULLERROR(surf_b_variations = load_image("b_variations.png"));
-       NULLERROR(surf_b_on = load_image("b_on.png"));
-       NULLERROR(surf_b_rockdodger = load_image("b_rockdodger.png"));
+       NULLERROR(surf_b_variations = load_image_alpha("b_variations.png"));
+       NULLERROR(surf_b_on = load_image_alpha("b_on.png"));
+       NULLERROR(surf_b_rockdodger = load_image_alpha("b_rockdodger.png"));
 
-       NULLERROR(surf_b_game = load_image("b_game.png"));
-       NULLERROR(surf_b_over = load_image("b_over.png"));
+       NULLERROR(surf_b_game = load_image_alpha("b_game.png"));
+       NULLERROR(surf_b_over = load_image_alpha("b_over.png"));
 
        // Load the life indicator (small ship) graphic.
        NULLERROR(surf_life = load_image("life.png"));
@@ -516,7 +549,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);
 }
@@ -830,6 +863,8 @@ gameloop() {
                        state = HIGH_SCORE_DISPLAY;
                        state_timeout = 400;
                }
+
+               tiny_sleep();
        }
 }