diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index 61a85e874..4b11d9af4 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -606,6 +606,7 @@ namespace MWInput { bool triedToMove = false; bool isRunning = false; + bool alwaysRunAllowed = false; // joystick movement float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue(); @@ -634,31 +635,23 @@ namespace MWInput isRunning = xAxis > .75 || xAxis < .25 || yAxis > .75 || yAxis < .25; if(triedToMove) resetIdleTime(); - if (actionIsActive(A_MoveLeft) && !actionIsActive(A_MoveRight)) + if (actionIsActive(A_MoveLeft) != actionIsActive(A_MoveRight)) { + alwaysRunAllowed = true; triedToMove = true; - mPlayer->setLeftRight (-1); - } - else if (actionIsActive(A_MoveRight) && !actionIsActive(A_MoveLeft)) - { - triedToMove = true; - mPlayer->setLeftRight (1); + mPlayer->setLeftRight (actionIsActive(A_MoveRight) ? 1 : -1); } - if (actionIsActive(A_MoveForward) && !actionIsActive(A_MoveBackward)) - { - triedToMove = true; - mPlayer->setAutoMove (false); - mPlayer->setForwardBackward (1); - } - else if (actionIsActive(A_MoveBackward) && !actionIsActive(A_MoveForward)) + if (actionIsActive(A_MoveForward) != actionIsActive(A_MoveBackward)) { + alwaysRunAllowed = true; triedToMove = true; mPlayer->setAutoMove (false); - mPlayer->setForwardBackward (-1); + mPlayer->setForwardBackward (actionIsActive(A_MoveForward) ? 1 : -1); } else if(mPlayer->getAutoMove()) { + alwaysRunAllowed = true; triedToMove = true; mPlayer->setForwardBackward (1); } @@ -703,7 +696,7 @@ namespace MWInput mOverencumberedMessageDelay = 0.f; } - if ((mAlwaysRunActive && !mJoystickLastUsed) || isRunning) + if ((mAlwaysRunActive && alwaysRunAllowed) || isRunning) mPlayer->setRunState(!actionIsActive(A_Run)); else mPlayer->setRunState(actionIsActive(A_Run));