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 kActorTypeLKZazu = 0x000f,
51 kActorTypeLKConstellations = 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 kActorTypeDiskImageActor = 0x001d,
63 kActorTypeCanvas = 0x001e,
64 kActorTypeXsnd = 0x001f,
65 kActorTypeXsndMidi = 0x0020,
66 kActorTypeRecorder = 0x0021,
67 kActorTypeFunction = 0x0069
69 const char *actorTypeToStr(ActorType type);
71 enum ActorHeaderSectionType {
72 kActorHeaderEmptySection = 0x0000,
73 kActorHeaderScriptResponse = 0x0017,
74 kActorHeaderChildActorId = 0x0019,
75 kActorHeaderActorId = 0x001a,
76 kActorHeaderChannelIdent = 0x001b,
77 kActorHeaderMovieAnimationChannelIdent = 0x06a4,
78 kActorHeaderMovieAudioChannelIdent = 0x06a5,
79 kActorHeaderActorReference = 0x077b,
80 kActorHeaderBoundingBox = 0x001c,
81 kActorHeaderMouseActiveArea = 0x001d,
82 kActorHeaderZIndex = 0x001e,
83 kActorHeaderStartup = 0x001f,
84 kActorHeaderTransparency = 0x0020,
85 kActorHeaderDiscardAfterUse = 0x0021,
86 kActorHeaderCursorResourceId = 0x0022,
87 kActorHeaderFrameRate = 0x0024,
88 kActorHeaderLoadType = 0x0032,
89 kActorHeaderSoundInfo = 0x0033,
90 kActorHeaderCachingEnabled = 0x0034,
91 kActorHeaderInstallType = 0x0037,
92 kActorHeaderSpriteChunkCount = 0x03e8,
93 kActorHeaderPalette = 0x05aa,
94 kActorHeaderDissolveFactor = 0x05dc,
95 kActorHeaderGetOffstageEvents = 0x05dd,
96 kActorHeaderX = 0x05de,
97 kActorHeaderY = 0x05df,
98 kActorHeaderScaleXAndY = 0x77a,
99 kActorHeaderScaleX = 0x77c,
100 kActorHeaderScaleY = 0x77d,
101 kActorHeaderActorName = 0x0bb8,
102 kStreamMovieProxyInfo = 0x06ac,
105 kActorHeaderDiskImageMaxStrips = 0x774,
106 kActorHeaderDiskImageStripWidth = 0x775,
107 kActorHeaderDiskImageUnk1 = 0x776,
108 kActorHeaderDiskImageMaxImages = 0x777,
109 kActorHeaderDiskImageStripInfo = 0x778,
110 kActorHeaderDiskImageUnkRect = 0x779,
113 kActorHeaderStartPoint = 0x060e,
114 kActorHeaderEndPoint = 0x060f,
115 kActorHeaderPathTotalSteps = 0x0610,
116 kActorHeaderStepRate = 0x0611,
117 kActorHeaderDuration = 0x0612,
120 kActorHeaderCameraViewportOrigin = 0x076f,
121 kActorHeaderCameraLensOpen = 0x0770,
122 kActorHeaderCameraImageActor = 0x77b,
125 kActorHeaderCanvasDissolveFactor = 0x493,
126 kActorHeaderCanvasTransparency = 0x7d0,
129 kActorHeaderStageExtent = 0x0771,
130 kActorHeaderCylindricalX = 0x0772,
131 kActorHeaderCylindricalY = 0x0773,
134 kActorHeaderEditable = 0x03eb,
135 kActorHeaderFontActorId = 0x0258,
136 kActorHeaderInitialText = 0x0259,
137 kActorHeaderTextMaxLength = 0x25a,
138 kActorHeaderTextJustification = 0x025b,
139 kActorHeaderTextPosition = 0x25f,
140 kActorHeaderTextCursorIsVisible = 0x262,
141 kActorHeaderTextConstrainToWidth = 0x263,
142 kActorHeaderTextOverwriteMode = 0x264,
143 kActorHeaderTextAcceptedCharRangeWithOffset = 0x265,
144 kActorHeaderTextAcceptedCharRange = 0x0266,
147 kActorHeaderSpriteClip = 0x03e9,
148 kActorHeaderDefaultSpriteClip = 0x03ea
151 enum CylindricalWrapMode : int;
164 enum MouseEventFlag {
166 kMouseDownFlag = 0x01,
168 kMouseMovedFlag = 0x04,
169 kMouseExitFlag = 0x10,
170 kMouseEnterFlag = 0x08,
171 kMouseUnk1Flag = 0x20,
172 kMouseOutOfFocusFlag = 0x40,
179 void loadFromParameterStream(
Chunk &chunk);
188 #define ARGCOUNTCHECK(n) \ 189 if (args.size() != (n)) { \ 190 warning("%s: Expected %d arguments, got %d", builtInMethodToStr(methodId), (n), args.size()); \ 194 #define ARGCOUNTRANGE(min, max) \ 195 if ((int64)(min) > args.size() || args.size() > (int64)(max)) { \ 196 warning("%s: Expected %d to %d arguments, got %d", builtInMethodToStr(methodId), (min), (max), args.size()); \ 200 #define ARGCOUNTMIN(min) \ 201 if (args.size() < (min)) { \ 202 warning("%s: Expected at least %d arguments, got %d", builtInMethodToStr(methodId), (min), args.size()); \ 207 Actor(ActorType type) : _type(type), _timer(
this) {};
210 virtual void timerEvent(
const TimerEvent &event) {
return; }
214 virtual void initFromParameterStream(
Chunk &chunk);
215 virtual void readParameter(
Chunk &chunk, ActorHeaderSectionType paramType);
216 virtual void loadIsComplete();
218 virtual void onEvent(
const ActorEvent &event);
219 ScriptResponse *findNextTimeScriptResponseAfter(uint32 after)
const;
220 void runScriptResponseIfExists(EventType eventType,
const ScriptValue &arg);
221 void runScriptResponseIfExists(EventType eventType);
223 ActorType type()
const {
return _type; }
224 uint id()
const {
return _id; }
225 uint contextId()
const {
return _contextId; }
227 void setContextId(uint
id) { _contextId = id; }
228 virtual bool isSpatialActor()
const {
return false; }
230 const char *debugName()
const;
233 ActorType _type = kActorTypeEmpty;
234 bool _loadIsComplete =
false;
246 uint _lastProcessedTime = 0;
247 bool setupNextScriptResponseTimer();
248 void triggerRemainingTimerEvents();
249 void processTimeScriptResponses();
259 virtual void readParameter(
Chunk &chunk, ActorHeaderSectionType paramType)
override;
260 virtual void loadIsComplete()
override;
261 virtual void preload(
const Common::Rect &rect,
bool fireStepEvent =
true) {};
262 virtual bool isRectInMemory(
const Common::Rect &rect) {
return true; }
263 virtual bool isReadyToDraw(
DisplayContext &displayContext) {
return true; }
264 virtual bool isLoading() {
return false; }
266 virtual bool isSpatialActor()
const override {
return true; }
267 virtual bool isVisible()
const {
return _isVisible; }
268 virtual Common::Rect getBbox()
const {
return _boundingBox; }
269 int zIndex()
const {
return _zIndex; }
270 void moveTo(int16 x, int16 y);
273 virtual void invalidateMouse();
274 virtual bool interactsWithMouse()
const {
return false; }
276 virtual uint16 findActorToAcceptMouseEvents(
280 bool clipMouseEvents) {
return kNoFlag; }
281 virtual uint16 findActorToAcceptKeyboardEvents(
286 virtual void mouseDownEvent(
const MouseEvent &event) {
return; }
287 virtual void mouseUpEvent(
const MouseEvent &event) {
return; }
288 virtual void mouseEnteredEvent(
const MouseEvent &event) {
return; }
289 virtual void mouseExitedEvent(
const MouseEvent &event) {
return; }
290 virtual void mouseMovedEvent(
const MouseEvent &event) {
return; }
291 virtual void mouseOutOfFocusEvent(
const MouseEvent &event) {
return; }
292 virtual void keyboardEvent(
const KeyboardEvent &event) {
return; }
294 void setParentStage(
StageActor *parentStage) { _parentStage = parentStage; }
295 void setToNoParentStage() { _parentStage =
nullptr; }
296 StageActor *getParentStage()
const {
return _parentStage; }
298 virtual void invalidateLocalBounds();
299 virtual void setAdjustedBounds(CylindricalWrapMode wrapMode);
304 double _dissolveFactor = 1.0;
306 double _parallaxFactorX = 0.0;
307 double _parallaxFactorY = 0.0;
310 bool _isVisible =
false;
311 bool _hasTransparency =
false;
314 void moveToCentered(int16 x, int16 y);
316 void setZIndex(
int zIndex);
317 virtual void setMousePosition(int16 x, int16 y);
319 virtual void setDissolveFactor(
double dissolveFactor);
320 virtual void invalidateLocalZIndex();
Definition: graphics.h:101