diff options
author | Paul Gilbert | 2016-08-21 17:55:48 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-08-21 17:55:48 -0400 |
commit | 9ebd75742eb3a4fac4f6ff3ae421ec67be1f28eb (patch) | |
tree | d65896309d135fdd54c6713e537e2706a734c47a /engines/titanic/game/fan_noises.cpp | |
parent | 4b51844e52c785d5ec3af2c986de2b28d0cb4d4c (diff) | |
download | scummvm-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.cpp | 179 |
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; } |