From 6a4ff1a9b52c2dd31b951ad9e3362da5f29b37fc Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Mon, 29 Nov 2010 20:49:42 +0000 Subject: MOHAWK : Finished implementing Selenitic sound receiver svn-id: r54593 --- engines/mohawk/sound.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'engines/mohawk/sound.cpp') diff --git a/engines/mohawk/sound.cpp b/engines/mohawk/sound.cpp index d801907bd0..41d7000ad8 100644 --- a/engines/mohawk/sound.cpp +++ b/engines/mohawk/sound.cpp @@ -96,6 +96,8 @@ Audio::SoundHandle *Sound::playSound(uint16 id, byte volume, bool loop) { audStream = Audio::makeWAVStream(_vm->getResource(ID_MSND, id), DisposeAfterUse::YES); } else audStream = makeMohawkWaveStream(_vm->getResource(ID_MSND, id)); + + handle->name = _vm->getResourceName(ID_MSND, id); break; case GType_ZOOMBINI: audStream = makeMohawkWaveStream(_vm->getResource(ID_SND, id)); @@ -119,6 +121,25 @@ Audio::SoundHandle *Sound::playSound(uint16 id, byte volume, bool loop) { return NULL; } +Audio::SoundHandle *Sound::replaceSound(uint16 id, byte volume, bool loop) { + debug (0, "Replacing sound %d", id); + + //TODO: The original engine does fading + + Common::String name = _vm->getResourceName(ID_MSND, id); + + // Check if sound is already playing + for (uint32 i = 0; i < _handles.size(); i++) { + if (_vm->_mixer->isSoundHandleActive(_handles[i].handle) + && name.equals(_handles[i].name)) { + return &_handles[i].handle; + } + } + + stopSound(); + return playSound(id, volume, loop); +} + void Sound::playSoundBlocking(uint16 id, byte volume) { Audio::SoundHandle *handle = playSound(id, volume); -- cgit v1.2.3