diff options
Diffstat (limited to 'engines/titanic/sound/music_room_handler.cpp')
-rw-r--r-- | engines/titanic/sound/music_room_handler.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp index 5a6f48ae17..fdc98b93f3 100644 --- a/engines/titanic/sound/music_room_handler.cpp +++ b/engines/titanic/sound/music_room_handler.cpp @@ -23,14 +23,17 @@ #include "titanic/sound/music_room_handler.h" #include "titanic/sound/sound_manager.h" #include "titanic/core/project_item.h" +#include "titanic/titanic.h" namespace Titanic { CMusicRoomHandler::CMusicRoomHandler(CProjectItem *project, CSoundManager *soundManager) : - _project(project), _soundManager(soundManager), _stopWaves(false), - _soundHandle(-1), _waveFile(nullptr), _soundVolume(100), - _field108(0) { + _project(project), _soundManager(soundManager), _active(false), + _soundHandle(-1), _waveFile(nullptr), _volume(100) { Common::fill(&_musicWaves[0], &_musicWaves[4], (CMusicWave *)nullptr); + _field108 = 0; + _field118 = 0; + _startTicks = _soundStartTicks = 0; } CMusicRoomHandler::~CMusicRoomHandler() { @@ -62,7 +65,8 @@ CMusicWave *CMusicRoomHandler::createMusicWave(MusicInstrument instrument, int c } void CMusicRoomHandler::createWaveFile(int musicVolume) { - _soundVolume = musicVolume; + _volume = musicVolume; + // TODO // _waveFile = _soundManager->loadMusic() } @@ -80,9 +84,14 @@ void CMusicRoomHandler::stop() { } for (int idx = 0; idx < 4; ++idx) { - if (_stopWaves && _musicWaves[idx]) + _musicWaves[idx]->reset(); + if (_active && _musicWaves[idx]) _musicWaves[idx]->stop(); } + + _field108 = 0; + _field118 = 0; + _startTicks = _soundStartTicks = 0; } bool CMusicRoomHandler::checkInstrument(MusicInstrument instrument) const { @@ -143,4 +152,28 @@ bool CMusicRoomHandler::isBusy() { return _field108 > 0; } +void CMusicRoomHandler::trigger() { + if (_active) { + for (int idx = 0; idx < 4; ++idx) + _musicWaves[idx]->trigger(); + } +} + +void CMusicRoomHandler::update() { + uint currentTicks = g_vm->_events->getTicksCount(); + + if (!_startTicks) { + trigger(); + _startTicks = currentTicks; + } else if (!_soundStartTicks && currentTicks >= (_startTicks + 3000)) { + if (_waveFile) { + CProximity prox; + prox._channelVolume = _volume; + _soundHandle = _soundManager->playSound(*_waveFile, prox); + } + + _soundStartTicks = currentTicks; + } +} + } // End of namespace Titanic |