diff options
Diffstat (limited to 'src/joystick.h')
-rw-r--r-- | src/joystick.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/joystick.h b/src/joystick.h new file mode 100644 index 000000000..da60686c7 --- /dev/null +++ b/src/joystick.h @@ -0,0 +1,114 @@ +/* + * The Mana Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * + * This file is part of The Mana Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef JOYSTICK_H +#define JOYSTICK_H + +#include <SDL.h> + +class Joystick +{ + public: + /** + * Number of buttons we can handle. + */ + enum + { + MAX_BUTTONS = 6 + }; + + /** + * Directions, to be used as bitmask values. + */ + enum + { + UP = 1, + DOWN = 2, + LEFT = 4, + RIGHT = 8 + }; + + /** + * Initializes the joystick subsystem. + */ + static void init(); + + /** + * Returns the number of available joysticks. + */ + static int getNumberOfJoysticks() + { return joystickCount; } + + /** + * Constructor, pass the number of the joystick the new object + * should access. + */ + Joystick(int no); + + ~Joystick(); + + bool isEnabled() const + { return mEnabled; } + + void setEnabled(bool enabled) + { mEnabled = enabled; } + + /** + * Updates the direction and button information. + */ + void update(); + + void startCalibration(); + + void finishCalibration(); + + bool isCalibrating() const + { return mCalibrating; } + + bool buttonPressed(unsigned char no) const; + + 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; + bool mButtons[MAX_BUTTONS]; + SDL_Joystick *mJoystick; + + int mUpTolerance, mDownTolerance, mLeftTolerance, mRightTolerance; + bool mCalibrating; + bool mEnabled; + + static int joystickCount; + + void doCalibration(); +}; + +#endif // JOYSTICK_H |