[Scummvm-cvs-logs] CVS: scummvm/bs2/driver d_sound.cpp,1.62,1.63 d_sound.h,1.19,1.20

Torbj?rn Andersson eriktorbjorn at users.sourceforge.net
Sat Sep 27 09:12:05 CEST 2003


Update of /cvsroot/scummvm/scummvm/bs2/driver
In directory sc8-pr-cvs1:/tmp/cvs-serv2441/driver

Modified Files:
	d_sound.cpp d_sound.h 
Log Message:
Save enough information about the currently playing music before the
credits so that it can be properly resumed afterwards.


Index: d_sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/d_sound.cpp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -d -r1.62 -r1.63
--- d_sound.cpp	26 Sep 2003 14:19:02 -0000	1.62
+++ d_sound.cpp	27 Sep 2003 16:10:42 -0000	1.63
@@ -308,6 +308,62 @@
 	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.
 // --------------------------------------------------------------------------

Index: d_sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/d_sound.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- d_sound.h	26 Sep 2003 14:19:03 -0000	1.19
+++ d_sound.h	27 Sep 2003 16:10:43 -0000	1.20
@@ -100,6 +100,8 @@
 		int32 PauseMusic(void);
 		int32 UnpauseMusic(void);
 		int32 StreamCompMusic(const char *filename, uint32 musicId, bool looping);
+		void saveMusicState();
+		void restoreMusicState();
 		int32 MusicTimeRemaining();
 		int32 ReverseStereo(void);
 		uint8 GetFxVolume(void);
@@ -129,7 +131,7 @@
 		RateConverter *_converter;
 
 		FxHandle fx[MAXFX];
-		MusicHandle music[MAXMUS];
+		MusicHandle music[MAXMUS + 1];
 
 		// We used to have two music volumes - one for each channel -
 		// but they were always set to the same value.





More information about the Scummvm-git-logs mailing list