Don't ignore mouse motion when touch UI is enabled

master
Giuseppe Bilotta 2022-08-08 16:43:30 +02:00
parent 4fbcc33ee0
commit c1342ac0ce
3 changed files with 30 additions and 17 deletions

View File

@ -2456,24 +2456,21 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
if (g_touchscreengui) {
cam->camera_yaw += g_touchscreengui->getYawChange();
cam->camera_pitch = g_touchscreengui->getPitch();
} else {
#endif
v2s32 center(driver->getScreenSize().Width / 2, driver->getScreenSize().Height / 2);
v2s32 dist = input->getMousePos() - center;
if (m_invert_mouse || camera->getCameraMode() == CAMERA_MODE_THIRD_FRONT) {
dist.Y = -dist.Y;
}
f32 sens_scale = getSensitivityScaleFactor();
cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity * sens_scale;
cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity * sens_scale;
if (dist.X != 0 || dist.Y != 0)
input->setMousePos(center.X, center.Y);
#ifdef HAVE_TOUCHSCREENGUI
}
#endif
v2s32 center(driver->getScreenSize().Width / 2, driver->getScreenSize().Height / 2);
v2s32 dist = input->getMousePos() - center;
if (m_invert_mouse || camera->getCameraMode() == CAMERA_MODE_THIRD_FRONT) {
dist.Y = -dist.Y;
}
f32 sens_scale = getSensitivityScaleFactor();
cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity * sens_scale;
cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity * sens_scale;
if (dist.X != 0 || dist.Y != 0)
input->setMousePos(center.X, center.Y);
if (m_cache_enable_joysticks) {
f32 sens_scale = getSensitivityScaleFactor();
@ -2483,6 +2480,11 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
}
cam->camera_pitch = rangelim(cam->camera_pitch, -89.5, 89.5);
#ifdef HAVE_TOUCHSCREENGUI
if (g_touchscreengui)
g_touchscreengui->setPitch(cam->camera_pitch, center);
#endif
}

View File

@ -846,6 +846,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
const double d = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f) * 3.0f;
m_camera_yaw_change -= dx * d;
// TODO FIXME why do we clamp to ±180 here
// but this is clamped to ±89.5 in updateCameraOrientation?
m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
// update shootline

View File

@ -179,7 +179,16 @@ public:
return res;
}
double getPitch() { return m_camera_pitch; }
double getPitch() const { return m_camera_pitch; }
void setPitch(double camera_pitch, v2s32 screen_XY)
{
m_camera_pitch = camera_pitch;
m_shootline = m_device
->getSceneManager()
->getSceneCollisionManager()
->getRayFromScreenCoordinates(screen_XY);
}
/*
* Returns a line which describes what the player is pointing at.