From: Jason Woofenden Date: Sun, 26 Apr 2009 05:18:09 +0000 (-0400) Subject: music pauses when game pauses and ends when game ends X-Git-Tag: 0.5.4~18 X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=commitdiff_plain;h=a9bcdd09afa1b6ea40a7fb09fdd16b60dc932775 music pauses when game pauses and ends when game ends --- diff --git a/main.c b/main.c index 358faf5..fe864bd 100644 --- a/main.c +++ b/main.c @@ -517,16 +517,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 +555,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 +597,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(); @@ -651,7 +654,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,7 +667,10 @@ gameloop() { case SDLK_p: case SDLK_PAUSE: paused = !paused; - if(!paused) { + if(paused) { + pause_tune(); + } else { + resume_tune(); ms_end = SDL_GetTicks(); } break; diff --git a/sound.c b/sound.c index 6ddc496..471808e 100644 --- a/sound.c +++ b/sound.c @@ -74,18 +74,48 @@ int playing=-1; void play_tune(int i) { - if(!opt_sound) return; - if (playing==i) - return; + if(!opt_sound) { + return; + } + if (playing == i) { + return; + } if (playing) { - Mix_FadeOutMusic(1500); + Mix_FadeOutMusic(2500); + } + if(i == TUNE_GAMEPLAY) { + Mix_FadeInMusic(music[i],-1,2000); + Mix_VolumeMusic(music_volume[i]); } - Mix_FadeInMusic(music[i],-1,2000); - Mix_VolumeMusic(music_volume[i]); playing = i; } + +int tune_paused=0; + +void +pause_tune() { + if(!opt_sound) { + return; + } + if(playing == TUNE_GAMEPLAY && !tune_paused) { + Mix_PauseMusic(); + tune_paused = 1; + } +} + +void +resume_tune() { + if(!opt_sound) { + return; + } + if(playing == TUNE_GAMEPLAY && tune_paused) { + Mix_ResumeMusic(); + tune_paused = 0; + } +} + /* * * The init_sound() routine is called first. diff --git a/sound.h b/sound.h index 57cb6f1..8d5dcee 100644 --- a/sound.h +++ b/sound.h @@ -22,6 +22,8 @@ int init_sound(void); void play_sound(int i); void play_tune(int i); +void pause_tune(); +void resume_tune(); #define TUNE_TITLE_PAGE 0 #define TUNE_GAMEPLAY 1