File: object.h

package info (click to toggle)
scummvm 2.9.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 450,268 kB
  • sloc: cpp: 4,297,604; asm: 28,322; python: 12,901; sh: 11,219; java: 8,477; xml: 7,843; perl: 2,633; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (243 lines) | stat: -rw-r--r-- 6,724 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef ASYLUM_RESOURCES_OBJECT_H
#define ASYLUM_RESOURCES_OBJECT_H

#include "common/rect.h"
#include "common/serializer.h"
#include "common/stream.h"

#include "asylum/shared.h"

#include "asylum/system/sound.h"

namespace Asylum {

class Actor;
class AsylumEngine;

class Object : public Common::Serializable {
public:
	Object(AsylumEngine *engine);
	virtual ~Object() {};

	//////////////////////////////////////////////////////////////////////////
	// Public variables & accessors
	//////////////////////////////////////////////////////////////////////////
	int16 x;
	int16 y;
	uint32 flags;
	int32 actionType;

	void setFrameIndex(int32 index) { _frameIndex = index; }
	void setPriority(int32 priority) { _priority = priority; }
	void setSoundResourceId(ResourceId id) { _soundResourceId = id; }

	void setTransparency(int32 val) { _transparency = val; }
	void setField6A4(ActorDirection val) { _field_6A4 = val; }

	Common::Rect   *getBoundingRect()               { return &_boundingRect; }
	uint32          getFrameIndex()                 { return _frameIndex; }
	uint32          getFrameCount()                 { return _frameCount; }
	FrameSoundItem *getFrameSoundItem(uint32 index) { assert(index < ARRAYSIZE(_frameSoundItems)); return &_frameSoundItems[index]; }
	ObjectId        getId()                         { return _id; }
	uint32           getPolygonIndex()              { return _polygonIndex; }
	int32           getPriority()                   { return _priority; }
	ResourceId      getResourceId()                 { return _resourceId; }
	ResourceId      getSoundResourceId()            { return _soundResourceId; }

	Common::Rect   *getRect()         { return &_rect; }
	int32           getScriptIndex()  { return _scriptIndex; }
	int32           getSoundY()       { return _soundCoords.y; }
	int32           getTransparency() { return _transparency; }
	int32           getField688()     { return _field_688; }
	ActorDirection  getField6A4()     { return _field_6A4; }

	/////////////////////////////////////////////////////////////////////////
	// Loading & disabling
	/////////////////////////////////////////////////////////////////////////

	/**
	 * Loads the object data
	 *
	 * @param stream If non-null, the Common::SeekableReadStream to load from
	 */
	void load(Common::SeekableReadStream *stream);

	/**
	 * Sets the object disabled flag
	 */
	void disable();

	/**
	 * Sets the object destroyed flag and remove this object from the graphics queue
	 */
	void disableAndRemoveFromQueue();

	/////////////////////////////////////////////////////////////////////////
	// Visibility
	//////////////////////////////////////////////////////////////////////////

	/**
	 * Query if this object is on screen.
	 *
	 * @return true if on screen, false if not.
	 */
	bool isOnScreen();

	/**
	 * Adjust coordinates.
	 *
	 * @param point The point.
	 */
	void adjustCoordinates(Common::Point *point);

	/////////////////////////////////////////////////////////////////////////
	// Drawing & update
	//////////////////////////////////////////////////////////////////////////

	/**
	 * Draws the object
	 */
	void draw();

	/**
	 * Updates the object.
	 */
	void update();

	/**
	 * Sets the next frame.
	 *
	 * @param flags The flags.
	 */
	void setNextFrame(uint32 flags);

	/////////////////////////////////////////////////////////////////////////
	// Misc
	////////////////////////////////////////////////////////////////////////

	/**
	 * Stop the object related sounds
	 */
	void stopSound();

	/**
	 * Stop all object sounds (called from scripts)
	 */
	void stopAllSounds();

	/**
	 * Checks the object flags
	 *
	 * @return true if it succeeds, false if it fails.
	 */
	bool checkFlags() const;

	char *getName() { return _name; }
	/**
	 * Convert this object into a string representation.
	 *
	 * @param shortString toggle for displaying the full dump or just a
	 *                    short summary string
	 * @return A string representation of this object.
	 */
	Common::String toString(bool shortString = true);

	// Serializable
	void saveLoadWithSerializer(Common::Serializer &s);

private:
	AsylumEngine *_vm;

	//int32 _index;   ///< our index

	//////////////////////////////////////////////////////////////////////////
	// Data
	//////////////////////////////////////////////////////////////////////////
	ObjectId       _id;
	ResourceId     _resourceId;
	// x, y
	Common::Rect   _boundingRect;
	int32          _field_20;
	uint32         _frameIndex;
	uint32         _frameCount;
	int32          _field_2C;
	int32          _field_30;
	int32          _field_34;
	// flags
	int32          _field_3C;
	char           _name[52];
	Common::Rect   _rect;
	uint32         _polygonIndex;
	// actionType
	int32          _gameFlags[10];
	int32          _field_B4;
	uint32         _tickCount;
	uint32         _tickCount2;
	uint32         _field_C0;
	int32          _priority;
	int32          _scriptIndex;
	SoundItem      _soundItems[16];
	FrameSoundItem _frameSoundItems[50];
	int32          _transparency;
	Common::Point  _soundCoords;
	int32          _field_688;
	ResourceId     _randomResourceIds[5];
	ResourceId     _soundResourceId;
	ActorDirection _field_6A4;

	/**
	 * Query if this object is visible.
	 *
	 * @return true if visible, false if not.
	 */
	bool isVisible() const;

	/**
	 * Play object sounds
	 */
	void playSounds();

	/**
	 * Check if any items in the object sound array are playing,
	 * and based on their flag values, stop them accordingly
	 */
	void updateSoundItems();

	/**
	 * Sets the volume.
	 */
	void setVolume();

	/**
	 * Gets a random resource identifier for this object (using the list in _randomResourceIds)
	 *
	 * @return The random resource identifier.
	 */
	ResourceId getRandomResourceId();

}; // end of class Object

} // end of namespace Asylum

#endif // ASYLUM_RESOURCES_OBJECT_H