[Scummvm-git-logs] scummvm master -> 02ebaf06b95235d3a2c8b83ec625e9c2d29178cc

dreammaster dreammaster at scummvm.org
Tue Jan 31 04:18:45 CET 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
02ebaf06b9 TITANIC: Implementing music room handler update & trigger


Commit: 02ebaf06b95235d3a2c8b83ec625e9c2d29178cc
    https://github.com/scummvm/scummvm/commit/02ebaf06b95235d3a2c8b83ec625e9c2d29178cc
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-01-30T22:18:37-05:00

Commit Message:
TITANIC: Implementing music room handler update & trigger

Changed paths:
    engines/titanic/sound/music_player.cpp
    engines/titanic/sound/music_player.h
    engines/titanic/sound/music_room_handler.cpp
    engines/titanic/sound/music_room_handler.h
    engines/titanic/sound/music_wave.cpp
    engines/titanic/sound/music_wave.h


diff --git a/engines/titanic/sound/music_player.cpp b/engines/titanic/sound/music_player.cpp
index 1f8a847..6fb073b 100644
--- a/engines/titanic/sound/music_player.cpp
+++ b/engines/titanic/sound/music_player.cpp
@@ -39,7 +39,7 @@ void CMusicPlayer::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(1, indent);
 	file->writeNumberLine(_isActive, indent);
 	file->writeQuotedLine(_stopTarget, indent);
-	file->writeNumberLine(_stopWaves, indent);
+	file->writeNumberLine(_musicActive, indent);
 	file->writeNumberLine(_volume, indent);
 
 	CGameObject::save(file, indent);
@@ -49,7 +49,7 @@ void CMusicPlayer::load(SimpleFile *file) {
 	file->readNumber();
 	_isActive = file->readNumber();
 	_stopTarget = file->readString();
-	_stopWaves = file->readNumber();
+	_musicActive = file->readNumber();
 	_volume = file->readNumber();
 
 	CGameObject::load(file);
@@ -122,7 +122,7 @@ bool CMusicPlayer::LeaveRoomMsg(CLeaveRoomMsg *msg) {
 
 bool CMusicPlayer::CreateMusicPlayerMsg(CCreateMusicPlayerMsg *msg) {
 	if (CMusicRoom::_musicHandler) {
-		CMusicRoom::_musicHandler->setStopWaves(_stopWaves);
+		CMusicRoom::_musicHandler->setActive(_musicActive);
 		return true;
 	}
 
@@ -158,7 +158,7 @@ bool CMusicPlayer::CreateMusicPlayerMsg(CCreateMusicPlayerMsg *msg) {
 		wave->load(5, "z#505.wav", 53);
 		wave->load(6, "z#501.wav", 58);
 
-		CMusicRoom::_musicHandler->setStopWaves(_stopWaves);
+		CMusicRoom::_musicHandler->setActive(_musicActive);
 	}
 
 	return true;
diff --git a/engines/titanic/sound/music_player.h b/engines/titanic/sound/music_player.h
index 3495439..4d322e0 100644
--- a/engines/titanic/sound/music_player.h
+++ b/engines/titanic/sound/music_player.h
@@ -41,12 +41,12 @@ class CMusicPlayer : public CGameObject {
 protected:
 	bool _isActive;
 	CString _stopTarget;
-	bool _stopWaves;
+	bool _musicActive;
 	int _volume;
 public:
 	CLASSDEF;
 	CMusicPlayer() : CGameObject(),
-		_isActive(false), _stopWaves(false), _volume(100) {}
+		_isActive(false), _musicActive(false), _volume(100) {}
 
 	/**
 	 * Save the data for the class to file
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp
index 5a6f48a..fdc98b9 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
diff --git a/engines/titanic/sound/music_room_handler.h b/engines/titanic/sound/music_room_handler.h
index aad8ca1..68a0c51 100644
--- a/engines/titanic/sound/music_room_handler.h
+++ b/engines/titanic/sound/music_room_handler.h
@@ -56,11 +56,16 @@ private:
 	MusicRoomInstrument _array1[4];
 	MusicRoomInstrument _array2[4];
 	Array5Entry _array5[4];
-	bool _stopWaves;
+	bool _active;
 	CWaveFile *_waveFile;
 	int _soundHandle;
-	int _soundVolume;
 	int _field108;
+	int _field118;
+	uint _soundStartTicks;
+	uint _startTicks;
+	int _volume;
+private:
+	void trigger();
 public:
 	CMusicRoomHandler(CProjectItem *project, CSoundManager *soundManager);
 	~CMusicRoomHandler();
@@ -83,10 +88,9 @@ public:
 	bool isBusy();
 
 	/**
-	 * Flags whether the loaded music waves will be stopped when the
-	 * music handler is stopped
+	 * Flags whether the music handler is active
 	 */
-	void setStopWaves(bool flag) { _stopWaves = flag; }
+	void setActive(bool flag) { _active = flag; }
 
 	/**
 	 * Stop playing the music
@@ -142,6 +146,11 @@ public:
 	 * Sets the mute control value
 	 */
 	void setMuteControl(MusicInstrument instrument, bool value);
+
+	/**
+	 * Handles regular updates
+	 */
+	void update();
 };
 
 } // End of namespace Titanic
diff --git a/engines/titanic/sound/music_wave.cpp b/engines/titanic/sound/music_wave.cpp
index b4bb216..5038780 100644
--- a/engines/titanic/sound/music_wave.cpp
+++ b/engines/titanic/sound/music_wave.cpp
@@ -30,17 +30,29 @@ namespace Titanic {
 bool CMusicWave::_pianoToggle;
 int CMusicWave::_pianoCtr;
 int CMusicWave::_bassCtr;
+byte *CMusicWave::_buffer;
 
 void CMusicWave::init() {
 	_pianoToggle = false;
 	_pianoCtr = 0;
 	_bassCtr = 0;
+	_buffer = nullptr;
+}
+
+void CMusicWave::deinit() {
+	delete[] _buffer;
+	_buffer = nullptr;
 }
 
 CMusicWave::CMusicWave(CProjectItem *project, CSoundManager *soundManager, MusicWaveInstrument instrument) :
 		_soundManager(soundManager), _instrument(instrument) {
 	Common::fill(&_gameObjects[0], &_gameObjects[4], (CGameObject *)nullptr);
 	_field20 = _field24 = 0;
+	_field34 = -1;
+	_field38 = 0;
+	_field3C = 0;
+	_field40 = 0;
+	_field44 = 0;
 	_field4C = 0;
 
 	switch (instrument) {
@@ -239,4 +251,20 @@ void CMusicWave::trigger() {
 	}
 }
 
+void CMusicWave::reset() {
+	_field34 = 0;
+	_field38 = 0;
+	_field3C = 0;
+	_field40 = 0;
+	_field44 = 0;
+}
+
+void CMusicWave::setState(int val) {
+	_field34 = -1;
+	_field38 = 0;
+	_field3C = 0;
+	_field40 = val;
+	_field44 = 0;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/sound/music_wave.h b/engines/titanic/sound/music_wave.h
index bbafbb7..eee21a9 100644
--- a/engines/titanic/sound/music_wave.h
+++ b/engines/titanic/sound/music_wave.h
@@ -45,6 +45,7 @@ private:
 	static bool _pianoToggle;
 	static int _pianoCtr;
 	static int _bassCtr;
+	static byte *_buffer;
 private:
 	CSoundManager *_soundManager;
 	Common::Array<CMusicWaveFile> _items;
@@ -53,6 +54,11 @@ private:
 	CGameObject *_gameObjects[4];
 	int _field20;
 	int _field24;
+	int _field34;
+	int _field38;
+	int _field3C;
+	int _field40;
+	int _field44;
 	int _field4C;
 private:
 	/**
@@ -64,6 +70,11 @@ public:
 	 * Handles initialization of static fields
 	 */
 	static void init();
+
+	/**
+	 * Deinitialization of static fields
+	 */
+	static void deinit();
 public:
 	CMusicWave(CProjectItem *project, CSoundManager *soundManager, MusicWaveInstrument instrument);
 
@@ -92,6 +103,9 @@ public:
 	 * musical instrument associated with the instance
 	 */
 	void trigger();
+
+	void reset();
+	void setState(int val);
 };
 
 } // End of namespace Titanic





More information about the Scummvm-git-logs mailing list