summaryrefslogtreecommitdiffstats
path: root/src/sound/oalsound/alsound.cpp
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/oalsound/alsound.cpp
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/oalsound/alsound.cpp')
-rw-r--r--src/sound/oalsound/alsound.cpp54
1 files changed, 54 insertions, 0 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()
{