diff options
| -rw-r--r-- | engines/fullpipe/fullpipe.cpp | 12 | ||||
| -rw-r--r-- | engines/fullpipe/fullpipe.h | 8 | ||||
| -rw-r--r-- | engines/fullpipe/sound.cpp | 37 | 
3 files changed, 41 insertions, 16 deletions
| diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp index 2250a5d4d1..8a9b323761 100644 --- a/engines/fullpipe/fullpipe.cpp +++ b/engines/fullpipe/fullpipe.cpp @@ -123,7 +123,12 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc)  	_musicLocal = 0;  	_trackStartDelay = 0; -	_sceneTrackHandle = new Audio::SoundHandle(); +	_soundStream1 = new Audio::SoundHandle(); +	_soundStream2 = new Audio::SoundHandle(); +	_soundStream3 = new Audio::SoundHandle(); +	_soundStream4 = new Audio::SoundHandle(); + +	_stream2playing = false;  	memset(_sceneTracks, 0, sizeof(_sceneTracks));  	memset(_trackName, 0, sizeof(_trackName)); @@ -205,7 +210,10 @@ FullpipeEngine::~FullpipeEngine() {  	delete _rnd;  	delete _console;  	delete _globalMessageQueueList; -	delete _sceneTrackHandle; +	delete _soundStream1; +	delete _soundStream2; +	delete _soundStream3; +	delete _soundStream4;  }  void FullpipeEngine::initialize() { diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index d8f438b3da..9b755a6504 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -182,6 +182,7 @@ public:  	void playSound(int id, int flag);  	void playTrack(GameVar *sceneVar, const char *name, bool delayed);  	int getSceneTrack(); +	void updateTrackDelay();  	void startSceneTrack();  	void startSoundStream1(char *trackName);  	void stopSoundStream2(); @@ -327,7 +328,12 @@ public:  	void lift_openLift();  	GameVar *_musicGameVar; -	Audio::SoundHandle *_sceneTrackHandle; +	Audio::SoundHandle *_soundStream1; +	Audio::SoundHandle *_soundStream2; +	Audio::SoundHandle *_soundStream3; +	Audio::SoundHandle *_soundStream4; + +	bool _stream2playing;  public: diff --git a/engines/fullpipe/sound.cpp b/engines/fullpipe/sound.cpp index 4ec8dd05ca..0c3eb02aa3 100644 --- a/engines/fullpipe/sound.cpp +++ b/engines/fullpipe/sound.cpp @@ -249,9 +249,9 @@ void Sound::stop() {  void FullpipeEngine::setSceneMusicParameters(GameVar *gvar) {  	warning("STUB: FullpipeEngine::setSceneMusicParameters()"); -#if 0  	stopSoundStream2(); +#if 0  	if (soundStream3)  		FSOUND_Stream_Stop(soundStream4);  #endif @@ -305,11 +305,15 @@ void FullpipeEngine::setSceneMusicParameters(GameVar *gvar) {  		_trackStartDelay = var->getSubVarAsInt("STARTDELAY");  } +void FullpipeEngine::updateTrackDelay() { +	_sceneTrackIsPlaying = false; +	_trackStartDelay = _musicMinDelay + (_musicMaxDelay - _musicMinDelay) * (_updateTicks % 10) / 9; +} +  void FullpipeEngine::startSceneTrack() {  	if (_sceneTrackIsPlaying) { -		if (!_mixer->isSoundHandleActive(*_sceneTrackHandle)) { // Simulate end of sound callback -			_sceneTrackIsPlaying = false; -			_trackStartDelay = _musicMinDelay + (_musicMaxDelay - _musicMinDelay) * (_updateTicks % 10) / 9; +		if (!_mixer->isSoundHandleActive(*_soundStream1)) { // Simulate end of sound callback +			updateTrackDelay();  		}  	} @@ -369,7 +373,7 @@ void FullpipeEngine::startSoundStream1(char *trackName) {  	stopAllSoundStreams();  #ifdef USE_VORBIS -	if (_mixer->isSoundHandleActive(*_sceneTrackHandle)) +	if (_mixer->isSoundHandleActive(*_soundStream1))  		return;  	Common::File *track = new Common::File(); @@ -379,17 +383,17 @@ void FullpipeEngine::startSoundStream1(char *trackName) {  		return;  	}  	Audio::RewindableAudioStream *ogg = Audio::makeVorbisStream(track, DisposeAfterUse::YES); -	_mixer->playStream(Audio::Mixer::kMusicSoundType, _sceneTrackHandle, ogg); +	_mixer->playStream(Audio::Mixer::kMusicSoundType, _soundStream1, ogg);  #endif  }  void FullpipeEngine::stopAllSounds() { -	// _mixer->stopAll(); +	_mixer->stopHandle(*_soundStream1); +	_mixer->stopHandle(*_soundStream2); +	_mixer->stopHandle(*_soundStream3); +	_mixer->stopHandle(*_soundStream4); -	for (int i = 0; i < _currSoundListCount; i++) -		for (int j = 0; j < _currSoundList1[i]->getCount(); j++) { -			_currSoundList1[i]->getSoundByIndex(j)->stop(); -		} +	_stream2playing = false;  }  void FullpipeEngine::toggleMute() { @@ -420,9 +424,9 @@ void FullpipeEngine::playSound(int id, int flag) {  void FullpipeEngine::playTrack(GameVar *sceneVar, const char *name, bool delayed) {  	warning("STUB: FullpipeEngine::playTrack(var, %s, %d)", name, delayed); -#if 0  	stopSoundStream2(); +#if 0  	if (soundStream3)  		FSOUND_Stream_Stop(soundStream4);  #endif @@ -511,10 +515,17 @@ void global_messageHandler_handleSound(ExCommand *cmd) {  }  void FullpipeEngine::stopSoundStream2() { -	warning("STUB: FullpipeEngine::stopSoundStream2()"); +	_stream2playing = false; + +	if (_mixer->isSoundHandleActive(*_soundStream3)) { +		_mixer->stopHandle(*_soundStream2); +		_mixer->stopHandle(*_soundStream3); +	}  }  void FullpipeEngine::stopAllSoundStreams() { +	warning("STUB: stopAllSoundStreams()"); +  	// TODO: Differences from stopAllSounds()  	_mixer->stopAll();  } | 
