diff options
author | Torbjörn Andersson | 2003-09-27 16:10:43 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2003-09-27 16:10:43 +0000 |
commit | e19e7c879a1fc88458a3e26715875e60512d755b (patch) | |
tree | d0e41c77c7c6cd96b4aee66c4344e2160b5ac3bb /sword2/driver/d_sound.cpp | |
parent | 796fcfff7e70a4d1951d42ad8b8f39f45914a24e (diff) | |
download | scummvm-rg350-e19e7c879a1fc88458a3e26715875e60512d755b.tar.gz scummvm-rg350-e19e7c879a1fc88458a3e26715875e60512d755b.tar.bz2 scummvm-rg350-e19e7c879a1fc88458a3e26715875e60512d755b.zip |
Save enough information about the currently playing music before the
credits so that it can be properly resumed afterwards.
svn-id: r10429
Diffstat (limited to 'sword2/driver/d_sound.cpp')
-rw-r--r-- | sword2/driver/d_sound.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp index 6dabc572ac..e4020b370b 100644 --- a/sword2/driver/d_sound.cpp +++ b/sword2/driver/d_sound.cpp @@ -308,6 +308,62 @@ int32 Sword2Sound::ReverseStereo(void) { return RD_OK; } +// Save/Restore information about current music so that we can restore it +// after the credits. + +void Sword2Sound::saveMusicState() { + StackLock lock(_mutex); + + int saveStream; + + if (music[0]._streaming && !music[0]._fading) { + saveStream = 0; + } else if (music[1]._streaming && !music[0]._fading) { + saveStream = 1; + } else { + music[2]._streaming = false; + return; + } + + music[2]._streaming = true; + music[2]._fading = 0; + music[2]._looping = music[saveStream]._looping; + music[2]._fileStart = music[saveStream]._fileStart; + music[2]._filePos = music[saveStream]._filePos; + music[2]._fileEnd = music[saveStream]._fileEnd; + music[2]._lastSample = music[saveStream]._lastSample; +} + +void Sword2Sound::restoreMusicState() { + StackLock lock(_mutex); + + int restoreStream; + + if (!music[2]._streaming) + return; + + // Fade out any music that happens to be playing + + for (int i = 0; i < MAXMUS; i++) { + if (music[i]._streaming && !music[i]._fading) + music[i]._fading = FADE_SAMPLES; + } + + if (!music[0]._streaming && !music[0]._fading) { + restoreStream = 0; + } else { + restoreStream = 1; + } + + music[restoreStream]._streaming = true; + music[restoreStream]._fading = 0; + music[restoreStream]._looping = music[2]._looping; + music[restoreStream]._fileStart = music[2]._fileStart; + music[restoreStream]._filePos = music[2]._filePos; + music[restoreStream]._fileEnd = music[2]._fileEnd; + music[restoreStream]._lastSample = music[2]._lastSample; +} + // -------------------------------------------------------------------------- // This function returns the index of the sound effect with the ID passed in. // -------------------------------------------------------------------------- |