From af4727577f39720564b4339de267aa0aae7af4a5 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Mon, 5 Sep 2011 19:18:46 +0300
Subject: Fix multiply new message sounds at same time.

---
 src/resources/soundeffect.cpp | 2 +-
 src/resources/soundeffect.h   | 3 ++-
 src/sound.cpp                 | 9 ++++++---
 src/sound.h                   | 1 +
 4 files changed, 10 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/resources/soundeffect.cpp b/src/resources/soundeffect.cpp
index 49e7adc31..de11a8786 100644
--- a/src/resources/soundeffect.cpp
+++ b/src/resources/soundeffect.cpp
@@ -53,7 +53,7 @@ Resource *SoundEffect::load(void *buffer, unsigned bufferSize)
     }
 }
 
-bool SoundEffect::play(int loops, int volume)
+bool SoundEffect::play(int loops, int volume, int channel)
 {
     Mix_VolumeChunk(mChunk, volume);
 
diff --git a/src/resources/soundeffect.h b/src/resources/soundeffect.h
index 80f826646..fdd4bd275 100644
--- a/src/resources/soundeffect.h
+++ b/src/resources/soundeffect.h
@@ -54,11 +54,12 @@ class SoundEffect : public Resource
          *
          * @param loops     Number of times to repeat the playback.
          * @param volume    Sample playback volume.
+         * @param channel   Sample playback channel.
          *
          * @return <code>true</code> if the playback started properly
          *         <code>false</code> otherwise.
          */
-        virtual bool play(int loops, int volume);
+        virtual bool play(int loops, int volume, int channel = -1);
 
     protected:
         /**
diff --git a/src/sound.cpp b/src/sound.cpp
index 0a3c75d11..40c929824 100644
--- a/src/sound.cpp
+++ b/src/sound.cpp
@@ -54,7 +54,8 @@ Sound::Sound():
     mMusic(0),
     mPlayBattle(false),
     mPlayGui(false),
-    mPlayMusic(false)
+    mPlayMusic(false),
+    mGuiChannel(-1)
 {
     // This set up our callback function used to
     // handle fade outs endings.
@@ -353,8 +354,10 @@ void Sound::playGuiSfx(const std::string &path)
         paths.getStringValue("sfx") + path);
     if (sample)
     {
-        logger->log("Sound::playSfx() Playing: %s", path.c_str());
-        sample->play(0, 120);
+        logger->log("Sound::playGuiSfx() Playing: %s", path.c_str());
+        int ret = sample->play(0, 120, mGuiChannel);
+        if (ret != -1)
+            mGuiChannel = ret;
     }
 }
 
diff --git a/src/sound.h b/src/sound.h
index 625dd0ea8..16fff161b 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -145,6 +145,7 @@ class Sound : public ConfigListener
         bool mPlayBattle;
         bool mPlayGui;
         bool mPlayMusic;
+        int mGuiChannel;
 };
 
 extern Sound sound;
-- 
cgit v1.2.3-70-g09d2