[Scummvm-cvs-logs] SF.net SVN: scummvm:[54602] scummvm/trunk/engines/mohawk

bgk at users.sourceforge.net bgk at users.sourceforge.net
Mon Nov 29 21:52:04 CET 2010


Revision: 54602
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54602&view=rev
Author:   bgk
Date:     2010-11-29 20:52:04 +0000 (Mon, 29 Nov 2010)

Log Message:
-----------
MOHAWK: Update area type 11 position when the mouse moves

Modified Paths:
--------------
    scummvm/trunk/engines/mohawk/myst.cpp
    scummvm/trunk/engines/mohawk/myst.h
    scummvm/trunk/engines/mohawk/myst_areas.cpp
    scummvm/trunk/engines/mohawk/myst_areas.h

Modified: scummvm/trunk/engines/mohawk/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst.cpp	2010-11-29 20:51:48 UTC (rev 54601)
+++ scummvm/trunk/engines/mohawk/myst.cpp	2010-11-29 20:52:04 UTC (rev 54602)
@@ -293,19 +293,18 @@
 		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 @@
 				_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:

Modified: scummvm/trunk/engines/mohawk/myst.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst.h	2010-11-29 20:51:48 UTC (rev 54601)
+++ scummvm/trunk/engines/mohawk/myst.h	2010-11-29 20:52:04 UTC (rev 54602)
@@ -235,7 +235,6 @@
 	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)

Modified: scummvm/trunk/engines/mohawk/myst_areas.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_areas.cpp	2010-11-29 20:51:48 UTC (rev 54601)
+++ scummvm/trunk/engines/mohawk/myst_areas.cpp	2010-11-29 20:52:04 UTC (rev 54602)
@@ -77,7 +77,7 @@
 MystResource::~MystResource() {
 }
 
-void MystResource::handleMouseUp() {
+void MystResource::handleMouseUp(Common::Point *mouse) {
 	if (_dest != 0)
 		_vm->changeToCard(_dest);
 	else
@@ -90,7 +90,7 @@
 	_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::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 @@
 	_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 @@
 	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 @@
 			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 @@
 		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::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 @@
 	_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

Modified: scummvm/trunk/engines/mohawk/myst_areas.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst_areas.h	2010-11-29 20:51:48 UTC (rev 54601)
+++ scummvm/trunk/engines/mohawk/myst_areas.h	2010-11-29 20:52:04 UTC (rev 54602)
@@ -50,9 +50,9 @@
 	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 @@
 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 @@
 	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 @@
 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 @@
 		uint16 listCount;
 		uint16 *list;
 	} _lists[3];
+	Common::Point _pos;
+
 };
 
 class MystResourceType10 : public MystResourceType11 {
@@ -172,7 +178,7 @@
 	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 @@
 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();
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list