diff options
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/joystick.cpp | 44 | ||||
-rw-r--r-- | src/input/joystick.h | 4 |
2 files changed, 31 insertions, 17 deletions
diff --git a/src/input/joystick.cpp b/src/input/joystick.cpp index 59087c2c7..01414b4dc 100644 --- a/src/input/joystick.cpp +++ b/src/input/joystick.cpp @@ -52,6 +52,7 @@ Joystick::Joystick(const int no) : mTolerance(0), mNumber(no >= joystickCount ? joystickCount : no), mButtonsNumber(MAX_BUTTONS), + mUseHatForMovement(true), mUseInactive(false), mHaveHats(false), mKeyToAction(), @@ -199,6 +200,7 @@ bool Joystick::open() config.setValue("joystickTolerance", 0.1F); #endif mTolerance = config.getFloatValue("joystickTolerance"); + mUseHatForMovement = config.getBoolValue("useHatForMovement"); mUseInactive = config.getBoolValue("useInactiveJoystick"); return true; @@ -278,6 +280,8 @@ void Joystick::logic() mHatPosition |= UP; else if ((hat & SDL_HAT_DOWN) != 0) mHatPosition |= DOWN; + if ((mDirection == 0U) && mUseHatForMovement) + mDirection = mHatPosition; } // Buttons @@ -310,14 +314,17 @@ bool Joystick::buttonPressed(const int no) const return false; if (no < MAX_BUTTONS) return mActiveButtons[no]; - if (no == KEY_UP) - return (mHatPosition & UP) != 0; - if (no == KEY_DOWN) - return (mHatPosition & DOWN) != 0; - if (no == KEY_LEFT) - return (mHatPosition & LEFT) != 0; - if (no == KEY_RIGHT) - return (mHatPosition & RIGHT) != 0; + if (!mUseHatForMovement) + { + if (no == KEY_UP) + return (mHatPosition & UP) != 0; + if (no == KEY_DOWN) + return (mHatPosition & DOWN) != 0; + if (no == KEY_LEFT) + return (mHatPosition & LEFT) != 0; + if (no == KEY_RIGHT) + return (mHatPosition & RIGHT) != 0; + } return false; } @@ -358,7 +365,7 @@ int Joystick::getButtonFromEvent(const SDL_Event &event) const return -1; return event.jbutton.button; } - if (event.type == SDL_JOYHATMOTION) + if (!mUseHatForMovement && event.type == SDL_JOYHATMOTION) { // reading only hat 0 if (event.jhat.which != mNumber || event.jhat.hat != 0) @@ -415,14 +422,17 @@ void Joystick::handleRepeat(const int time) if (mActiveButtons[key]) repeat = true; } - if (key == KEY_UP && (mHatPosition & UP) != 0) - repeat = true; - if (key == KEY_DOWN && (mHatPosition & DOWN) != 0) - repeat = true; - if (key == KEY_LEFT && (mHatPosition & LEFT) != 0) - repeat = true; - if (key == KEY_RIGHT && (mHatPosition & RIGHT) != 0) - repeat = true; + if (!mUseHatForMovement) + { + if (key == KEY_UP && (mHatPosition & UP) != 0) + repeat = true; + if (key == KEY_DOWN && (mHatPosition & DOWN) != 0) + repeat = true; + if (key == KEY_LEFT && (mHatPosition & LEFT) != 0) + repeat = true; + if (key == KEY_RIGHT && (mHatPosition & RIGHT) != 0) + repeat = true; + } if (repeat) { int &keyTime = (*it).second; diff --git a/src/input/joystick.h b/src/input/joystick.h index bddf520a2..805efa6ad 100644 --- a/src/input/joystick.h +++ b/src/input/joystick.h @@ -139,6 +139,9 @@ class Joystick final void setTolerance(const float tolerance) { mTolerance = tolerance; } + void setUseHatForMovement(const bool b) + { mUseHatForMovement = b; } + void setUseInactive(const bool b) { mUseInactive = b; } @@ -169,6 +172,7 @@ class Joystick final float mTolerance; int mNumber; int mButtonsNumber; + bool mUseHatForMovement; bool mUseInactive; bool mHaveHats; |