X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=d696ade4edb8aa3d422abecb801896582f8e2f36;hp=2bf77152e5b9c305ce4d0ed6d6d442b58d0f8683;hb=HEAD;hpb=c1db302b3620bf4e0314867cddf094402d76d2d6 diff --git a/main.c b/main.c index 2bf7715..0af1fdd 100644 --- a/main.c +++ b/main.c @@ -26,12 +26,14 @@ #include #include #include +#include #include "font.h" #include "args.h" #include "common.h" -#include "config.h" +#include +#include "vorconfig.h" #include "dust.h" #include "file.h" #include "float.h" @@ -59,6 +61,9 @@ SDL_Surface font *g_font; +#define ENGINEDOT 0 +#define BANGDOT 1 + struct dot { int active; float x, y; @@ -66,8 +71,11 @@ struct dot { float mass; // in DOT_MASS_UNITs float decay; // rate at which to reduce mass. int heat; // heat multiplier (color). + uint8_t type; // BANGDOT or ENGINEDOT }; +void draw(void); + struct dot edot[MAXENGINEDOTS], *dotptr = edot; struct dot bdot[MAXBANGDOTS]; @@ -114,12 +122,12 @@ char *msgs[2][3] = { { "Press SPACE for normal game", "Press '1' for easy game", - "http://jasonwoof.org/vor" + "https://sametwice.com/vor" }, { "Press SPACE for easy game", "Press '2' for normal game", - "http://jasonwoof.org/vor" + "https://sametwice.com/vor" } }; @@ -134,11 +142,28 @@ extern int optind, opterr, optopt; // ************************************* FUNCS +#ifdef HAVE_NANOSLEEP void -init_engine_dots() { +tiny_sleep() { + struct timespec t; + t.tv_sec = 0; + t.tv_nsec = 1; + nanosleep(&t, 0); +} +#else +#define tiny_sleep() +#endif + +void +init_dots() { int i; for(i = 0; ix = -200; +} void move_dot(struct dot *d) @@ -280,6 +309,13 @@ move_dot(struct dot *d) if(hit) if(hit->type != SHIP) { d->active = 0; mass = sprite_mass(hit); + if(d->type == BANGDOT) { + struct rock *rock = (struct rock*)hit; + rock->life -= (d->dx - hit->dx) * (d->dx - hit->dx) + (d->dy - hit->dy) * (d->dy - hit->dy); + if(rock->life < 0) { + kill_rock(rock); + } + } hit->dx += DOT_MASS_UNIT * d->mass * (d->dx - hit->dx) / mass; hit->dy += DOT_MASS_UNIT * d->mass * (d->dy - hit->dy) / mass; } @@ -362,6 +398,9 @@ void toggle_fullscreen() { opt_fullscreen = 1 - opt_fullscreen; set_video_mode(); + if(paused) { + draw(); + } } @@ -432,7 +471,7 @@ init(void) { exit(1); } - init_engine_dots(); + init_dots(); init_dust(); init_sprites(); @@ -516,7 +555,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); } @@ -693,6 +732,12 @@ gameloop() { SDL_SaveBMP(surf_screen, screenshot_filename); } break; + case SDLK_SPACE: + if(state != GAMEPLAY && state != DEAD_PAUSE) { + // don't conflict with space key to start a new game + break; + } + // else fall through case SDLK_p: case SDLK_PAUSE: paused = !paused; @@ -830,6 +875,8 @@ gameloop() { state = HIGH_SCORE_DISPLAY; state_timeout = 400; } + + tiny_sleep(); } }