Fix camera jumping on Android when panning past 0/360 mark 4893/head
authorrubenwardy <rubenwardy@gmail.com>
Sun, 11 Dec 2016 21:57:43 +0000 (21:57 +0000)
committerrubenwardy <rubenwardy@gmail.com>
Mon, 12 Dec 2016 13:20:18 +0000 (13:20 +0000)
src/game.cpp
src/touchscreengui.cpp
src/touchscreengui.h

index ea07accf8de5085aede8a12bf1400e21061fd4f6..966c23073df3f85fea51602ad763fe973b5438df 100644 (file)
@@ -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
 
index f51b2d5fa37561a05fccc6dc8761706e46b58773..e3c6a39a98ba647b3048fb3fd5096d57ecb5f4cd 100644 (file)
@@ -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
index d8106a2600e91c663fe74a783789d22aed32105e..b4de1b03250ded5564d8c95f15daee4bc7cca1a6 100644 (file)
@@ -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;