22 #ifndef MEDIASTATION_ACTOR_H 23 #define MEDIASTATION_ACTOR_H 25 #include "common/events.h" 26 #include "common/keyboard.h" 28 #include "mediastation/datafile.h" 29 #include "mediastation/events.h" 30 #include "mediastation/mediascript/scriptresponse.h" 31 #include "mediastation/mediascript/scriptconstants.h" 32 #include "mediastation/mediascript/scriptvalue.h" 41 kActorTypeEmpty = 0x0000,
42 kActorTypeScreen = 0x0001,
43 kActorTypeStage = 0x0002,
44 kActorTypePath = 0x0004,
45 kActorTypeSound = 0x0005,
46 kActorTypeTimer = 0x0006,
47 kActorTypeImage = 0x0007,
48 kActorTypeHotspot = 0x000b,
49 kActorTypeSprite = 0x000e,
50 kActorTypeStalkingZazu = 0x000f,
51 kActorTypeDotGame = 0x0010,
52 kActorTypeDocument = 0x0011,
53 kActorTypeDiskImage = 0x001d,
54 kActorTypeCursor = 0x000c,
55 kActorTypePrinter = 0x0019,
56 kActorTypeMovie = 0x0016,
57 kActorTypePalette = 0x0017,
58 kActorTypeStreamMovieProxy = 0x18,
59 kActorTypeText = 0x001a,
60 kActorTypeFont = 0x001b,
61 kActorTypeCamera = 0x001c,
62 kActorTypeCanvas = 0x001e,
63 kActorTypeXsnd = 0x001f,
64 kActorTypeXsndMidi = 0x0020,
65 kActorTypeRecorder = 0x0021,
66 kActorTypeFunction = 0x0069
68 const char *actorTypeToStr(ActorType type);
70 enum ActorHeaderSectionType {
71 kActorHeaderEmptySection = 0x0000,
72 kActorHeaderScriptResponse = 0x0017,
73 kActorHeaderChildActorId = 0x0019,
74 kActorHeaderActorId = 0x001a,
75 kActorHeaderChannelIdent = 0x001b,
76 kActorHeaderMovieAnimationChannelIdent = 0x06a4,
77 kActorHeaderMovieAudioChannelIdent = 0x06a5,
78 kActorHeaderActorReference = 0x077b,
79 kActorHeaderBoundingBox = 0x001c,
80 kActorHeaderMouseActiveArea = 0x001d,
81 kActorHeaderZIndex = 0x001e,
82 kActorHeaderStartup = 0x001f,
83 kActorHeaderTransparency = 0x0020,
84 kActorHeaderDiscardAfterUse = 0x0021,
85 kActorHeaderCursorResourceId = 0x0022,
86 kActorHeaderFrameRate = 0x0024,
87 kActorHeaderLoadType = 0x0032,
88 kActorHeaderSoundInfo = 0x0033,
89 kActorHeaderCachingEnabled = 0x0034,
90 kActorHeaderInstallType = 0x0037,
91 kActorHeaderSpriteChunkCount = 0x03e8,
92 kActorHeaderPalette = 0x05aa,
93 kActorHeaderDissolveFactor = 0x05dc,
94 kActorHeaderGetOffstageEvents = 0x05dd,
95 kActorHeaderX = 0x05de,
96 kActorHeaderY = 0x05df,
97 kActorHeaderScaleXAndY = 0x77a,
98 kActorHeaderScaleX = 0x77c,
99 kActorHeaderScaleY = 0x77d,
100 kActorHeaderActorName = 0x0bb8,
101 kStreamMovieProxyInfo = 0x06ac,
104 kActorHeaderDiskImageMaxStrips = 0x774,
105 kActorHeaderDiskImageStripWidth = 0x775,
106 kActorHeaderDiskImageUnk1 = 0x776,
107 kActorHeaderDiskImageMaxImages = 0x777,
108 kActorHeaderDiskImageStripInfo = 0x778,
109 kActorHeaderDiskImageUnkRect = 0x779,
112 kActorHeaderStartPoint = 0x060e,
113 kActorHeaderEndPoint = 0x060f,
114 kActorHeaderPathTotalSteps = 0x0610,
115 kActorHeaderStepRate = 0x0611,
116 kActorHeaderDuration = 0x0612,
119 kActorHeaderCameraViewportOrigin = 0x076f,
120 kActorHeaderCameraLensOpen = 0x0770,
121 kActorHeaderCameraImageActor = 0x77b,
124 kActorHeaderCanvasDissolveFactor = 0x493,
125 kActorHeaderCanvasTransparency = 0x7d0,
128 kActorHeaderStageExtent = 0x0771,
129 kActorHeaderCylindricalX = 0x0772,
130 kActorHeaderCylindricalY = 0x0773,
133 kActorHeaderEditable = 0x03eb,
134 kActorHeaderFontActorId = 0x0258,
135 kActorHeaderInitialText = 0x0259,
136 kActorHeaderTextMaxLength = 0x25a,
137 kActorHeaderTextJustification = 0x025b,
138 kActorHeaderTextPosition = 0x25f,
139 kActorHeaderTextCursorIsVisible = 0x262,
140 kActorHeaderTextConstrainToWidth = 0x263,
141 kActorHeaderTextOverwriteMode = 0x264,
142 kActorHeaderTextAcceptedCharRangeWithOffset = 0x265,
143 kActorHeaderTextAcceptedCharRange = 0x0266,
146 kActorHeaderSpriteClip = 0x03e9,
147 kActorHeaderDefaultSpriteClip = 0x03ea,
150 kActorHeaderDotGameMaxDots = 0x001d,
151 kActorHeaderDotGameHelperSprite1 = 0x0514,
152 kActorHeaderDotGameHelperSprite2 = 0x0515,
153 kActorHeaderDotGameState = 0x0516,
154 kActorHeaderDotGameSpeed = 0x0517,
155 kActorHeaderDotGameLineThickness = 0x0518,
156 kActorHeaderDotGameColor = 0x0519,
159 kActorHeaderStalkingZazuSpriteId = 0x03ec,
160 kActorHeaderStalkingZazuDirections = 0x03ed,
161 kActorHeaderStalkingZazuField = 0x03ee,
162 kActorHeaderStalkingZazuObstacleActorId = 0x03ef,
163 kActorHeaderStalkingZazuUnkX = 0x03f0,
164 kActorHeaderStalkingZazuUnkY = 0x03f1,
165 kActorHeaderStalkingZazuUnkSound1 = 0x03f2,
166 kActorHeaderStalkingZazuUnkSound2 = 0x03f3,
167 kActorHeaderStalkingZazuAudioEnabled = 0x03f4,
168 kActorHeaderStalkingZazuObstaclesToShow = 0x03f5,
169 kActorHeaderStalkingZazuUnkPoint = 0x03f6,
172 enum CylindricalWrapMode : int;
185 enum MouseEventFlag {
187 kMouseDownFlag = 0x01,
189 kMouseMovedFlag = 0x04,
190 kMouseExitFlag = 0x10,
191 kMouseEnterFlag = 0x08,
192 kMouseUnk1Flag = 0x20,
193 kMouseOutOfFocusFlag = 0x40,
200 void loadFromParameterStream(
Chunk &chunk);
209 #define ARGCOUNTCHECK(n) \ 210 if (args.size() != (n)) { \ 211 warning("%s: Expected %d arguments, got %d", builtInMethodToStr(methodId), (n), args.size()); \ 215 #define ARGCOUNTRANGE(min, max) \ 216 if ((int64)(min) > (int64)args.size() || (int64)args.size() > (int64)(max)) { \ 217 warning("%s: Expected %d to %d arguments, got %d", builtInMethodToStr(methodId), (min), (max), args.size()); \ 221 #define ARGCOUNTMIN(min) \ 222 if (args.size() < (min)) { \ 223 warning("%s: Expected at least %d arguments, got %d", builtInMethodToStr(methodId), (min), args.size()); \ 228 Actor(ActorType type) : _type(type), _timer(
this) {};
231 virtual void timerEvent(
const TimerEvent &event) {
return; }
235 virtual void initFromParameterStream(
Chunk &chunk);
236 virtual void readParameter(
Chunk &chunk, ActorHeaderSectionType paramType);
237 virtual void loadIsComplete();
239 virtual void onEvent(
const ActorEvent &event);
240 ScriptResponse *findNextTimeScriptResponseAfter(uint32 after)
const;
241 bool hasScriptResponse(EventType eventType,
const ScriptValue &arg)
const;
242 void runScriptResponseIfExists(EventType eventType,
const ScriptValue &arg);
243 void runScriptResponseIfExists(EventType eventType);
245 ActorType type()
const {
return _type; }
246 uint id()
const {
return _id; }
247 uint contextId()
const {
return _contextId; }
249 void setContextId(uint
id) { _contextId = id; }
250 virtual bool isSpatialActor()
const {
return false; }
253 virtual bool isActive()
const {
return true; }
254 virtual Common::String debugString()
const {
return "<no additional info>"; }
257 const char *debugName()
const;
260 ActorType _type = kActorTypeEmpty;
261 bool _loadIsComplete =
false;
273 uint _lastProcessedTime = 0;
274 bool setupNextScriptResponseTimer();
275 void triggerRemainingTimerEvents();
276 void processTimeScriptResponses();
286 virtual void readParameter(
Chunk &chunk, ActorHeaderSectionType paramType)
override;
287 virtual void loadIsComplete()
override;
288 virtual void preload(
const Common::Rect &rect,
bool fireStepEvent =
true) {};
289 virtual bool isRectInMemory(
const Common::Rect &rect) {
return true; }
290 virtual bool isReadyToDraw(
DisplayContext &displayContext) {
return true; }
291 virtual bool isLoading() {
return false; }
293 virtual bool isSpatialActor()
const override {
return true; }
294 virtual bool isVisible()
const {
return _isVisible; }
295 virtual Common::Rect getBbox()
const {
return _boundingBox; }
296 int zIndex()
const {
return _zIndex; }
297 void moveTo(int16 x, int16 y);
298 void moveToCentered(int16 x, int16 y);
299 void setZIndex(
int zIndex);
302 virtual void invalidateMouse();
303 virtual bool interactsWithMouse()
const {
return false; }
305 virtual uint16 findActorToAcceptMouseEvents(
309 bool clipMouseEvents) {
return kNoFlag; }
310 virtual uint16 findActorToAcceptKeyboardEvents(
315 virtual void mouseDownEvent(
const MouseEvent &event) {
return; }
316 virtual void mouseUpEvent(
const MouseEvent &event) {
return; }
317 virtual void mouseEnteredEvent(
const MouseEvent &event) {
return; }
318 virtual void mouseExitedEvent(
const MouseEvent &event) {
return; }
319 virtual void mouseMovedEvent(
const MouseEvent &event) {
return; }
320 virtual void mouseOutOfFocusEvent(
const MouseEvent &event) {
return; }
321 virtual void keyboardEvent(
const KeyboardEvent &event) {
return; }
323 void setParentStage(
StageActor *parentStage) { _parentStage = parentStage; }
324 void setToNoParentStage() { _parentStage =
nullptr; }
325 StageActor *getParentStage()
const {
return _parentStage; }
327 virtual void invalidateLocalBounds();
328 virtual void setAdjustedBounds(CylindricalWrapMode wrapMode);
333 double _dissolveFactor = 1.0;
335 double _parallaxFactorX = 0.0;
336 double _parallaxFactorY = 0.0;
339 bool _isVisible =
false;
340 bool _hasTransparency =
false;
344 virtual void setMousePosition(int16 x, int16 y);
346 virtual void setDissolveFactor(
double dissolveFactor);
347 virtual void invalidateLocalZIndex();
Definition: graphics.h:122