cleanup of unnecessarily convoluted function call
[rocksndiamonds.git] / src / libgame / sound.c
index 473850ddaa729d7121aeaaf5873d658703df51e4..5f497c386c56c6dda9088ecfd87940cd3bcfd36c 100644 (file)
@@ -141,6 +141,15 @@ static MusicInfo *getMusicInfoEntryFromMusicID(int);
 // mixer functions
 // ----------------------------------------------------------------------------
 
+static void Mixer_ChannelFinished(int channel)
+{
+  if (!mixer[channel].active)
+    return;
+
+  mixer[channel].active = FALSE;
+  mixer_active_channels--;
+}
+
 void Mixer_InitChannels(void)
 {
   int i;
@@ -148,6 +157,8 @@ void Mixer_InitChannels(void)
   for (i = 0; i < audio.num_channels; i++)
     mixer[i].active = FALSE;
   mixer_active_channels = 0;
+
+  Mix_ChannelFinished(Mixer_ChannelFinished);
 }
 
 static void Mixer_ResetChannelExpiration(int channel)
@@ -247,13 +258,7 @@ static void Mixer_PlayMusicChannel(void)
 
 static void Mixer_StopChannel(int channel)
 {
-  if (!mixer[channel].active)
-    return;
-
   Mix_HaltChannel(channel);
-
-  mixer[channel].active = FALSE;
-  mixer_active_channels--;
 }
 
 static void Mixer_StopMusicChannel(void)
@@ -519,6 +524,17 @@ void StartMixer(void)
       (int)sqrt((float)(SOUND_MAX_LEFT2RIGHT * SOUND_MAX_LEFT2RIGHT - i * i));
 }
 
+boolean isSoundPlaying(int nr)
+{
+  int i;
+
+  for (i = audio.first_sound_channel; i < audio.num_channels; i++)
+    if (mixer[i].active && mixer[i].nr == nr)
+      return TRUE;
+
+  return FALSE;
+}
+
 
 // THE STUFF ABOVE IS ONLY USED BY THE SOUND SERVER CHILD PROCESS
 // ============================================================================