aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorBastien Bouclet2010-11-29 20:52:04 +0000
committerBastien Bouclet2010-11-29 20:52:04 +0000
commitfc504c72e8bf17eec0dce21b187649b4fd9a3e8c (patch)
tree503f0404dc46b97f42690ac9ac3d0bd3ecf8cb84 /engines
parentdab856c33f0fdb054f692564978b5950e31702e9 (diff)
downloadscummvm-rg350-fc504c72e8bf17eec0dce21b187649b4fd9a3e8c.tar.gz
scummvm-rg350-fc504c72e8bf17eec0dce21b187649b4fd9a3e8c.tar.bz2
scummvm-rg350-fc504c72e8bf17eec0dce21b187649b4fd9a3e8c.zip
MOHAWK: Update area type 11 position when the mouse moves
svn-id: r54602
Diffstat (limited to 'engines')
-rw-r--r--engines/mohawk/myst.cpp7
-rw-r--r--engines/mohawk/myst.h1
-rw-r--r--engines/mohawk/myst_areas.cpp61
-rw-r--r--engines/mohawk/myst_areas.h32
4 files changed, 64 insertions, 37 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 74fe466d7c..268d9bb501 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -293,19 +293,18 @@ Common::Error MohawkEngine_Myst::run() {
while (_eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_MOUSEMOVE:
- _mousePos = event.mouse;
_needsUpdate = true;
checkCurrentResource();
if (_curResource >= 0 && _mouseClicked) {
debug(2, "Sending mouse move event to resource %d\n", _curResource);
- _resources[_curResource]->handleMouseDrag();
+ _resources[_curResource]->handleMouseDrag(&event.mouse);
}
break;
case Common::EVENT_LBUTTONUP:
_mouseClicked = false;
if (_curResource >= 0) {
debug(2, "Sending mouse up event to resource %d\n", _curResource);
- _resources[_curResource]->handleMouseUp();
+ _resources[_curResource]->handleMouseUp(&event.mouse);
}
drawResourceImages();
@@ -314,7 +313,7 @@ Common::Error MohawkEngine_Myst::run() {
_mouseClicked = true;
if (_curResource >= 0) {
debug(2, "Sending mouse up event to resource %d\n", _curResource);
- _resources[_curResource]->handleMouseDown();
+ _resources[_curResource]->handleMouseDown(&event.mouse);
}
break;
case Common::EVENT_KEYDOWN:
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index eba741ddd2..8fe06e6be3 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -235,7 +235,6 @@ private:
MystCursorHint *_cursorHints;
void loadCursorHints();
void checkCursorHints();
- Common::Point _mousePos;
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 d155843f74..1f196faf43 100644
--- a/engines/mohawk/myst_areas.cpp
+++ b/engines/mohawk/myst_areas.cpp
@@ -77,7 +77,7 @@ MystResource::MystResource(MohawkEngine_Myst *vm, Common::SeekableReadStream *rl
MystResource::~MystResource() {
}
-void MystResource::handleMouseUp() {
+void MystResource::handleMouseUp(Common::Point *mouse) {
if (_dest != 0)
_vm->changeToCard(_dest);
else
@@ -90,7 +90,7 @@ MystResourceType5::MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableRead
_script = vm->_scriptParser->readScript(rlstStream, kMystScriptNormal);
}
-void MystResourceType5::handleMouseUp() {
+void MystResourceType5::handleMouseUp(Common::Point *mouse) {
// MystResource *invoking = this;
// while (invoking->_parent) {
@@ -233,40 +233,40 @@ void MystResourceType7::handleAnimation() {
}
}
-void MystResourceType7::handleMouseUp() {
+void MystResourceType7::handleMouseUp(Common::Point *mouse) {
if (_var7 == 0xFFFF) {
if (_numSubResources == 1)
- _subResources[0]->handleMouseUp();
+ _subResources[0]->handleMouseUp(mouse);
else if (_numSubResources != 0)
warning("Type 7 Resource with _numSubResources of %d, but no control variable", _numSubResources);
} else {
uint16 varValue = _vm->_scriptParser->getVar(_var7);
if (_numSubResources == 1 && varValue != 0)
- _subResources[0]->handleMouseUp();
+ _subResources[0]->handleMouseUp(mouse);
else if (_numSubResources != 0) {
if (varValue < _numSubResources)
- _subResources[varValue]->handleMouseUp();
+ _subResources[varValue]->handleMouseUp(mouse);
else
warning("Type 7 Resource Var %d: %d exceeds number of sub resources %d", _var7, varValue, _numSubResources);
}
}
}
-void MystResourceType7::handleMouseDown() {
+void MystResourceType7::handleMouseDown(Common::Point *mouse) {
if (_var7 == 0xFFFF) {
if (_numSubResources == 1)
- _subResources[0]->handleMouseDown();
+ _subResources[0]->handleMouseDown(mouse);
else if (_numSubResources != 0)
warning("Type 7 Resource with _numSubResources of %d, but no control variable", _numSubResources);
} else {
uint16 varValue = _vm->_scriptParser->getVar(_var7);
if (_numSubResources == 1 && varValue != 0)
- _subResources[0]->handleMouseDown();
+ _subResources[0]->handleMouseDown(mouse);
else if (_numSubResources != 0) {
if (varValue < _numSubResources)
- _subResources[varValue]->handleMouseDown();
+ _subResources[varValue]->handleMouseDown(mouse);
else
warning("Type 7 Resource Var %d: %d exceeds number of sub resources %d", _var7, varValue, _numSubResources);
}
@@ -474,8 +474,8 @@ MystResourceType11::MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableRe
_maxH = rlstStream->readUint16LE();
_minV = rlstStream->readUint16LE();
_maxV = rlstStream->readUint16LE();
- _posH = rlstStream->readUint16LE();
- _posV = rlstStream->readUint16LE();
+ _stepsH = rlstStream->readUint16LE();
+ _stepsV = rlstStream->readUint16LE();
_mouseDownOpcode = rlstStream->readUint16LE();
_mouseDragOpcode = rlstStream->readUint16LE();
_mouseUpOpcode = rlstStream->readUint16LE();
@@ -485,8 +485,8 @@ MystResourceType11::MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableRe
debugC(kDebugResource, "\thorizontal max: %d", _maxH);
debugC(kDebugResource, "\tvertical min: %d", _minV);
debugC(kDebugResource, "\tvertical max: %d", _maxV);
- debugC(kDebugResource, "\thorizontal position: %d", _posH);
- debugC(kDebugResource, "\tvertical position: %d", _posV);
+ debugC(kDebugResource, "\thorizontal steps: %d", _stepsH);
+ debugC(kDebugResource, "\tvertical steps: %d", _stepsV);
debugC(kDebugResource, "\t_mouseDownOpcode: %d", _mouseDownOpcode);
debugC(kDebugResource, "\t_mouseDragOpcode: %d", _mouseDragOpcode);
debugC(kDebugResource, "\t_mouseUpOpcode: %d", _mouseUpOpcode);
@@ -507,6 +507,14 @@ MystResourceType11::MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableRe
debugC(kDebugResource, "\tValue %d: %d", j, _lists[i].list[j]);
}
}
+
+ if (_stepsH) {
+ _stepH = (_maxH - _minH) / (_stepsH - 1);
+ }
+
+ if (_stepsV) {
+ _stepV = (_maxV - _minV) / (_stepsV - 1);
+ }
}
MystResourceType11::~MystResourceType11() {
@@ -514,18 +522,33 @@ MystResourceType11::~MystResourceType11() {
delete[] _lists[i].list;
}
-void MystResourceType11::handleMouseDown() {
+void MystResourceType11::handleMouseDown(Common::Point *mouse) {
+ setPositionClipping(mouse, &_pos);
+
_vm->_scriptParser->runOpcode(_mouseDownOpcode);
}
-void MystResourceType11::handleMouseUp() {
+void MystResourceType11::handleMouseUp(Common::Point *mouse) {
+ setPositionClipping(mouse, &_pos);
+
_vm->_scriptParser->runOpcode(_mouseUpOpcode);
}
-void MystResourceType11::handleMouseDrag() {
+void MystResourceType11::handleMouseDrag(Common::Point *mouse) {
+ setPositionClipping(mouse, &_pos);
+
_vm->_scriptParser->runOpcode(_mouseDragOpcode);
}
+void MystResourceType11::setPositionClipping(Common::Point *mouse, Common::Point *dest) {
+ if (_flagHV & 2) {
+ dest->y = CLIP<uint16>(mouse->y, _minV, _maxV);
+ }
+ if (_flagHV & 1) {
+ dest->x = CLIP<uint16>(mouse->x, _minH, _maxH);
+ }
+}
+
MystResourceType12::MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent) : MystResourceType11(vm, rlstStream, parent) {
_numFrames = rlstStream->readUint16LE();
_firstFrame = rlstStream->readUint16LE();
@@ -562,7 +585,7 @@ void MystResourceType12::handleAnimation() {
}
}
-void MystResourceType12::handleMouseUp() {
+void MystResourceType12::handleMouseUp(Common::Point *mouse) {
// HACK/TODO: Trigger Animation on Mouse Click. Probably not final version. Variable/Type 11 Controlled?
_currentFrame = _firstFrame;
_doAnimation = true;
@@ -586,7 +609,7 @@ void MystResourceType13::handleMouseLeave() {
_vm->_scriptParser->runOpcode(_leaveOpcode);
}
-void MystResourceType13::handleMouseUp() {
+void MystResourceType13::handleMouseUp(Common::Point *mouse) {
// Type 13 Resources do nothing on Mouse Clicks.
// This is required to override the inherited default
// i.e. MystResource::handleMouseUp
diff --git a/engines/mohawk/myst_areas.h b/engines/mohawk/myst_areas.h
index be960425f6..192c580c05 100644
--- a/engines/mohawk/myst_areas.h
+++ b/engines/mohawk/myst_areas.h
@@ -50,9 +50,9 @@ public:
virtual uint16 getType8Var() { return 0xFFFF; }
// Mouse interface
- virtual void handleMouseUp();
- virtual void handleMouseDown() {}
- virtual void handleMouseDrag() {}
+ virtual void handleMouseUp(Common::Point *mouse);
+ virtual void handleMouseDown(Common::Point *mouse) {}
+ virtual void handleMouseDrag(Common::Point *mouse) {}
virtual void handleMouseEnter() {}
virtual void handleMouseLeave() {}
@@ -68,7 +68,7 @@ protected:
class MystResourceType5 : public MystResource {
public:
MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
- void handleMouseUp();
+ void handleMouseUp(Common::Point *mouse);
protected:
MystScript _script;
@@ -102,8 +102,8 @@ public:
virtual void drawDataToScreen();
virtual void handleAnimation();
- virtual void handleMouseUp();
- virtual void handleMouseDown();
+ virtual void handleMouseUp(Common::Point *mouse);
+ virtual void handleMouseDown(Common::Point *mouse);
virtual void handleMouseEnter();
virtual void handleMouseLeave();
@@ -137,18 +137,22 @@ class MystResourceType11 : public MystResourceType8 {
public:
MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
virtual ~MystResourceType11();
- void handleMouseDown();
- void handleMouseUp();
- void handleMouseDrag();
+ void handleMouseDown(Common::Point *mouse);
+ void handleMouseUp(Common::Point *mouse);
+ void handleMouseDrag(Common::Point *mouse);
protected:
+ void setPositionClipping(Common::Point *mouse, Common::Point *dest);
+
uint16 _flagHV;
uint16 _minH;
uint16 _maxH;
uint16 _minV;
uint16 _maxV;
- uint16 _posH;
- uint16 _posV;
+ uint16 _stepsH;
+ uint16 _stepsV;
+ uint16 _stepH;
+ uint16 _stepV;
uint16 _mouseDownOpcode;
uint16 _mouseDragOpcode;
uint16 _mouseUpOpcode;
@@ -156,6 +160,8 @@ protected:
uint16 listCount;
uint16 *list;
} _lists[3];
+ Common::Point _pos;
+
};
class MystResourceType10 : public MystResourceType11 {
@@ -172,7 +178,7 @@ public:
MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
virtual ~MystResourceType12();
void handleAnimation();
- void handleMouseUp();
+ void handleMouseUp(Common::Point *mouse);
protected:
uint16 _numFrames;
@@ -187,7 +193,7 @@ private:
class MystResourceType13 : public MystResource {
public:
MystResourceType13(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
- void handleMouseUp();
+ void handleMouseUp(Common::Point *mouse);
void handleMouseEnter();
void handleMouseLeave();