From a9c6d1da99732437d56b9ca964bb1b13b8d76887 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 9 Nov 2011 03:54:55 +0300 Subject: Add option to use joystick only if game window is active. --- src/joystick.cpp | 50 +++++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 19 deletions(-) (limited to 'src/joystick.cpp') diff --git a/src/joystick.cpp b/src/joystick.cpp index 3084a5ae6..bc4572370 100644 --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -20,8 +20,10 @@ * along with this program. If not, see . */ -#include "configuration.h" #include "joystick.h" + +#include "client.h" +#include "configuration.h" #include "logger.h" #include "debug.h" @@ -57,7 +59,8 @@ Joystick::Joystick(int no): mRightTolerance(0), mCalibrating(false), mCalibrated(false), - mButtonsNumber(MAX_BUTTONS) + mButtonsNumber(MAX_BUTTONS), + mUseInactive(false) { if (no >= joystickCount) no = joystickCount; @@ -102,6 +105,7 @@ bool Joystick::open() mDownTolerance = config.getIntValue("downTolerance" + toString(mNumber)); mLeftTolerance = config.getIntValue("leftTolerance" + toString(mNumber)); mRightTolerance = config.getIntValue("rightTolerance" + toString(mNumber)); + mUseInactive = config.getBoolValue("useInactiveJoystick"); return true; } @@ -144,23 +148,31 @@ void Joystick::update() if (!mEnabled || !mCalibrated) return; - // X-Axis - int position = SDL_JoystickGetAxis(mJoystick, 0); - if (position >= mRightTolerance) - mDirection |= RIGHT; - else if (position <= mLeftTolerance) - mDirection |= LEFT; - - // Y-Axis - position = SDL_JoystickGetAxis(mJoystick, 1); - if (position <= mUpTolerance) - mDirection |= UP; - else if (position >= mDownTolerance) - mDirection |= DOWN; - - // Buttons - for (int i = 0; i < mButtonsNumber; i++) - mButtons[i] = (SDL_JoystickGetButton(mJoystick, i) == 1); + if (mUseInactive || Client::getInputFocused()) + { + // X-Axis + int position = SDL_JoystickGetAxis(mJoystick, 0); + if (position >= mRightTolerance) + mDirection |= RIGHT; + else if (position <= mLeftTolerance) + mDirection |= LEFT; + + // Y-Axis + position = SDL_JoystickGetAxis(mJoystick, 1); + if (position <= mUpTolerance) + mDirection |= UP; + else if (position >= mDownTolerance) + mDirection |= DOWN; + + // Buttons + for (int i = 0; i < mButtonsNumber; i++) + mButtons[i] = (SDL_JoystickGetButton(mJoystick, i) == 1); + } + else + { + for (int i = 0; i < mButtonsNumber; i++) + mButtons[i] = false; + } } void Joystick::startCalibration() -- cgit v1.2.3-60-g2f50