diff options
| author | Filippos Karapetis | 2014-12-22 00:29:19 +0200 | 
|---|---|---|
| committer | Filippos Karapetis | 2014-12-22 00:30:26 +0200 | 
| commit | 41dbbe346c4b46b4b48cdb38687216b1dd254fb4 (patch) | |
| tree | 7f5e6a8c912a82ea8e8bf2ac98b9e66bda32fd4a /engines | |
| parent | dfae161386a2ad9e6828f71e90dd19598ca52f36 (diff) | |
| download | scummvm-rg350-41dbbe346c4b46b4b48cdb38687216b1dd254fb4.tar.gz scummvm-rg350-41dbbe346c4b46b4b48cdb38687216b1dd254fb4.tar.bz2 scummvm-rg350-41dbbe346c4b46b4b48cdb38687216b1dd254fb4.zip  | |
ZVISION: Also allow the movement when the cursor is within screen edges
This matches the behavior of the original in Zork: Nemesis. ZGI already
fills the screen horizontally
Diffstat (limited to 'engines')
| -rw-r--r-- | engines/zvision/core/events.cpp | 24 | 
1 files changed, 14 insertions, 10 deletions
diff --git a/engines/zvision/core/events.cpp b/engines/zvision/core/events.cpp index f0cf3f0789..81ad28f29b 100644 --- a/engines/zvision/core/events.cpp +++ b/engines/zvision/core/events.cpp @@ -284,26 +284,30 @@ void ZVision::onMouseMove(const Common::Point &pos) {  	//               |  	//               ^ -	if (_workingWindow.contains(pos)) { -		cursorWasChanged = _scriptManager->onMouseMove(pos, imageCoord); +	// Clip the horizontal mouse position to the working window +	Common::Point clippedPos = pos; +	clippedPos.x = CLIP<int16>(pos.x, _workingWindow.left + 1, _workingWindow.right - 1); + +	if (_workingWindow.contains(clippedPos)) { +		cursorWasChanged = _scriptManager->onMouseMove(clippedPos, imageCoord);  		RenderTable::RenderState renderState = _renderManager->getRenderTable()->getRenderState();  		if (renderState == RenderTable::PANORAMA) { -			if (pos.x >= _workingWindow.left && pos.x < _workingWindow.left + ROTATION_SCREEN_EDGE_OFFSET) { +			if (clippedPos.x >= _workingWindow.left && clippedPos.x < _workingWindow.left + ROTATION_SCREEN_EDGE_OFFSET) {  				int16 mspeed = _scriptManager->getStateValue(StateKey_RotateSpeed) >> 4;  				if (mspeed <= 0)  					mspeed = 400 >> 4; -				_mouseVelocity  = (((pos.x - (ROTATION_SCREEN_EDGE_OFFSET + _workingWindow.left)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7; +				_mouseVelocity  = (((clippedPos.x - (ROTATION_SCREEN_EDGE_OFFSET + _workingWindow.left)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7;  				_cursorManager->changeCursor(CursorIndex_Left);  				cursorWasChanged = true; -			} else if (pos.x <= _workingWindow.right && pos.x > _workingWindow.right - ROTATION_SCREEN_EDGE_OFFSET) { +			} else if (clippedPos.x <= _workingWindow.right && clippedPos.x > _workingWindow.right - ROTATION_SCREEN_EDGE_OFFSET) {  				int16 mspeed = _scriptManager->getStateValue(StateKey_RotateSpeed) >> 4;  				if (mspeed <= 0)  					mspeed = 400 >> 4; -				_mouseVelocity  = (((pos.x - (_workingWindow.right - ROTATION_SCREEN_EDGE_OFFSET)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7; +				_mouseVelocity  = (((clippedPos.x - (_workingWindow.right - ROTATION_SCREEN_EDGE_OFFSET)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7;  				_cursorManager->changeCursor(CursorIndex_Right);  				cursorWasChanged = true; @@ -311,21 +315,21 @@ void ZVision::onMouseMove(const Common::Point &pos) {  				_mouseVelocity = 0;  			}  		} else if (renderState == RenderTable::TILT) { -			if (pos.y >= _workingWindow.top && pos.y < _workingWindow.top + ROTATION_SCREEN_EDGE_OFFSET) { +			if (clippedPos.y >= _workingWindow.top && clippedPos.y < _workingWindow.top + ROTATION_SCREEN_EDGE_OFFSET) {  				int16 mspeed = _scriptManager->getStateValue(StateKey_RotateSpeed) >> 4;  				if (mspeed <= 0)  					mspeed = 400 >> 4; -				_mouseVelocity  = (((pos.y - (_workingWindow.top + ROTATION_SCREEN_EDGE_OFFSET)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7; +				_mouseVelocity  = (((clippedPos.y - (_workingWindow.top + ROTATION_SCREEN_EDGE_OFFSET)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7;  				_cursorManager->changeCursor(CursorIndex_UpArr);  				cursorWasChanged = true; -			} else if (pos.y <= _workingWindow.bottom && pos.y > _workingWindow.bottom - ROTATION_SCREEN_EDGE_OFFSET) { +			} else if (clippedPos.y <= _workingWindow.bottom && clippedPos.y > _workingWindow.bottom - ROTATION_SCREEN_EDGE_OFFSET) {  				int16 mspeed = _scriptManager->getStateValue(StateKey_RotateSpeed) >> 4;  				if (mspeed <= 0)  					mspeed = 400 >> 4; -				_mouseVelocity  = (((pos.y - (_workingWindow.bottom - ROTATION_SCREEN_EDGE_OFFSET)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7; +				_mouseVelocity  = (((clippedPos.y - (_workingWindow.bottom - ROTATION_SCREEN_EDGE_OFFSET)) << 7) / ROTATION_SCREEN_EDGE_OFFSET * mspeed) >> 7;  				_cursorManager->changeCursor(CursorIndex_DownArr);  				cursorWasChanged = true;  | 
