stk-code_catmod/src/input/input.hpp
2014-01-26 19:21:07 -05:00

176 lines
5.5 KiB
C++

//
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2007-2013 Robert Schuster <robertschuster@fsfe.org>
// Copyright (C) 2012-2013 SuperTuxKart-Team
//
// 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 3
// of the License, or (at your option) 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, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef HEADER_INPUT_HPP
#define HEADER_INPUT_HPP
/**
* \defgroup input
* Contains classes for input management (keyboard and gamepad)
*/
#include <string>
#include <irrString.h>
class Binding;
const int DEADZONE_MOUSE = 150;
const int DEADZONE_MOUSE_SENSE = 200;
const int DEADZONE_JOYSTICK = 2000;
const int MULTIPLIER_MOUSE = 750;
/**
* \ingroup input
*/
struct Input
{
static const int MAX_VALUE = 32768;
static const int HAT_H_ID = 100;
static const int HAT_V_ID = 101;
enum AxisDirection
{
AD_NEGATIVE,
AD_POSITIVE,
AD_NEUTRAL
};
enum AxisRange
{
AR_HALF,
AR_FULL
};
enum InputType
{
IT_NONE = 0,
IT_KEYBOARD,
IT_STICKMOTION,
IT_STICKBUTTON,
//IT_STICKHAT,
IT_MOUSEMOTION,
IT_MOUSEBUTTON
};
static const int IT_LAST = IT_MOUSEBUTTON;
InputType m_type;
int m_device_id;
int m_button_id; // or axis ID for gamepads axes
int m_axis_direction;
int m_axis_range;
wchar_t m_character;
Input()
: m_type(IT_NONE), m_device_id(0), m_button_id(0),
m_axis_direction(0), m_axis_range(Input::AR_FULL), m_character(0)
{
// Nothing to do.
}
/** Creates an Input instance which represents an arbitrary way of getting
* game input using a type specifier and 3 integers.
*
* Meaning of the 3 integers for each InputType:
* IT_NONE: This means nothing. In certain cases this is regarded as an
* unset binding.
* IT_KEYBOARD: id0 is a irrLicht value.
* IT_STICKMOTION: id0 - stick index, id1 - axis index, id2 - axis direction
* (negative, positive). You can assume that axis 0 is the X-Axis where the
* negative direction is to the left and that axis 1 is the Y-Axis with the
* negative direction being upwards.
* IT_STICKBUTTON: id0 - stick index, id1 - button index. Button 0 and 1 are
* usually reached most easily.
* IT_STICKHAT: This is not yet implemented.
* IT_MOUSEMOTION: id0 - axis index (0 -> X, 1 -> Y). Mouse wheel is
* represented as buttons!
* IT_MOUSEBUTTON: id0 - button number (1 -> left, 2 -> middle, 3 -> right,
* ...)
*
* Note: For joystick bindings that are actice in the menu the joystick's
* index should be zero. The binding will react to all joysticks connected
* to the system.
*/
Input(InputType ntype, int deviceID , int btnID = 0, int axisDirection= 0)
: m_type(ntype), m_device_id(deviceID), m_button_id(btnID),
m_axis_direction(axisDirection), m_axis_range(Input::AR_FULL)
{
// Nothing to do.
}
}; // struct Input
/**
* \brief types of input events / what actions the players can do
* \ingroup input
*/
enum PlayerAction
{
PA_BEFORE_FIRST = -1,
PA_STEER_LEFT = 0,
PA_STEER_RIGHT,
PA_ACCEL,
PA_BRAKE,
PA_NITRO,
PA_DRIFT,
PA_RESCUE,
PA_FIRE,
PA_LOOK_BACK,
PA_PAUSE_RACE,
PA_MENU_UP,
PA_MENU_DOWN,
PA_MENU_LEFT,
PA_MENU_RIGHT,
PA_MENU_SELECT,
PA_MENU_CANCEL,
PA_COUNT
};
const PlayerAction PA_FIRST_GAME_ACTION = PA_STEER_LEFT;
const PlayerAction PA_LAST_GAME_ACTION = PA_PAUSE_RACE;
const PlayerAction PA_FIRST_MENU_ACTION = PA_MENU_UP;
const PlayerAction PA_LAST_MENU_ACTION = PA_MENU_CANCEL;
/**
* \brief human-readable strings for each PlayerAction
* \ingroup input
*/
static std::string KartActionStrings[PA_COUNT] = {std::string("steerLeft"),
std::string("steerRight"),
std::string("accel"),
std::string("brake"),
std::string("nitro"),
std::string("drift"),
std::string("rescue"),
std::string("fire"),
std::string("lookBack"),
std::string("pauserace"),
std::string("menuUp"),
std::string("menuDown"),
std::string("menuLeft"),
std::string("menuRight"),
std::string("menuSelect"),
std::string("menuCancel")
};
#endif