From bad5c07f7f5e4132e48f9b3390964975771014a6 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Fri, 2 Mar 2012 17:47:02 +0100 Subject: [PATCH] pause music on pause :D --- TODO | 2 ++ src/level.c | 14 +++++++++++++- src/main.h | 2 ++ src/pause.c | 2 ++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/TODO b/TODO index adfc8ec..490f700 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,8 @@ - check if every gamestate is stable on every platform - moar documentation +- rewrite music handling into mixers - control settings - video settings +- rewrite config handling to allegro - playable levels :D diff --git a/src/level.c b/src/level.c index c3d8d93..7ee6fe3 100644 --- a/src/level.c +++ b/src/level.c @@ -8,6 +8,10 @@ #include "level.h" void Level_Draw(struct Game *game) { + if (!al_get_sample_instance_playing(game->level.music) && (game->loadstate==GAMESTATE_LEVEL)) { + al_set_sample_instance_playing(game->level.music, true); + al_set_sample_instance_position(game->level.music, game->level.music_pos); + } al_set_target_bitmap(game->level.derpy); al_clear_to_color(al_map_rgba(0,0,0,0)); al_draw_bitmap_region(game->level.derpy_walkcycle,al_get_bitmap_width(game->level.derpy)*(game->level.derpy_frame%6),al_get_bitmap_height(game->level.derpy)*(game->level.derpy_frame/6),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0); @@ -36,7 +40,8 @@ void Level_Draw(struct Game *game) { } void Level_Load(struct Game *game) { - if (game->music) al_play_sample(game->level.sample, 0.75, 0.0, 1.0, ALLEGRO_PLAYMODE_LOOP, NULL); + if (game->music) al_play_sample_instance(game->level.music); + //al_play_sample(game->level.sample, 0.75, 0.0, 1.0, ALLEGRO_PLAYMODE_LOOP, NULL); ALLEGRO_EVENT ev; int fadeloop; for(fadeloop=0; fadeloop<256; fadeloop+=tps(game, 600)){ @@ -55,6 +60,8 @@ int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) { game->loadstate = GAMESTATE_MENU; LoadGameState(game); } else if (ev->keyboard.keycode==ALLEGRO_KEY_P) { + game->level.music_pos = al_get_sample_instance_position(game->level.music); + al_set_sample_instance_playing(game->level.music, false); game->gamestate = GAMESTATE_PAUSE; game->loadstate = GAMESTATE_LEVEL; Pause_Load(game); @@ -77,6 +84,11 @@ void Level_Preload(struct Game *game) { fprintf(stderr, "Audio clip sample not loaded!\n" ); exit(-1); } + + game->level.music = al_create_sample_instance(game->level.sample); + al_attach_sample_instance_to_mixer(game->level.music, al_get_default_mixer()); + al_set_sample_instance_playmode(game->level.music, ALLEGRO_PLAYMODE_LOOP); + game->level.derpy = al_create_bitmap(al_get_display_width(game->display)*0.1953125, al_get_display_height(game->display)*0.25); //game->level.derpytmp = al_create_bitmap(500, 400); diff --git a/src/main.h b/src/main.h index a966e05..e3a7c74 100644 --- a/src/main.h +++ b/src/main.h @@ -32,6 +32,8 @@ struct Level { ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */ ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */ ALLEGRO_SAMPLE *sample; /*!< Sample with background music. */ + ALLEGRO_SAMPLE_INSTANCE *music; /*!< Sample instance with background music. */ + unsigned int music_pos; /*!< Position of sample instance. Used when pausing game. */ int current_level; /*!< Level number. */ int derpy_frame; /*!< Current frame of Derpy animation. */ int derpy_frame_tmp; /*!< Counter used to slow down Derpy animation. */ diff --git a/src/pause.c b/src/pause.c index c80d2a0..c03e829 100644 --- a/src/pause.c +++ b/src/pause.c @@ -15,7 +15,9 @@ int Pause_Keydown(struct Game *game, ALLEGRO_EVENT *ev) { void Pause_Load(struct Game* game) { game->gamestate=game->loadstate; + game->loadstate=GAMESTATE_PAUSE; DrawGameState(game); + game->loadstate=game->gamestate; game->gamestate=GAMESTATE_PAUSE; ALLEGRO_BITMAP *fade = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); al_set_target_bitmap(fade);