Commit: ee58d449455df9470c4a0a902056b8c2001128bf
Author: Jorge Bernal
Date:   Mon Jan 5 22:06:40 2015 -0800
Branches: master
https://developer.blender.org/rBee58d449455df9470c4a0a902056b8c2001128bf

BGE: Fix for bugs T42520 and T42097 (mouse look actuator related).

With this fix the mouse actuator movement works well as with even screen 
resolutions as odd screen resolutions.
Also it fixed the movement when the border of the blenderplayer window is out 
of the screen limits.

Reviewed By: moguri

Differential Revision: https://developer.blender.org/D946

===================================================================

M       source/gameengine/Ketsji/KX_MouseActuator.cpp

===================================================================

diff --git a/source/gameengine/Ketsji/KX_MouseActuator.cpp 
b/source/gameengine/Ketsji/KX_MouseActuator.cpp
index 74b3d09..8774abe 100644
--- a/source/gameengine/Ketsji/KX_MouseActuator.cpp
+++ b/source/gameengine/Ketsji/KX_MouseActuator.cpp
@@ -126,24 +126,33 @@ bool KX_MouseActuator::Update()
                                float movement[2];
                                MT_Vector3 rotation;
                                float setposition[2] = {0.0};
+                               float center_x = 0.5, center_y = 0.5;
 
                                getMousePosition(position);
 
                                movement[0] = position[0];
                                movement[1] = position[1];
 
+                               //preventing undesired drifting when resolution 
is odd
+                               if ((m_canvas->GetWidth() % 2) != 0) {
+                                       center_x = ((m_canvas->GetWidth() - 
1.0) / 2.0) / (m_canvas->GetWidth());
+                               }
+                               if ((m_canvas->GetHeight() % 2) != 0) {
+                                   center_y = ((m_canvas->GetHeight() - 1.0) / 
2.0) / (m_canvas->GetHeight());
+                               }
+
                                //preventing initial skipping.
                                if ((m_oldposition[0] <= -0.9) && 
(m_oldposition[1] <= -0.9)) {
 
                                        if (m_reset_x) {
-                                               m_oldposition[0] = 0.5;
+                                               m_oldposition[0] = center_x;
                                        }
                                        else {
                                                m_oldposition[0] = position[0];
                                        }
 
                                        if (m_reset_y) {
-                                               m_oldposition[1] = 0.5;
+                                               m_oldposition[1] = center_y;
                                        }
                                        else {
                                                m_oldposition[1] = position[1];
@@ -156,8 +165,8 @@ bool KX_MouseActuator::Update()
                                if (m_use_axis_x) {
 
                                        if (m_reset_x) {
-                                               setposition[0] = 0.5;
-                                               movement[0] -= 0.5;
+                                               setposition[0] = center_x;
+                                               movement[0] -= center_x;
                                        }
                                        else {
                                                setposition[0] = position[0];
@@ -166,12 +175,10 @@ bool KX_MouseActuator::Update()
 
                                        movement[0] *= -1.0;
 
-                                       /* Don't apply the rotation when width 
resolution is odd (+ little movement) to
-                                         avoid undesired drifting or when we 
are under a certain threshold for mouse
+                                       /* Don't apply the rotation when we are 
under a certain threshold for mouse
                                          movement */
 
-                                       if (!((m_canvas->GetWidth() % 2 != 0) 
&& MT_abs(movement[0]) < 0.01) &&
-                                           ((movement[0] > (m_threshold[0] / 
10.0)) ||
+                                       if (((movement[0] > (m_threshold[0] / 
10.0)) ||
                                            ((movement[0] * (-1.0)) > 
(m_threshold[0] / 10.0)))) {
 
                                                movement[0] *= m_sensitivity[0];
@@ -209,15 +216,15 @@ bool KX_MouseActuator::Update()
                                        }
                                }
                                else {
-                                       setposition[0] = 0.5;
+                                       setposition[0] = center_x;
                                }
 
                                //Calculating Y axis.
                                if (m_use_axis_y) {
 
                                        if (m_reset_y) {
-                                               setposition[1] = 0.5;
-                                               movement[1] -= 0.5;
+                                               setposition[1] = center_y;
+                                               movement[1] -= center_y;
                                        }
                                        else {
                                                setposition[1] = position[1];
@@ -226,12 +233,10 @@ bool KX_MouseActuator::Update()
 
                                        movement[1] *= -1.0;
 
-                                       /* Don't apply the rotation when height 
resolution is odd (+ little movement) to
-                                         avoid undesired drifting or when we 
are under a certain threshold for mouse
+                                       /* Don't apply the rotation when we are 
under a certain threshold for mouse
                                          movement */
 
-                                       if (!((m_canvas->GetHeight() % 2 != 0) 
&& MT_abs(movement[1]) < 0.01) &&
-                                           ((movement[1] > (m_threshold[1] / 
10.0)) ||
+                                       if (((movement[1] > (m_threshold[1] / 
10.0)) ||
                                            ((movement[1] * (-1.0)) > 
(m_threshold[1] / 10.0)))) {
 
                                                movement[1] *= m_sensitivity[1];
@@ -270,7 +275,7 @@ bool KX_MouseActuator::Update()
                                        }
                                }
                                else {
-                                       setposition[1] = 0.5;
+                                       setposition[1] = center_y;
                                }
 
                                setMousePosition(setposition[0], 
setposition[1]);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to