[Scummvm-git-logs] scummvm master -> 310d334625740f2d4b83bc1612dc5b8915577408

neuromancer noreply at scummvm.org
Tue Jan 28 20:47:08 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
310d334625 FREESCAPE: Convert between mouse and crosshair coordinates as necessary


Commit: 310d334625740f2d4b83bc1612dc5b8915577408
    https://github.com/scummvm/scummvm/commit/310d334625740f2d4b83bc1612dc5b8915577408
Author: nigenigenige (nigejones at gmail.com)
Date: 2025-01-28T21:47:04+01:00

Commit Message:
FREESCAPE: Convert between mouse and crosshair coordinates as necessary

Changed paths:
    engines/freescape/freescape.cpp
    engines/freescape/freescape.h


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 353256fe638..2ed5e8eca06 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -482,12 +482,30 @@ void FreescapeEngine::releasedKey(const int keycode) {}
 void FreescapeEngine::resetInput() {
 	_shootMode = false;
 	centerCrossair();
-	g_system->warpMouse(_crossairPosition.x, _crossairPosition.y);
+	warpMouseToCrossair();
 	_eventManager->purgeMouseEvents();
 	_eventManager->purgeKeyboardEvents();
 	rotate(0, 0);
 }
 
+Common::Point FreescapeEngine::crossairPosToMousePos(const Common::Point crossairPos) {
+	Common::Point mousePos;
+	mousePos.x = g_system->getWidth() * crossairPos.x / _screenW;
+	mousePos.y = g_system->getHeight() * crossairPos.y / _screenH;
+	return mousePos;
+}
+
+Common::Point FreescapeEngine::mousePosToCrossairPos(const Common::Point mousePos) {
+	Common::Point crossairPos;
+	crossairPos.x = _screenW * mousePos.x / g_system->getWidth();
+	crossairPos.y = _screenH * mousePos.y / g_system->getHeight();
+	return crossairPos;
+}
+
+void FreescapeEngine::warpMouseToCrossair() {
+	const Common::Point mousePos = crossairPosToMousePos(_crossairPosition);
+	g_system->warpMouse(mousePos.x, mousePos.y);
+}
 
 void FreescapeEngine::processInput() {
 	float currentFrame = g_system->getMillis();
@@ -566,7 +584,7 @@ void FreescapeEngine::processInput() {
 					g_system->lockMouse(true);
 				} else {
 					g_system->lockMouse(false);
-					g_system->warpMouse(_crossairPosition.x, _crossairPosition.y);
+					warpMouseToCrossair();
 					_eventManager->purgeMouseEvents();
 					_eventManager->purgeKeyboardEvents();
 				}
@@ -612,23 +630,18 @@ void FreescapeEngine::processInput() {
 				g_system->warpMouse(mousePos.x, mousePos.y);
 
 			if (_shootMode) {
-				_crossairPosition.x = _screenW * mousePos.x / g_system->getWidth();
-				_crossairPosition.y = _screenH * mousePos.y / g_system->getHeight();
-				break;
+				_crossairPosition = mousePosToCrossairPos(mousePos);
 			} else {
 				// Mouse pointer is locked into the the middle of the screen
 				// since we only need the relative movements. This will not affect any touchscreen device
 				// so on-screen controls are still accesible
-				mousePos.x = g_system->getWidth() * ( _viewArea.left + _viewArea.width() / 2) / _screenW;
-				mousePos.y = g_system->getHeight() * (_viewArea.top + _viewArea.height() / 2) / _screenW;
+				warpMouseToCrossair();
 				if (_invertY)
 					event.relMouse.y = -event.relMouse.y;
 
-				g_system->warpMouse(mousePos.x, mousePos.y);
 				_eventManager->purgeMouseEvents();
-			}
-
-			rotate(event.relMouse.x * _mouseSensitivity, event.relMouse.y * _mouseSensitivity);
+				rotate(event.relMouse.x * _mouseSensitivity, event.relMouse.y * _mouseSensitivity);
+			}			
 			break;
 
 		case Common::EVENT_LBUTTONDOWN:
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 0aa4ec38a66..0082aba3c62 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -385,6 +385,10 @@ public:
 	int _playerStepIndex;
 	Common::Array<int> _playerSteps;
 
+	Common::Point crossairPosToMousePos(const Common::Point crossairPos);
+	Common::Point mousePosToCrossairPos(const Common::Point mousePos);
+	void warpMouseToCrossair(void);
+
 	// Effects
 	Common::Array<Common::String> _conditionSources;
 	Common::Array<FCLInstructionVector> _conditions;




More information about the Scummvm-git-logs mailing list