X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=91af5247198b555b317f1f223ce1d0b8e34911fe;hp=1bb6bc1d32a6aa55a698fd54b1b325ce9c8aabb2;hb=fd76673983c406545f8fe1c89a9202760f30e4e9;hpb=941aee9daf4b4cfb337fbf9688876e86c3b0b001 diff --git a/main.c b/main.c index 1bb6bc1..91af524 100644 --- a/main.c +++ b/main.c @@ -41,6 +41,7 @@ #include "score.h" #include "sprite.h" #include "sound.h" +#include "autopilot.h" // ************************************* VARS // SDL_Surface global variables @@ -165,7 +166,6 @@ new_engine_dots(void) { dx = r * cos(a); dy = r * -sin(a); // screen y is "backwards". - dotptr->active = 1; dotptr->decay = 3; dotptr->heat = 6; @@ -202,8 +202,14 @@ new_engine_dots(void) { dotptr->x += (dotptr->dx - screendx) * time; dotptr->y += (dotptr->dy - screendy) * time; - if(dotptr - edot < MAXENGINEDOTS-1) dotptr++; - else dotptr = edot; + if(!fclip(dotptr->x, XSIZE) && !fclip(dotptr->y, YSIZE)) { + dotptr->active = 1; + if(dotptr - edot < MAXENGINEDOTS-1) { + dotptr++; + } else { + dotptr = edot; + } + } } } } @@ -619,12 +625,16 @@ gameloop() { for(;;) { ms_frame = SDL_GetTicks() - ms_end; ms_end += ms_frame; - if(ms_frame > 1000) { - ms_frame = 1000; + if(ms_frame > 50) { + ms_frame = 50; } t_frame = gamespeed * ms_frame / 50; frames++; + if(opt_autopilot) { + autopilot(t_frame); + } + while(SDL_PollEvent(&e)) { switch(e.type) { case SDL_QUIT: return; @@ -649,6 +659,9 @@ gameloop() { } } keystate = SDL_GetKeyState(NULL); + if(opt_autopilot) { + autopilot_fix_keystates(keystate); + } if(state == GAMEPLAY) { if(!paused) { @@ -658,6 +671,10 @@ gameloop() { if(keystate[SDLK_DOWN] || keystate[SDLK_t]) { ship.dy += THRUSTER_STRENGTH*t_frame; ship.jets |= 1<<1;} if(keystate[SDLK_RIGHT] || keystate[SDLK_n]) { ship.dx += THRUSTER_STRENGTH*t_frame; ship.jets |= 1<<2;} if(keystate[SDLK_UP] || keystate[SDLK_c]) { ship.dy -= THRUSTER_STRENGTH*t_frame; ship.jets |= 1<<3;} + if(ship.jets) { + ship.dx = fconstrain2(ship.dx, -50, 50); + ship.dy = fconstrain2(ship.dy, -50, 50); + } if(keystate[SDLK_3]) { SDL_SaveBMP(surf_screen, "snapshot.bmp"); } } @@ -692,22 +709,26 @@ gameloop() { move_dust(); new_rocks(); - new_engine_dots(); - - collisions(); // BOUNCE off left or right edge of screen if(ship.x < 0 || ship.x+ship.w > XSIZE) { ship.x -= (ship.dx-screendx)*t_frame; ship.dx = screendx - (ship.dx-screendx)*BOUNCINESS; + ship.x = fconstrain(ship.x, XSIZE - ship.w); } // BOUNCE off top or bottom of screen if(ship.y < 0 || ship.y+ship.h > YSIZE) { ship.y -= (ship.dy-screendy)*t_frame; ship.dy = screendy - (ship.dy-screendy)*BOUNCINESS; + ship.y = fconstrain(ship.y, YSIZE - ship.h); } + new_engine_dots(); + + collisions(); // must happen after ship bouncing because it puts pixels where the ship is (thus the ship must be on the screen) + + draw(); // new game @@ -770,7 +791,7 @@ main(int argc, char **argv) { frames = 0; gameloop(); end = SDL_GetTicks(); - // printf("%ld frames in %ld ms, %.2f fps.\n", frames, end-start, frames * 1000.0 / (end-start)); + printf("%ld frames in %ld ms, %.2f fps.\n", frames, end-start, frames * 1000.0 / (end-start)); return 0; }