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
|