diff options
author | Ira Rice <irarice@gmail.com> | 2008-11-27 22:24:48 +0000 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2008-11-27 22:24:48 +0000 |
commit | c6adb930edd2d0a88d7c5ca4edd58d95382a5abf (patch) | |
tree | 83e8a74019c8c633d90a7e24504dd22006e768cb /src | |
parent | 886a5d4803e277b053014ae6b5c1c347f7756d48 (diff) | |
download | mana-c6adb930edd2d0a88d7c5ca4edd58d95382a5abf.tar.gz mana-c6adb930edd2d0a88d7c5ca4edd58d95382a5abf.tar.bz2 mana-c6adb930edd2d0a88d7c5ca4edd58d95382a5abf.tar.xz mana-c6adb930edd2d0a88d7c5ca4edd58d95382a5abf.zip |
Merged a patch by Bjorn to fix allowing the joystick to be used without
being enabled first. A similar patch was asked for by Doorsman here, so
this combined with the setup button on client startup, should be enough
to fulfill that request from Doors.
Diffstat (limited to 'src')
-rw-r--r-- | src/game.cpp | 4 | ||||
-rw-r--r-- | src/joystick.cpp | 42 | ||||
-rw-r--r-- | src/joystick.h | 39 |
3 files changed, 35 insertions, 50 deletions
diff --git a/src/game.cpp b/src/game.cpp index 34fb4622..16bc082b 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -297,9 +297,7 @@ Game::Game(Network *network): // TODO: The user should be able to choose which one to use // Open the first device if (Joystick::getNumberOfJoysticks() > 0) - { - joystick = new Joystick(0); - } + joystick = new Joystick(0); network->registerHandler(mBeingHandler.get()); network->registerHandler(mBuySellHandler.get()); diff --git a/src/joystick.cpp b/src/joystick.cpp index f009ebc4..b3aba4fc 100644 --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -19,6 +19,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <cassert> + #include "configuration.h" #include "joystick.h" #include "log.h" @@ -28,7 +30,10 @@ int Joystick::joystickCount = 0; void Joystick::init() { SDL_InitSubSystem(SDL_INIT_JOYSTICK); - //SDL_JoystickEventState(SDL_ENABLE); + + // Have SDL call SDL_JoystickUpdate() automatically + SDL_JoystickEventState(SDL_ENABLE); + joystickCount = SDL_NumJoysticks(); logger->log("%i joysticks/gamepads found", joystickCount); for (int i = 0; i < joystickCount; i++) @@ -36,11 +41,11 @@ void Joystick::init() } Joystick::Joystick(int no): - mDirection(0), mCalibrating(false) + mDirection(0), + mCalibrating(false), + mEnabled(false) { - // TODO Bail out here? - if (no > joystickCount) - return; + assert(no < joystickCount); mJoystick = SDL_JoystickOpen(no); @@ -65,50 +70,39 @@ Joystick::Joystick(int no): Joystick::~Joystick() { - SDL_JoystickClose(mJoystick); + SDL_JoystickClose(mJoystick); } void Joystick::update() { mDirection = 0; - SDL_JoystickUpdate(); - // When calibrating, don't bother the outside with our state if (mCalibrating) { doCalibration(); return; }; - if (!mEnabled) return; + if (!mEnabled) + 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 < MAX_BUTTONS; i++) - { mButtons[i] = (SDL_JoystickGetButton(mJoystick, i) == 1); - } } void Joystick::startCalibration() @@ -125,24 +119,16 @@ void Joystick::doCalibration() // X-Axis int position = SDL_JoystickGetAxis(mJoystick, 0); if (position > mRightTolerance) - { mRightTolerance = position; - } else if (position < mLeftTolerance) - { mLeftTolerance = position; - } // Y-Axis position = SDL_JoystickGetAxis(mJoystick, 1); if (position > mDownTolerance) - { mDownTolerance = position; - } else if (position < mUpTolerance) - { mUpTolerance = position; - } } void Joystick::finishCalibration() @@ -156,5 +142,5 @@ void Joystick::finishCalibration() bool Joystick::buttonPressed(unsigned char no) const { - return (no < MAX_BUTTONS) ? mButtons[no] : false; + return (mEnabled && no < MAX_BUTTONS) ? mButtons[no] : false; } diff --git a/src/joystick.h b/src/joystick.h index 4cc1babd..2baf3e61 100644 --- a/src/joystick.h +++ b/src/joystick.h @@ -30,12 +30,19 @@ class Joystick /** * Number of buttons we can handle. */ - enum { MAX_BUTTONS = 6 }; + enum { + MAX_BUTTONS = 6 + }; /** * Directions, to be used as bitmask values. */ - enum { UP = 1, DOWN = 2, LEFT = 4, RIGHT = 8 }; + enum { + UP = 1, + DOWN = 2, + LEFT = 4, + RIGHT = 8 + }; /** * Initializes the joystick subsystem. @@ -55,33 +62,27 @@ class Joystick ~Joystick(); - bool - isEnabled() const { return mEnabled; } + bool isEnabled() const { return mEnabled; } - void - setEnabled(bool enabled) { mEnabled = enabled; } + void setEnabled(bool enabled) { mEnabled = enabled; } /** * Updates the direction and button information. */ - void - update(); + void update(); - void - startCalibration(); + void startCalibration(); - void - finishCalibration(); + void finishCalibration(); - bool - isCalibrating() const { return mCalibrating; } + bool isCalibrating() const { return mCalibrating; } bool buttonPressed(unsigned char no) const; - bool isUp() const { return mDirection & UP; }; - bool isDown() const { return mDirection & DOWN; }; - bool isLeft() const { return mDirection & LEFT; }; - bool isRight() const { return mDirection & RIGHT; }; + bool isUp() const { return mEnabled && (mDirection & UP); }; + bool isDown() const { return mEnabled && (mDirection & DOWN); }; + bool isLeft() const { return mEnabled && (mDirection & LEFT); }; + bool isRight() const { return mEnabled && (mDirection & RIGHT); }; protected: unsigned char mDirection; @@ -97,4 +98,4 @@ class Joystick void doCalibration(); }; -#endif +#endif // _TMW_JOYSTICK_H |