aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/mohawk/myst.cpp5
-rw-r--r--engines/mohawk/myst.h3
-rw-r--r--engines/mohawk/myst_areas.cpp22
-rw-r--r--engines/mohawk/myst_areas.h6
-rw-r--r--engines/mohawk/myst_scripts.h1
5 files changed, 17 insertions, 20 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 558dc2d79d..e9b390ba45 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -310,8 +310,9 @@ Common::Error MohawkEngine_Myst::run() {
switch (event.type) {
case Common::EVENT_MOUSEMOVE:
_needsUpdate = true;
+ _mouse = event.mouse;
// Keep the same resource when dragging
- if (!_dragResource) {
+ if (!_mouseClicked) {
checkCurrentResource();
}
if (_curResource >= 0 && _resources[_curResource]->isEnabled() && _mouseClicked) {
@@ -321,6 +322,7 @@ Common::Error MohawkEngine_Myst::run() {
break;
case Common::EVENT_LBUTTONUP:
_mouseClicked = false;
+ _mouse = event.mouse;
if (_curResource >= 0 && _resources[_curResource]->isEnabled()) {
debug(2, "Sending mouse up event to resource %d", _curResource);
_resources[_curResource]->handleMouseUp(event.mouse);
@@ -328,6 +330,7 @@ Common::Error MohawkEngine_Myst::run() {
break;
case Common::EVENT_LBUTTONDOWN:
_mouseClicked = true;
+ _mouse = event.mouse;
if (_curResource >= 0 && _resources[_curResource]->isEnabled()) {
debug(2, "Sending mouse up event to resource %d", _curResource);
_resources[_curResource]->handleMouseDown(event.mouse);
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 31a743cea6..2d0ea830cb 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -157,6 +157,7 @@ public:
uint16 getCurStack() { return _curStack; }
void setMainCursor(uint16 cursor);
uint16 getMainCursor() { return _mainCursor; }
+ void checkCursorHints();
MystVar *_varStore;
@@ -171,6 +172,7 @@ public:
MystScriptParser *_scriptParser;
Common::Array<MystResource*> _resources;
MystResource *_dragResource;
+ Common::Point _mouse;
bool _showResourceRects;
MystResource *loadResource(Common::SeekableReadStream *rlstStream, MystResource *parent);
@@ -220,7 +222,6 @@ private:
uint16 _cursorHintCount;
MystCursorHint *_cursorHints;
void loadCursorHints();
- void checkCursorHints();
bool _mouseClicked;
uint16 _currentCursor;
uint16 _mainCursor; // Also defines the current page being held (white, blue, red, or none)
diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp
index fddf46e371..217fca8472 100644
--- a/engines/mohawk/myst_areas.cpp
+++ b/engines/mohawk/myst_areas.cpp
@@ -687,18 +687,21 @@ MystResourceType11::~MystResourceType11() {
void MystResourceType11::handleMouseDown(const Common::Point &mouse) {
setPositionClipping(mouse, _pos);
+ _vm->_scriptParser->setInvokingResource(this);
_vm->_scriptParser->runOpcode(_mouseDownOpcode, _var8);
}
void MystResourceType11::handleMouseUp(const Common::Point &mouse) {
setPositionClipping(mouse, _pos);
+ _vm->_scriptParser->setInvokingResource(this);
_vm->_scriptParser->runOpcode(_mouseUpOpcode, _var8);
}
void MystResourceType11::handleMouseDrag(const Common::Point &mouse) {
setPositionClipping(mouse, _pos);
+ _vm->_scriptParser->setInvokingResource(this);
_vm->_scriptParser->runOpcode(_mouseDragOpcode, _var8);
}
@@ -754,27 +757,16 @@ MystResourceType12::MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableRe
debugC(kDebugResource, "\t_frameRect.top: %d", _frameRect.top);
debugC(kDebugResource, "\t_frameRect.right: %d", _frameRect.right);
debugC(kDebugResource, "\t_frameRect.bottom: %d", _frameRect.bottom);
-
- _doAnimation = false;
}
MystResourceType12::~MystResourceType12() {
}
-void MystResourceType12::handleAnimation() {
- // TODO: Probably not final version. Variable/Type 11 Controlled?
- if (_doAnimation) {
- _vm->_gfx->copyImageToScreen(_currentFrame++, _frameRect);
- if ((_currentFrame - _firstFrame) >= _numFrames)
- _doAnimation = false;
- }
-}
-
-void MystResourceType12::handleMouseUp(const Common::Point &mouse) {
- // HACK/TODO: Trigger Animation on Mouse Click. Probably not final version. Variable/Type 11 Controlled?
- _currentFrame = _firstFrame;
- _doAnimation = true;
+void MystResourceType12::drawFrame(uint16 frame) {
+ _currentFrame = _firstFrame + frame;
+ _vm->_gfx->copyImageToScreen(_currentFrame, _frameRect);
+ _vm->_gfx->updateScreen();
}
MystResourceType13::MystResourceType13(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent) : MystResource(vm, rlstStream, parent) {
diff --git a/engines/mohawk/myst_areas.h b/engines/mohawk/myst_areas.h
index 89ce4e18d4..f9aeb8d721 100644
--- a/engines/mohawk/myst_areas.h
+++ b/engines/mohawk/myst_areas.h
@@ -171,6 +171,8 @@ public:
uint16 getList2(uint16 index);
uint16 getList3(uint16 index);
+ uint16 getStepsV() { return _stepsV; }
+
Common::Point _pos;
protected:
void setPositionClipping(const Common::Point &mouse, Common::Point &dest);
@@ -219,8 +221,7 @@ class MystResourceType12 : public MystResourceType11 {
public:
MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
virtual ~MystResourceType12();
- void handleAnimation();
- void handleMouseUp(const Common::Point &mouse);
+ void drawFrame(uint16 frame);
protected:
uint16 _numFrames;
@@ -228,7 +229,6 @@ protected:
Common::Rect _frameRect;
private:
- bool _doAnimation;
uint16 _currentFrame;
};
diff --git a/engines/mohawk/myst_scripts.h b/engines/mohawk/myst_scripts.h
index c0e1bf2e66..11d8a80a78 100644
--- a/engines/mohawk/myst_scripts.h
+++ b/engines/mohawk/myst_scripts.h
@@ -68,6 +68,7 @@ public:
void runOpcode(uint16 op, uint16 var = 0, uint16 argc = 0, uint16 *argv = NULL);
const char *getOpcodeDesc(uint16 op);
MystScript readScript(Common::SeekableReadStream *stream, MystScriptType type);
+ void setInvokingResource(MystResource *resource) { _invokingResource = resource; }
virtual void disablePersistentScripts() = 0;
virtual void runPersistentScripts() = 0;