From: Holger Schemel Date: Tue, 20 Dec 2016 19:46:46 +0000 (+0100) Subject: fixed bug with restarting same menu music on different screens X-Git-Tag: 4.0.0.0~1 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=8d71e6fb8309bd90ce5f2900d84c686b17950492;p=rocksndiamonds.git fixed bug with restarting same menu music on different screens --- diff --git a/src/libgame/sound.c b/src/libgame/sound.c index e860ba5a..cb788e7e 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -116,6 +116,8 @@ static MusicInfo **Music_NoConf = NULL; static int num_music_noconf = 0; static int stereo_volume[SOUND_MAX_LEFT2RIGHT + 1]; +static char *currently_playing_music_filename = NULL; + /* ========================================================================= */ /* THE STUFF BELOW IS ONLY USED BY THE SOUND SERVER CHILD PROCESS */ @@ -242,6 +244,8 @@ static void Mixer_StopMusicChannel() Mixer_StopChannel(audio.music_channel); Mix_HaltMusic(); + + setString(¤tly_playing_music_filename, NULL); } static void Mixer_FadeChannel(int channel) @@ -259,6 +263,8 @@ static void Mixer_FadeMusicChannel() Mixer_FadeChannel(audio.music_channel); Mix_FadeOutMusic(SOUND_FADING_INTERVAL); + + setString(¤tly_playing_music_filename, NULL); } static void Mixer_UnFadeChannel(int channel) @@ -322,6 +328,9 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) mixer[audio.music_channel] = snd_ctrl; Mixer_PlayMusicChannel(); + setString(¤tly_playing_music_filename, + getBaseNamePtr(snd_info->source_filename)); + return; } @@ -696,6 +705,11 @@ static MusicInfo *getMusicInfoEntryFromMusicID(int pos) return mus_info[list_pos]; } +char *getCurrentlyPlayingMusicFilename() +{ + return currently_playing_music_filename; +} + int getSoundListPropertyMappingSize() { return sound_info->num_property_mapping_entries; diff --git a/src/libgame/sound.h b/src/libgame/sound.h index 26e882b3..8eb344ef 100644 --- a/src/libgame/sound.h +++ b/src/libgame/sound.h @@ -121,6 +121,7 @@ int getSoundListSize(); int getMusicListSize(); struct FileInfo *getSoundListEntry(int); struct FileInfo *getMusicListEntry(int); +char *getCurrentlyPlayingMusicFilename(); int getSoundListPropertyMappingSize(); int getMusicListPropertyMappingSize(); struct PropertyMapping *getSoundListPropertyMapping(); diff --git a/src/tools.c b/src/tools.c index 9b573f66..b07e19d3 100644 --- a/src/tools.c +++ b/src/tools.c @@ -8398,7 +8398,11 @@ void PlayMenuMusicExt(int music) void PlayMenuMusic() { - PlayMenuMusicExt(menu.music[game_status]); + char *curr_music = getCurrentlyPlayingMusicFilename(); + char *next_music = getMusicListEntry(menu.music[game_status])->filename; + + if (!strEqual(curr_music, next_music)) + PlayMenuMusicExt(menu.music[game_status]); } void PlayMenuSoundsAndMusic() @@ -8407,9 +8411,24 @@ void PlayMenuSoundsAndMusic() PlayMenuMusic(); } +static void FadeMenuSounds() +{ + FadeSounds(); +} + +static void FadeMenuMusic() +{ + char *curr_music = getCurrentlyPlayingMusicFilename(); + char *next_music = getMusicListEntry(menu.music[game_status])->filename; + + if (!strEqual(curr_music, next_music)) + FadeMusic(); +} + void FadeMenuSoundsAndMusic() { - FadeSoundsAndMusic(); + FadeMenuSounds(); + FadeMenuMusic(); } void PlaySoundActivating()