aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/fan_noises.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-21 17:55:48 -0400
committerPaul Gilbert2016-08-21 17:55:48 -0400
commit9ebd75742eb3a4fac4f6ff3ae421ec67be1f28eb (patch)
treed65896309d135fdd54c6713e537e2706a734c47a /engines/titanic/game/fan_noises.cpp
parent4b51844e52c785d5ec3af2c986de2b28d0cb4d4c (diff)
downloadscummvm-rg350-9ebd75742eb3a4fac4f6ff3ae421ec67be1f28eb.tar.gz
scummvm-rg350-9ebd75742eb3a4fac4f6ff3ae421ec67be1f28eb.tar.bz2
scummvm-rg350-9ebd75742eb3a4fac4f6ff3ae421ec67be1f28eb.zip
TITANIC: Implemented fan game classes
Diffstat (limited to 'engines/titanic/game/fan_noises.cpp')
-rw-r--r--engines/titanic/game/fan_noises.cpp179
1 files changed, 161 insertions, 18 deletions
diff --git a/engines/titanic/game/fan_noises.cpp b/engines/titanic/game/fan_noises.cpp
index 14177ab64e..c6e6d203dd 100644
--- a/engines/titanic/game/fan_noises.cpp
+++ b/engines/titanic/game/fan_noises.cpp
@@ -21,42 +21,185 @@
*/
#include "titanic/game/fan_noises.h"
+#include "titanic/core/room_item.h"
namespace Titanic {
-CFanNoises::CFanNoises() : CGameObject(), _fieldBC(-1),
- _fieldC0(0), _fieldC4(70), _fieldC8(-1), _fieldCC(0),
- _fieldD0(0), _fieldD4(-1) {
+BEGIN_MESSAGE_MAP(CFanNoises, CGameObject)
+ ON_MESSAGE(EnterRoomMsg)
+ ON_MESSAGE(LeaveRoomMsg)
+ ON_MESSAGE(StatusChangeMsg)
+ ON_MESSAGE(SetVolumeMsg)
+ ON_MESSAGE(LoadSuccessMsg)
+END_MESSAGE_MAP()
+
+CFanNoises::CFanNoises() : CGameObject(), _state(-1),
+ _soundHandle(0), _soundPercent(70), _soundV3(-1), _soundSeconds(0),
+ _stopSeconds(0), _startFlag(true) {
}
void CFanNoises::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeNumberLine(_fieldBC, indent);
- file->writeNumberLine(_fieldC0, indent);
- file->writeNumberLine(_fieldC4, indent);
- file->writeNumberLine(_fieldC8, indent);
- file->writeNumberLine(_fieldCC, indent);
- file->writeNumberLine(_fieldD0, indent);
- file->writeNumberLine(_fieldD4, indent);
+ file->writeNumberLine(_state, indent);
+ file->writeNumberLine(_soundHandle, indent);
+ file->writeNumberLine(_soundPercent, indent);
+ file->writeNumberLine(_soundV3, indent);
+ file->writeNumberLine(_soundSeconds, indent);
+ file->writeNumberLine(_stopSeconds, indent);
+ file->writeNumberLine(_startFlag, indent);
CGameObject::save(file, indent);
}
void CFanNoises::load(SimpleFile *file) {
file->readNumber();
- _fieldBC = file->readNumber();
- _fieldC0 = file->readNumber();
- _fieldC4 = file->readNumber();
- _fieldC8 = file->readNumber();
- _fieldCC = file->readNumber();
- _fieldD0 = file->readNumber();
- _fieldD4 = file->readNumber();
+ _state = file->readNumber();
+ _soundHandle = file->readNumber();
+ _soundPercent = file->readNumber();
+ _soundV3 = file->readNumber();
+ _soundSeconds = file->readNumber();
+ _stopSeconds = file->readNumber();
+ _startFlag = file->readNumber();
CGameObject::load(file);
}
bool CFanNoises::EnterRoomMsg(CEnterRoomMsg *msg) {
- warning("CFanNoises::handleEvent");
+ if (getParent() == msg->_newRoom) {
+ if (_soundHandle != -1) {
+ if (isSoundActive(_soundHandle))
+ stopSound(_soundHandle, _stopSeconds);
+ _soundHandle = -1;
+ _startFlag = false;
+ }
+
+ switch (_state) {
+ case 1:
+ _soundHandle = playSound("b#60.wav", 0, _soundV3, true);
+ setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
+ _startFlag = true;
+ break;
+ case 2:
+ _soundHandle = playSound("b#58.wav", 0, _soundV3, true);
+ setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
+ _startFlag = true;
+ break;
+ default:
+ break;
+ }
+ }
+
+ return true;
+}
+
+bool CFanNoises::LeaveRoomMsg(CLeaveRoomMsg *msg) {
+ if (getParent() == msg->_oldRoom && _soundHandle != -1) {
+ if (isSoundActive(_soundHandle))
+ stopSound(_soundHandle, _stopSeconds);
+
+ _soundHandle = -1;
+ _startFlag = false;
+ }
+
+ return true;
+}
+
+bool CFanNoises::StatusChangeMsg(CStatusChangeMsg *msg) {
+ if (msg->_newStatus >= -1 && msg->_newStatus <= 2) {
+ int oldState = _state;
+ _state = msg->_newStatus;
+
+ switch (msg->_newStatus) {
+ case -1:
+ case 0:
+ if (_soundHandle != -1) {
+ if (isSoundActive(_soundHandle))
+ stopSound(_soundHandle, 1);
+ _soundHandle = -1;
+ _startFlag = false;
+ }
+
+ switch (oldState) {
+ case 1:
+ case 2:
+ playSound("b#59.wav", _soundPercent, _soundV3);
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case 1:
+ if (_soundHandle != -1) {
+ if (isSoundActive(_soundHandle))
+ stopSound(_soundHandle, 1);
+ _soundHandle = -1;
+ _startFlag = false;
+ }
+
+ switch (oldState) {
+ case 1:
+ case 2:
+ _soundHandle = playSound("b#60.wav", _soundPercent, _soundV3);
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ if (_soundHandle != -1) {
+ if (isSoundActive(_soundHandle))
+ stopSound(_soundHandle, 1);
+ _soundHandle = -1;
+ _startFlag = false;
+ }
+
+ if (oldState == 1) {
+ _soundHandle = playSound("b#58.wav", _soundPercent, _soundV3);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return true;
+}
+
+bool CFanNoises::SetVolumeMsg(CSetVolumeMsg *msg) {
+ _soundPercent = msg->_volume;
+
+ if (_soundHandle != -1 && isSoundActive(_soundHandle))
+ setSoundVolume(_soundHandle, _soundPercent, msg->_secondsTransition);
+
+ return true;
+}
+
+bool CFanNoises::LoadSuccessMsg(CLoadSuccessMsg *msg) {
+ if (_startFlag) {
+ _startFlag = false;
+ _soundHandle = -1;
+
+ switch (_state) {
+ case 1:
+ playSound("b#60.wav", 0, _soundV3, true);
+ setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
+ _startFlag = true;
+ break;
+
+ case 2:
+ playSound("b#58.wav", 0, _soundV3, true);
+ setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
+ _startFlag = true;
+ break;
+
+ default:
+ break;
+ }
+ }
+
return true;
}