X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=6f4fa1c51b3303725490b3fc008cc8c3af7a12f8;hp=358faf5e47ab350e4f2a6a61f82ae1f6dfee9c90;hb=0321321b99a9ddcbb0f6e8493c4cea49619aa9dd;hpb=0d16e986bbae8d7b4f061afdb562a052f43f5a85 diff --git a/main.c b/main.c index 358faf5..6f4fa1c 100644 --- a/main.c +++ b/main.c @@ -347,12 +347,28 @@ 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(); +} + + int init(void) { int i; char *s; - Uint32 flag; // Where are our data files? if(!find_files()) exit(1); @@ -377,10 +393,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"); @@ -517,16 +532,19 @@ draw(void) show_score(); switch (state) { - case GAME_OVER: draw_game_over(); break; + case GAME_OVER: + draw_game_over(); + break; - case TITLE_PAGE: draw_title_page(); break; + case TITLE_PAGE: + draw_title_page(); + break; - case HIGH_SCORE_ENTRY: play_tune(TUNE_HIGH_SCORE_ENTRY); - // and fall through to + case HIGH_SCORE_ENTRY: case HIGH_SCORE_DISPLAY: - // Display de list o high scores mon. display_scores(150,50); break; + case GAMEPLAY: case DEAD_PAUSE: ; // no action necessary @@ -552,6 +570,7 @@ kill_ship(struct ship *ship) if(ship->dx < BARRIER_SPEED) ship->dx = BARRIER_SPEED; } else { state = GAME_OVER; + play_tune(TUNE_TITLE_PAGE); state_timeout = 200.0; fadetimer = 0.0; ship->flags = 0; @@ -593,7 +612,6 @@ update_state(void) // Restore the ship and continue playing ship.flags = DRAW|MOVE|COLLIDE; state = GAMEPLAY; - play_tune(TUNE_GAMEPLAY); break; case GAME_OVER: if(new_high_score(score)) init_score_entry(); @@ -635,7 +653,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: @@ -651,7 +669,6 @@ gameloop() { // continue to display the scores briefly state = HIGH_SCORE_DISPLAY; state_timeout = 200; - play_tune(TUNE_TITLE_PAGE); } } else { switch(e.key.keysym.sym) { @@ -665,10 +682,17 @@ gameloop() { case SDLK_p: case SDLK_PAUSE: paused = !paused; - if(!paused) { + if(paused) { + pause_tune(); + } else { + resume_tune(); 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;