summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rubenwardy@gmail.com>2016-12-11 21:57:43 +0000
committerrubenwardy <rubenwardy@gmail.com>2016-12-12 13:20:18 +0000
commit0fdf24d64ab055a97e488eb3775cc7c721156d3c (patch)
treeaa8063616612122eb3ad032c7f1b8202a58ef7e7
parentd9675d3d922a2c8f521102c9386d14c694fda365 (diff)
downloadminetest-0fdf24d64ab055a97e488eb3775cc7c721156d3c.tar.gz
minetest-0fdf24d64ab055a97e488eb3775cc7c721156d3c.tar.bz2
minetest-0fdf24d64ab055a97e488eb3775cc7c721156d3c.zip
Fix camera jumping on Android when panning past 0/360 mark
-rw-r--r--src/game.cpp6
-rw-r--r--src/touchscreengui.cpp14
-rw-r--r--src/touchscreengui.h10
3 files changed, 15 insertions, 15 deletions
diff --git a/src/game.cpp b/src/game.cpp
index ea07accf8..966c23073 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -1205,7 +1205,7 @@ static inline void create_formspec_menu(GUIFormSpecMenu **cur_formspec,
(*cur_formspec)->setFormSource(fs_src);
(*cur_formspec)->setTextDest(txt_dest);
}
-
+
}
#ifdef __ANDROID__
@@ -3362,8 +3362,8 @@ void Game::updateCameraOrientation(CameraOrientation *cam,
{
#ifdef HAVE_TOUCHSCREENGUI
if (g_touchscreengui) {
- cam->camera_yaw = g_touchscreengui->getYaw();
- cam->camera_pitch = g_touchscreengui->getPitch();
+ cam->camera_yaw += g_touchscreengui->getYawChange();
+ cam->camera_pitch = g_touchscreengui->getPitch();
} else {
#endif
diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp
index f51b2d5fa..e3c6a39a9 100644
--- a/src/touchscreengui.cpp
+++ b/src/touchscreengui.cpp
@@ -414,7 +414,7 @@ void AutoHideButtonBar::show()
TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver):
m_device(device),
m_guienv(device->getGUIEnvironment()),
- m_camera_yaw(0.0),
+ m_camera_yaw_change(0.0),
m_camera_pitch(0.0),
m_visible(false),
m_move_id(-1),
@@ -835,17 +835,11 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
/* adapt to similar behaviour as pc screen */
double d = g_settings->getFloat("mouse_sensitivity") *4;
- double old_yaw = m_camera_yaw;
+ double old_yaw = m_camera_yaw_change;
double old_pitch = m_camera_pitch;
- m_camera_yaw -= dx * d;
- m_camera_pitch = MYMIN(MYMAX( m_camera_pitch + (dy * d),-180),180);
-
- while (m_camera_yaw < 0)
- m_camera_yaw += 360;
-
- while (m_camera_yaw > 360)
- m_camera_yaw -= 360;
+ m_camera_yaw_change -= dx * d;
+ m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
// update shootline
m_shootline = m_device
diff --git a/src/touchscreengui.h b/src/touchscreengui.h
index d8106a260..b4de1b032 100644
--- a/src/touchscreengui.h
+++ b/src/touchscreengui.h
@@ -147,8 +147,14 @@ public:
void init(ISimpleTextureSource* tsrc);
- double getYaw() { return m_camera_yaw; }
+ double getYawChange() {
+ double res = m_camera_yaw_change;
+ m_camera_yaw_change = 0;
+ return res;
+ }
+
double getPitch() { return m_camera_pitch; }
+
line3d<f32> getShootline() { return m_shootline; }
void step(float dtime);
@@ -170,7 +176,7 @@ private:
bool m_visible; // is the gui visible
/* value in degree */
- double m_camera_yaw;
+ double m_camera_yaw_change;
double m_camera_pitch;
line3d<f32> m_shootline;