1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #include "titanic/game/fan_noises.h"
24 #include "titanic/core/room_item.h"
25 #include "titanic/translation.h"
26 
27 namespace Titanic {
28 
BEGIN_MESSAGE_MAP(CFanNoises,CGameObject)29 BEGIN_MESSAGE_MAP(CFanNoises, CGameObject)
30 	ON_MESSAGE(EnterRoomMsg)
31 	ON_MESSAGE(LeaveRoomMsg)
32 	ON_MESSAGE(StatusChangeMsg)
33 	ON_MESSAGE(SetVolumeMsg)
34 	ON_MESSAGE(LoadSuccessMsg)
35 END_MESSAGE_MAP()
36 
37 CFanNoises::CFanNoises() : CGameObject(), _state(-1),
38 	_soundHandle(0), _soundPercent(70), _soundBalance(0), _soundSeconds(0),
39 	_stopSeconds(0), _startFlag(true) {
40 }
41 
save(SimpleFile * file,int indent)42 void CFanNoises::save(SimpleFile *file, int indent) {
43 	file->writeNumberLine(1, indent);
44 	file->writeNumberLine(_state, indent);
45 	file->writeNumberLine(_soundHandle, indent);
46 	file->writeNumberLine(_soundPercent, indent);
47 	file->writeNumberLine(_soundBalance, indent);
48 	file->writeNumberLine(_soundSeconds, indent);
49 	file->writeNumberLine(_stopSeconds, indent);
50 	file->writeNumberLine(_startFlag, indent);
51 
52 	CGameObject::save(file, indent);
53 }
54 
load(SimpleFile * file)55 void CFanNoises::load(SimpleFile *file) {
56 	file->readNumber();
57 	_state = file->readNumber();
58 	_soundHandle = file->readNumber();
59 	_soundPercent = file->readNumber();
60 	_soundBalance = file->readNumber();
61 	_soundSeconds = file->readNumber();
62 	_stopSeconds = file->readNumber();
63 	_startFlag = file->readNumber();
64 
65 	CGameObject::load(file);
66 }
67 
EnterRoomMsg(CEnterRoomMsg * msg)68 bool CFanNoises::EnterRoomMsg(CEnterRoomMsg *msg) {
69 	if (getParent() == msg->_newRoom) {
70 		if (_soundHandle != -1) {
71 			if (isSoundActive(_soundHandle))
72 				stopSound(_soundHandle, _stopSeconds);
73 			_soundHandle = -1;
74 			_startFlag = false;
75 		}
76 
77 		switch (_state) {
78 		case 1:
79 			_soundHandle = playSound(TRANSLATE("b#60.wav", "b#40.wav"), 0, _soundBalance, true);
80 			setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
81 			_startFlag = true;
82 			break;
83 		case 2:
84 			_soundHandle = playSound(TRANSLATE("b#58.wav", "b#38.wav"), 0, _soundBalance, true);
85 			setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
86 			_startFlag = true;
87 			break;
88 		default:
89 			break;
90 		}
91 	}
92 
93 	return true;
94 }
95 
LeaveRoomMsg(CLeaveRoomMsg * msg)96 bool CFanNoises::LeaveRoomMsg(CLeaveRoomMsg *msg) {
97 	if (getParent() == msg->_oldRoom && _soundHandle != -1) {
98 		if (isSoundActive(_soundHandle))
99 			stopSound(_soundHandle, _stopSeconds);
100 
101 		_soundHandle = -1;
102 		_startFlag = false;
103 	}
104 
105 	return true;
106 }
107 
StatusChangeMsg(CStatusChangeMsg * msg)108 bool CFanNoises::StatusChangeMsg(CStatusChangeMsg *msg) {
109 	if (msg->_newStatus >= -1 && msg->_newStatus <= 2) {
110 		int oldState = _state;
111 		_state = msg->_newStatus;
112 
113 		switch (msg->_newStatus) {
114 		case -1:
115 		case 0:
116 			if (_soundHandle != -1) {
117 				if (isSoundActive(_soundHandle))
118 					stopSound(_soundHandle, 1);
119 				_soundHandle = -1;
120 				_startFlag = false;
121 			}
122 
123 			switch (oldState) {
124 			case 1:
125 			case 2:
126 				playSound(TRANSLATE("b#59.wav", "b#39.wav"), _soundPercent, _soundBalance);
127 				break;
128 			default:
129 				break;
130 			}
131 			break;
132 
133 		case 1:
134 			if (_soundHandle != -1) {
135 				if (isSoundActive(_soundHandle))
136 					stopSound(_soundHandle, 1);
137 				_soundHandle = -1;
138 				_startFlag = false;
139 			}
140 
141 			switch (oldState) {
142 			case 0:
143 			case 2:
144 				_soundHandle = playSound(TRANSLATE("b#60.wav", "b#40.wav"), _soundPercent, _soundBalance, true);
145 				_startFlag = true;
146 				break;
147 			default:
148 				break;
149 			}
150 			break;
151 
152 		case 2:
153 			if (_soundHandle != -1) {
154 				if (isSoundActive(_soundHandle))
155 					stopSound(_soundHandle, 1);
156 				_soundHandle = -1;
157 				_startFlag = false;
158 			}
159 
160 			if (oldState == 1) {
161 				_soundHandle = playSound(TRANSLATE("b#58.wav", "b#38.wav"), _soundPercent, _soundBalance, true);
162 				_startFlag = true;
163 			}
164 			break;
165 
166 		default:
167 			break;
168 		}
169 	}
170 
171 	return true;
172 }
173 
SetVolumeMsg(CSetVolumeMsg * msg)174 bool CFanNoises::SetVolumeMsg(CSetVolumeMsg *msg) {
175 	_soundPercent = msg->_volume;
176 
177 	if (_soundHandle != -1 && isSoundActive(_soundHandle))
178 		setSoundVolume(_soundHandle, _soundPercent, msg->_secondsTransition);
179 
180 	return true;
181 }
182 
LoadSuccessMsg(CLoadSuccessMsg * msg)183 bool CFanNoises::LoadSuccessMsg(CLoadSuccessMsg *msg) {
184 	if (_startFlag) {
185 		_startFlag = false;
186 		_soundHandle = -1;
187 
188 		switch (_state) {
189 		case 1:
190 			playSound(TRANSLATE("b#60.wav", "b#40.wav"), 0, _soundBalance, true);
191 			setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
192 			_startFlag = true;
193 			break;
194 
195 		case 2:
196 			playSound(TRANSLATE("b#58.wav", "b#38.wav"), 0, _soundBalance, true);
197 			setSoundVolume(_soundHandle, _soundPercent, _soundSeconds);
198 			_startFlag = true;
199 			break;
200 
201 		default:
202 			break;
203 		}
204 	}
205 
206 	return true;
207 }
208 
209 } // End of namespace Titanic
210