[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