From 7ac12920bbe8ccf4e99248323091a40c96cf5c90 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Mon, 9 Apr 2012 15:25:56 +0200 Subject: [PATCH] add music to level 1 --- src/level.c | 25 ++++++++++++++++++++++++- src/main.h | 6 +++--- src/moonwalk.c | 21 +++++---------------- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/level.c b/src/level.c index 30c14ae..5300b34 100644 --- a/src/level.c +++ b/src/level.c @@ -82,6 +82,10 @@ bool Stop(struct Game *game, struct TM_Action *action, enum TM_ActionState state } 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); + } if (game->level.current_level!=1) Moonwalk_Draw(game); else { al_clear_to_color(al_map_rgb(0,0,0)); @@ -152,6 +156,7 @@ bool FadeIn(struct Game *game, struct TM_Action *action, enum TM_ActionState sta free(fadeloop); TM_DestroyArgs(action->arguments); action->arguments = NULL; + al_play_sample_instance(game->level.music); } return false; } @@ -204,7 +209,7 @@ bool Welcome(struct Game *game, struct TM_Action *action, enum TM_ActionState st //PrintConsole(game, "WELCOME RUNNING FADE=%f, IN=%d", *in); int fade = *tmp; if (fade>255) fade=255; - if (*tmp > 1500) { *tmp=255; *in=false; } + if (*tmp > 2048) { *tmp=255; *in=false; } al_draw_tinted_bitmap(game->level.welcome, al_map_rgba_f(fade/255.0,fade/255.0,fade/255.0,fade/255.0), 0, 0, 0); if (*in) { *tmp+=tps(game, 600); @@ -251,6 +256,7 @@ void Level_Load(struct Game *game) { TM_AddBackgroundAction(&FadeIn, NULL, 0); TM_AddDelay(1000); TM_AddQueuedBackgroundAction(&Welcome, NULL, 0); + TM_AddDelay(1000); TM_AddAction(&Walk, NULL); TM_AddAction(&Move, NULL); TM_AddAction(&Stop, NULL); @@ -280,6 +286,10 @@ void Level_Load(struct Game *game) { } int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) { + if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) { + game->level.music_pos = al_get_sample_instance_position(game->level.music); + al_set_sample_instance_playing(game->level.music, false); + } if (game->level.current_level!=1) Moonwalk_Keydown(game, ev); if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) { game->gamestate = GAMESTATE_PAUSE; @@ -306,11 +316,24 @@ void Level_ProcessLogic(struct Game *game, ALLEGRO_EVENT *ev) { void Level_Preload(struct Game *game) { Pause_Preload(game); if (game->level.current_level!=1) Moonwalk_Preload(game); + else { + game->level.sample = al_load_sample( "data/levels/1/music.flac" ); + game->level.music = al_create_sample_instance(game->level.sample); + al_attach_sample_instance_to_mixer(game->level.music, game->audio.music); + al_set_sample_instance_playmode(game->level.music, ALLEGRO_PLAYMODE_LOOP); + + if (!game->level.sample){ + fprintf(stderr, "Audio clip sample not loaded!\n" ); + exit(-1); + } + } Level_PreloadBitmaps(game); } void Level_Unload(struct Game *game) { Pause_Unload_Real(game); + al_destroy_sample_instance(game->level.music); + al_destroy_sample(game->level.sample); if (game->level.current_level!=1) Moonwalk_Unload(game); else { TM_Destroy(); diff --git a/src/main.h b/src/main.h index 8d2ed1e..b96c826 100644 --- a/src/main.h +++ b/src/main.h @@ -45,9 +45,6 @@ enum gamestate_enum { struct Moonwalk { ALLEGRO_BITMAP *fade_bitmap; /*!< Bitmap used on fade-in and fade-out animations. */ ALLEGRO_BITMAP *image; /*!< Background texture. */ - 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. */ @@ -63,6 +60,9 @@ struct Level { bool handle_input; int sheet_rows, sheet_cols, sheet_pos; float sheet_tmp, sheet_speed; + 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. */ ALLEGRO_BITMAP *background, *stage, *foreground, *clouds; ALLEGRO_BITMAP *welcome; ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */ diff --git a/src/moonwalk.c b/src/moonwalk.c index ff24ca7..b306c27 100644 --- a/src/moonwalk.c +++ b/src/moonwalk.c @@ -24,10 +24,6 @@ #include "moonwalk.h" void Moonwalk_Draw(struct Game *game) { - if (!al_get_sample_instance_playing(game->level.moonwalk.music) && (game->loadstate==GAMESTATE_LEVEL)) { - al_set_sample_instance_playing(game->level.moonwalk.music, true); - al_set_sample_instance_position(game->level.moonwalk.music, game->level.moonwalk.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.moonwalk.derpy_frame%6),al_get_bitmap_height(game->level.derpy)*(game->level.moonwalk.derpy_frame/6),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0); @@ -66,7 +62,6 @@ void Moonwalk_Load(struct Game *game) { game->level.moonwalk.derpy_frame = 0; game->level.moonwalk.derpy_frame_tmp = 0; game->level.moonwalk.derpy_pos = -0.2; - al_play_sample_instance(game->level.moonwalk.music); ALLEGRO_EVENT ev; int fadeloop; for(fadeloop=0; fadeloop<256; fadeloop+=tps(game, 600)){ @@ -80,10 +75,6 @@ void Moonwalk_Load(struct Game *game) { } int Moonwalk_Keydown(struct Game *game, ALLEGRO_EVENT *ev) { - if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) { - game->level.moonwalk.music_pos = al_get_sample_instance_position(game->level.moonwalk.music); - al_set_sample_instance_playing(game->level.moonwalk.music, false); - } return 0; } @@ -103,12 +94,12 @@ void Moonwalk_PreloadBitmaps(struct Game *game) { void Moonwalk_Preload(struct Game *game) { PrintConsole(game, "Initializing level %d...", game->level.current_level); - game->level.moonwalk.sample = al_load_sample( "data/moonwalk.flac" ); - game->level.moonwalk.music = al_create_sample_instance(game->level.moonwalk.sample); - al_attach_sample_instance_to_mixer(game->level.moonwalk.music, game->audio.music); - al_set_sample_instance_playmode(game->level.moonwalk.music, ALLEGRO_PLAYMODE_LOOP); + game->level.sample = al_load_sample( "data/moonwalk.flac" ); + game->level.music = al_create_sample_instance(game->level.sample); + al_attach_sample_instance_to_mixer(game->level.music, game->audio.music); + al_set_sample_instance_playmode(game->level.music, ALLEGRO_PLAYMODE_LOOP); - if (!game->level.moonwalk.sample){ + if (!game->level.sample){ fprintf(stderr, "Audio clip sample not loaded!\n" ); exit(-1); } @@ -135,6 +126,4 @@ void Moonwalk_Unload(struct Game *game) { al_flip_display(); } al_destroy_bitmap(game->level.moonwalk.fade_bitmap); - al_destroy_sample_instance(game->level.moonwalk.music); - al_destroy_sample(game->level.moonwalk.sample); }