diff options
author | asuratva <asuratva@proton.me> | 2024-05-18 10:58:37 +0000 |
---|---|---|
committer | asuratva <asuratva@proton.me> | 2024-05-18 10:58:37 +0000 |
commit | 1d7ee3161693ed016264a4940778a6e4b2258e38 (patch) | |
tree | 059f68cc39a725a0bc64538e5771ef3525aa6ec6 /src/input/joystick.h | |
parent | 9294f5a1ba84c7a4e947ab94a2645625e8a6171d (diff) | |
parent | 5570d9d1c2b1b5fba50283ec443088430332bb86 (diff) | |
download | plus-master.tar.gz plus-master.tar.bz2 plus-master.tar.xz plus-master.zip |
Diffstat (limited to 'src/input/joystick.h')
-rw-r--r-- | src/input/joystick.h | 67 |
1 files changed, 52 insertions, 15 deletions
diff --git a/src/input/joystick.h b/src/input/joystick.h index a3c129950..49c4e553a 100644 --- a/src/input/joystick.h +++ b/src/input/joystick.h @@ -31,6 +31,15 @@ PRAGMA48(GCC diagnostic ignored "-Wshadow") #include <SDL_events.h> PRAGMA48(GCC diagnostic pop) +// defined first in SDL 2.0.6 +// not available on older distros +#ifndef SDL_JOYSTICK_AXIS_MIN +#define SDL_JOYSTICK_AXIS_MIN -32768 +#endif +#ifndef SDL_JOYSTICK_AXIS_MAX +#define SDL_JOYSTICK_AXIS_MAX 32767 +#endif + class Joystick final { public: @@ -42,6 +51,27 @@ class Joystick final MAX_BUTTONS = 64 }; + enum + { + RESERVED_AXES = 2, // reserved for movement + MAX_AXES = 8 // number of axes we can handle + }; + + /** + * Additional "buttons" for hat 0 (d-pad), + * sticks and triggers. + */ + enum + { + KEY_UP = MAX_BUTTONS, + KEY_DOWN, + KEY_LEFT, + KEY_RIGHT, + KEY_NEGATIVE_AXIS_FIRST, + KEY_POSITIVE_AXIS_FIRST = KEY_NEGATIVE_AXIS_FIRST + MAX_AXES, + KEY_END = KEY_POSITIVE_AXIS_FIRST + MAX_AXES + }; + /** * Directions, to be used as bitmask values. */ @@ -98,14 +128,7 @@ class Joystick final */ void logic(); - void startCalibration(); - - void finishCalibration(); - - bool isCalibrating() const noexcept2 A_WARN_UNUSED - { return mCalibrating; } - - bool buttonPressed(const unsigned char no) const A_WARN_UNUSED; + bool buttonPressed(const int no) const A_WARN_UNUSED; bool isUp() const noexcept2 A_WARN_UNUSED { return mEnabled && ((mDirection & UP) != 0); } @@ -122,15 +145,25 @@ class Joystick final int getNumber() const noexcept2 A_WARN_UNUSED { return mNumber; } + void setTolerance(const float tolerance) + { mTolerance = tolerance; } + + void setUseHatForMovement(const bool b) + { mUseHatForMovement = b; } + void setUseInactive(const bool b) { mUseInactive = b; } void update(); + bool isActionEvent(const SDL_Event &event) A_WARN_UNUSED; + KeysVector *getActionVector(const SDL_Event &event) A_WARN_UNUSED; KeysVector *getActionVectorByKey(const int i) A_WARN_UNUSED; + InputActionT getActionId(const SDL_Event &event) A_WARN_UNUSED; + int getButtonFromEvent(const SDL_Event &event) const A_WARN_UNUSED; bool isActionActive(const InputActionT index) const A_WARN_UNUSED; @@ -144,18 +177,18 @@ class Joystick final protected: unsigned char mDirection; + unsigned char mHatPosition; + int mAxesPositions[MAX_AXES]; + bool mIsTrigger[MAX_AXES]; bool mActiveButtons[MAX_BUTTONS]; SDL_Joystick *mJoystick; - int mUpTolerance; - int mDownTolerance; - int mLeftTolerance; - int mRightTolerance; - bool mCalibrating; + float mTolerance; int mNumber; - bool mCalibrated; + int mAxesNumber; int mButtonsNumber; + bool mUseHatForMovement; bool mUseInactive; bool mHaveHats; @@ -172,7 +205,11 @@ class Joystick final static bool mInitialized; static int joystickCount; - void doCalibration(); + int getButton(const int key) const A_WARN_UNUSED; + + int getNegativeAxis(const int key) const A_WARN_UNUSED; + + int getPositiveAxis(const int key) const A_WARN_UNUSED; }; extern Joystick *joystick; |