summaryrefslogtreecommitdiffstats
path: root/src/sound
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-12-31 16:58:21 +0100
committerkrzys-h <krzys_h@interia.pl>2013-12-31 16:58:21 +0100
commit999490e88bc699b671b94b88c9a4327d963db378 (patch)
treed2f27e5c80fe00358e5759e9ee40b2fd11d1ccff /src/sound
parent4a237f5925eb0d371e097416b17dd5e919cd2258 (diff)
downloadcolobot-999490e88bc699b671b94b88c9a4327d963db378.tar.gz
colobot-999490e88bc699b671b94b88c9a4327d963db378.tar.bz2
colobot-999490e88bc699b671b94b88c9a4327d963db378.zip
Code for changing music in pause mode
As requested by @Emxx52. Only code for now, we don't have the music yet. Temporairly in developements builds music will change to Prototype (in CBot editor) and Constructive Destruction (in SatCom)
Diffstat (limited to 'src/sound')
-rw-r--r--src/sound/oalsound/alsound.cpp54
-rw-r--r--src/sound/oalsound/alsound.h9
-rw-r--r--src/sound/oalsound/channel.cpp15
-rw-r--r--src/sound/oalsound/channel.h1
-rw-r--r--src/sound/sound.cpp14
-rw-r--r--src/sound/sound.h25
6 files changed, 108 insertions, 10 deletions
diff --git a/src/sound/oalsound/alsound.cpp b/src/sound/oalsound/alsound.cpp
index 7f5d1f1..5058141 100644
--- a/src/sound/oalsound/alsound.cpp
+++ b/src/sound/oalsound/alsound.cpp
@@ -31,6 +31,8 @@ ALSound::ALSound()
m_currentMusic = nullptr;
m_eye.LoadZero();
m_lookat.LoadZero();
+ m_previousMusic.fadeTime = 0.0f;
+ m_previousMusic.music = nullptr;
}
@@ -62,6 +64,11 @@ void ALSound::CleanUp()
{
delete item.music;
}
+
+ if (m_previousMusic.music)
+ {
+ delete m_previousMusic.music;
+ }
for (auto item : m_sounds)
{
@@ -552,6 +559,15 @@ void ALSound::FrameMove(float delta)
}
}
+ if (m_previousMusic.fadeTime > 0.0f) {
+ if (m_previousMusic.currentTime >= m_previousMusic.fadeTime) {
+ m_previousMusic.music->Pause();
+ } else {
+ m_previousMusic.currentTime += delta;
+ m_previousMusic.music->SetVolume(((m_previousMusic.fadeTime-m_previousMusic.currentTime) / m_previousMusic.fadeTime) * m_musicVolume);
+ }
+ }
+
for (auto it : toRemove)
m_oldMusic.remove(it);
}
@@ -609,6 +625,7 @@ bool ALSound::PlayMusic(const std::string &filename, bool bRepeat, float fadeTim
buffer = new Buffer();
buffer->LoadFromFile(file.str(), static_cast<Sound>(-1));
+ m_music[filename] = buffer;
}
else
{
@@ -633,6 +650,43 @@ bool ALSound::PlayMusic(const std::string &filename, bool bRepeat, float fadeTim
return true;
}
+bool ALSound::PlayPauseMusic(const std::string &filename)
+{
+ if (m_previousMusic.fadeTime > 0.0f) {
+ OldMusic old;
+ old.music = m_currentMusic;
+ old.fadeTime = 2.0f;
+ old.currentTime = 0.0f;
+ m_oldMusic.push_back(old);
+ m_currentMusic = nullptr;
+ } else {
+ if (m_currentMusic) {
+ m_previousMusic.music = m_currentMusic;
+ m_previousMusic.fadeTime = 2.0f;
+ m_previousMusic.currentTime = 0.0f;
+ m_currentMusic = nullptr;
+ }
+ }
+ return PlayMusic(filename, true);
+}
+
+void ALSound::StopPauseMusic()
+{
+ if (m_previousMusic.fadeTime > 0.0f) {
+ StopMusic();
+
+ m_currentMusic = m_previousMusic.music;
+ m_previousMusic.music = nullptr;
+ if(m_currentMusic != nullptr) {
+ m_currentMusic->SetVolume(m_musicVolume);
+ if(m_previousMusic.currentTime >= m_previousMusic.fadeTime) {
+ m_currentMusic->Play();
+ }
+ }
+ m_previousMusic.fadeTime = 0.0f;
+ }
+}
+
bool ALSound::RestartMusic()
{
diff --git a/src/sound/oalsound/alsound.h b/src/sound/oalsound/alsound.h
index cd3bdd5..6fb832e 100644
--- a/src/sound/oalsound/alsound.h
+++ b/src/sound/oalsound/alsound.h
@@ -72,12 +72,14 @@ public:
bool StopAll();
bool MuteAll(bool bMute);
- bool PlayMusic(int rank, bool bRepeat, float fadeTime=5.0f);
- bool PlayMusic(const std::string &filename, bool bRepeat, float fadeTime=5.0f);
+ bool PlayMusic(int rank, bool bRepeat, float fadeTime=2.0f);
+ bool PlayMusic(const std::string &filename, bool bRepeat, float fadeTime=2.0f);
bool RestartMusic();
void SuspendMusic();
- void StopMusic(float fadeTime=5.0f);
+ void StopMusic(float fadeTime=2.0f);
bool IsPlayingMusic();
+ bool PlayPauseMusic(const std::string &filename);
+ void StopPauseMusic();
private:
void CleanUp();
@@ -94,6 +96,7 @@ private:
std::map<int, Channel*> m_channels;
Channel *m_currentMusic;
std::list<OldMusic> m_oldMusic;
+ OldMusic m_previousMusic;
Math::Vector m_eye;
Math::Vector m_lookat;
};
diff --git a/src/sound/oalsound/channel.cpp b/src/sound/oalsound/channel.cpp
index b053316..e58ab54 100644
--- a/src/sound/oalsound/channel.cpp
+++ b/src/sound/oalsound/channel.cpp
@@ -74,6 +74,21 @@ bool Channel::Play()
return true;
}
+bool Channel::Pause()
+{
+ if(!m_ready || !IsPlaying())
+ {
+ return false;
+ }
+
+ alSourcePause(m_source);
+ if (alCheck())
+ {
+ GetLogger()->Warn("Could not pause audio sound source. Code: %d\n", alGetCode());
+ }
+ return true;
+}
+
bool Channel::SetPosition(const Math::Vector &pos)
{
diff --git a/src/sound/oalsound/channel.h b/src/sound/oalsound/channel.h
index 0c6cafc..f973198 100644
--- a/src/sound/oalsound/channel.h
+++ b/src/sound/oalsound/channel.h
@@ -50,6 +50,7 @@ public:
~Channel();
bool Play();
+ bool Pause();
bool Stop();
bool SetPosition(const Math::Vector &);
diff --git a/src/sound/sound.cpp b/src/sound/sound.cpp
index 1605e2b..3802611 100644
--- a/src/sound/sound.cpp
+++ b/src/sound/sound.cpp
@@ -59,6 +59,12 @@ void CSoundInterface::AddMusicFiles(const std::string &path)
CacheMusic("Intro2.ogg");
CacheMusic("music010.ogg");
CacheMusic("music011.ogg");
+ // TODO: Add pause music here
+ // CacheMusic("");
+ #if DEV_BUILD
+ CacheMusic("Prototype.ogg");
+ CacheMusic("Constructive.ogg");
+ #endif
}
bool CSoundInterface::Cache(Sound bSound, const std::string &bFile)
@@ -175,3 +181,11 @@ bool CSoundInterface::IsPlayingMusic()
return true;
}
+bool CSoundInterface::PlayPauseMusic(const std::string &filename)
+{
+ return true;
+}
+
+void CSoundInterface::StopPauseMusic()
+{
+}
diff --git a/src/sound/sound.h b/src/sound/sound.h
index d2eee9c..135ee43 100644
--- a/src/sound/sound.h
+++ b/src/sound/sound.h
@@ -287,7 +287,7 @@ public:
* \param fadeTime - time of transition between music
* \return return true on success
*/
- virtual bool PlayMusic(int rank, bool bRepeat, float fadeTime=5.0f);
+ virtual bool PlayMusic(int rank, bool bRepeat, float fadeTime=2.0f);
/** Start playing music
* \param filename - name of file to play
@@ -295,27 +295,38 @@ public:
* \param fadeTime - time of transition between music
* \return return true on success
*/
- virtual bool PlayMusic(const std::string &filename, bool bRepeat, float fadeTime=5.0f);
+ virtual bool PlayMusic(const std::string &filename, bool bRepeat, float fadeTime=2.0f);
/** Restart music
- * @return return true on success
+ * \return return true on success
*/
virtual bool RestartMusic();
- /** Susspend paying music
- * \return return true on success
+ /** Susspend playing music
+ * \return nothing
*/
virtual void SuspendMusic();
/** Stop playing music
- * \return return true on success
+ * \return nothing
*/
- virtual void StopMusic(float fadeTime=5.0f);
+ virtual void StopMusic(float fadeTime=2.0f);
/** Check if music if playing
* \return return true if music is playing
*/
virtual bool IsPlayingMusic();
+
+ /** Start playing pause music
+ * \param filename - name of file to play
+ * \return return true on success
+ */
+ virtual bool PlayPauseMusic(const std::string &filename);
+
+ /** Stop playing pause music and return to the mission music
+ * \return nothing
+ */
+ virtual void StopPauseMusic();
protected:
std::string m_soundPath;