Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

RageInputDevice.h

Go to the documentation of this file.
00001 #ifndef RAGEINPUTDEVICE_H 00002 #define RAGEINPUTDEVICE_H 1 00003 00004 #include "RageTimer.h" 00005 00006 /* Only raw, unshifted keys go in this table; this doesn't include internationalized 00007 * keyboards, only keys that we might actually want to test for programmatically. Any 00008 * other keys are mapped to KEY_OTHER_0 and up. (If we want to support real international 00009 * input, stick a wchar_t in DeviceInput.) */ 00010 00011 enum RageKeySym 00012 { 00013 KEY_SPACE = 32, 00014 KEY_EXCL = 33, 00015 KEY_QUOTE = 34, 00016 KEY_HASH = 35, 00017 KEY_DOLLAR = 36, 00018 KEY_PERCENT = 37, 00019 KEY_AMPER = 38, 00020 KEY_SQUOTE = 39, 00021 KEY_LPAREN = 40, 00022 KEY_RPAREN = 41, 00023 KEY_ASTERISK= 42, 00024 KEY_PLUS = 43, 00025 KEY_COMMA = 44, 00026 KEY_HYPHEN = 45, 00027 KEY_PERIOD = 46, 00028 KEY_SLASH = 47, 00029 KEY_C0 = 48, 00030 KEY_C1 = 49, 00031 KEY_C2 = 50, 00032 KEY_C3 = 51, 00033 KEY_C4 = 52, 00034 KEY_C5 = 53, 00035 KEY_C6 = 54, 00036 KEY_C7 = 55, 00037 KEY_C8 = 56, 00038 KEY_C9 = 57, 00039 KEY_COLON = 58, 00040 KEY_SEMICOLON = 59, 00041 KEY_LANGLE = 60, 00042 KEY_EQUAL = 61, 00043 KEY_RANGLE = 62, 00044 KEY_QUESTION= 63, 00045 KEY_AT = 64, 00046 KEY_CA = 65, 00047 KEY_CB = 66, 00048 KEY_CC = 67, 00049 KEY_CD = 68, 00050 KEY_CE = 69, 00051 KEY_CF = 70, 00052 KEY_CG = 71, 00053 KEY_CH = 72, 00054 KEY_CI = 73, 00055 KEY_CJ = 74, 00056 KEY_CK = 75, 00057 KEY_CL = 76, 00058 KEY_CM = 77, 00059 KEY_CN = 78, 00060 KEY_CO = 79, 00061 KEY_CP = 80, 00062 KEY_CQ = 81, 00063 KEY_CR = 82, 00064 KEY_CS = 83, 00065 KEY_CT = 84, 00066 KEY_CU = 85, 00067 KEY_CV = 86, 00068 KEY_CW = 87, 00069 KEY_CX = 88, 00070 KEY_CY = 89, 00071 KEY_CZ = 90, 00072 KEY_LBRACKET= 91, 00073 KEY_BACKSLASH= 92, 00074 KEY_RBRACKET= 93, 00075 KEY_CARAT = 94, 00076 KEY_UNDERSCORE= 95, 00077 KEY_ACCENT = 96, 00078 KEY_Ca = 97, 00079 KEY_Cb = 98, 00080 KEY_Cc = 99, 00081 KEY_Cd = 100, 00082 KEY_Ce = 101, 00083 KEY_Cf = 102, 00084 KEY_Cg = 103, 00085 KEY_Ch = 104, 00086 KEY_Ci = 105, 00087 KEY_Cj = 106, 00088 KEY_Ck = 107, 00089 KEY_Cl = 108, 00090 KEY_Cm = 109, 00091 KEY_Cn = 110, 00092 KEY_Co = 111, 00093 KEY_Cp = 112, 00094 KEY_Cq = 113, 00095 KEY_Cr = 114, 00096 KEY_Cs = 115, 00097 KEY_Ct = 116, 00098 KEY_Cu = 117, 00099 KEY_Cv = 118, 00100 KEY_Cw = 119, 00101 KEY_Cx = 120, 00102 KEY_Cy = 121, 00103 KEY_Cz = 122, 00104 KEY_LBRACE = 123, 00105 KEY_PIPE = 124, 00106 KEY_RBRACE = 125, 00107 KEY_DEL = 127, 00108 00109 KEY_BACK, 00110 KEY_TAB, 00111 KEY_ENTER, 00112 KEY_PAUSE, 00113 KEY_ESC, 00114 00115 KEY_F1, 00116 KEY_F2, 00117 KEY_F3, 00118 KEY_F4, 00119 KEY_F5, 00120 KEY_F6, 00121 KEY_F7, 00122 KEY_F8, 00123 KEY_F9, 00124 KEY_F10, 00125 KEY_F11, 00126 KEY_F12, 00127 KEY_F13, 00128 KEY_F14, 00129 KEY_F15, 00130 KEY_F16, 00131 00132 KEY_LCTRL, 00133 KEY_RCTRL, 00134 KEY_LSHIFT, 00135 KEY_RSHIFT, 00136 KEY_LALT, 00137 KEY_RALT, 00138 KEY_LMETA, 00139 KEY_RMETA, 00140 KEY_LSUPER, 00141 KEY_RSUPER, 00142 KEY_MENU, 00143 00144 KEY_NUMLOCK, 00145 KEY_SCRLLOCK, 00146 KEY_CAPSLOCK, 00147 KEY_PRTSC, 00148 00149 KEY_UP, 00150 KEY_DOWN, 00151 KEY_LEFT, 00152 KEY_RIGHT, 00153 00154 KEY_INSERT, 00155 KEY_HOME, 00156 KEY_END, 00157 KEY_PGUP, 00158 KEY_PGDN, 00159 00160 KEY_KP_C0, 00161 KEY_KP_C1, 00162 KEY_KP_C2, 00163 KEY_KP_C3, 00164 KEY_KP_C4, 00165 KEY_KP_C5, 00166 KEY_KP_C6, 00167 KEY_KP_C7, 00168 KEY_KP_C8, 00169 KEY_KP_C9, 00170 KEY_KP_SLASH, 00171 KEY_KP_ASTERISK, 00172 KEY_KP_HYPHEN, 00173 KEY_KP_PLUS, 00174 KEY_KP_PERIOD, 00175 KEY_KP_EQUAL, 00176 KEY_KP_ENTER, 00177 00178 KEY_OTHER_0, 00179 /* ... */ 00180 KEY_LAST_OTHER=512, 00181 00182 NUM_KEYS, 00183 KEY_INVALID 00184 }; 00185 00186 const int NUM_KEYBOARD_BUTTONS = NUM_KEYS; 00187 const int NUM_JOYSTICKS = 16; 00188 const int NUM_PUMPS = 2; 00189 const int NUM_PARAS = 2; 00190 00191 enum InputDevice { 00192 DEVICE_KEYBOARD = 0, 00193 DEVICE_JOY1, 00194 DEVICE_JOY2, 00195 DEVICE_JOY3, 00196 DEVICE_JOY4, 00197 DEVICE_JOY5, 00198 DEVICE_JOY6, 00199 DEVICE_JOY7, 00200 DEVICE_JOY8, 00201 DEVICE_JOY9, 00202 DEVICE_JOY10, 00203 DEVICE_JOY11, 00204 DEVICE_JOY12, 00205 DEVICE_JOY13, 00206 DEVICE_JOY14, 00207 DEVICE_JOY15, 00208 DEVICE_JOY16, 00209 DEVICE_PUMP1, 00210 DEVICE_PUMP2, 00211 DEVICE_PARA, 00212 NUM_INPUT_DEVICES, // leave this at the end 00213 DEVICE_NONE // means this is NULL 00214 }; 00215 00216 /* Joystick inputs. We try to have enough input names so any input on a reasonable 00217 * joystick has an obvious mapping, but keep it generic and don't try to handle odd 00218 * special cases. For example, many controllers have two sticks, so the JOY_LEFT_2, etc. 00219 * pairs are useful for many types of sticks. */ 00220 enum JoystickButton 00221 { 00222 /* Standard axis: */ 00223 JOY_LEFT = 0, JOY_RIGHT, 00224 JOY_UP, JOY_DOWN, 00225 00226 /* Secondary sticks: */ 00227 JOY_LEFT_2, JOY_RIGHT_2, 00228 JOY_UP_2, JOY_DOWN_2, 00229 00230 JOY_Z_UP, JOY_Z_DOWN, 00231 JOY_ROT_UP, JOY_ROT_DOWN, JOY_ROT_LEFT, JOY_ROT_RIGHT, JOY_ROT_Z_UP, JOY_ROT_Z_DOWN, 00232 JOY_HAT_LEFT, JOY_HAT_RIGHT, JOY_HAT_UP, JOY_HAT_DOWN, 00233 JOY_AUX_1, JOY_AUX_2, JOY_AUX_3, JOY_AUX_4, 00234 00235 /* Buttons: */ 00236 JOY_1, JOY_2, JOY_3, JOY_4, JOY_5, JOY_6, JOY_7, JOY_8, JOY_9, JOY_10, 00237 JOY_11, JOY_12, JOY_13, JOY_14, JOY_15, JOY_16, JOY_17, JOY_18, JOY_19, JOY_20, 00238 JOY_21, JOY_22, JOY_23, JOY_24, JOY_25, JOY_26, JOY_27, JOY_28, JOY_29, JOY_30, 00239 JOY_31, JOY_32, 00240 NUM_JOYSTICK_BUTTONS // leave this at the end 00241 }; 00242 00243 enum PumpButton { 00244 PUMP_UL, 00245 PUMP_UR, 00246 PUMP_MID, 00247 PUMP_DL, 00248 PUMP_DR, 00249 PUMP_ESCAPE, 00250 00251 /* These buttons are for slave pads, attached to the first pad; they don't have 00252 * their own USB device, and they have no escape button. */ 00253 PUMP_2P_UL, 00254 PUMP_2P_UR, 00255 PUMP_2P_MID, 00256 PUMP_2P_DL, 00257 PUMP_2P_DR, 00258 NUM_PUMP_PAD_BUTTONS // leave this at the end 00259 }; 00260 00261 enum ParaButton { 00262 PARA_L, 00263 PARA_UL, 00264 PARA_U, 00265 PARA_UR, 00266 PARA_R, 00267 PARA_SELECT, 00268 PARA_START, 00269 PARA_MENU_LEFT, 00270 PARA_MENU_RIGHT, 00271 NUM_PARA_PAD_BUTTONS // leave this at the end 00272 }; 00273 00274 00275 const int NUM_DEVICE_BUTTONS[NUM_INPUT_DEVICES] = 00276 { 00277 NUM_KEYBOARD_BUTTONS, // DEVICE_KEYBOARD 00278 NUM_JOYSTICK_BUTTONS, // DEVICE_JOY1 00279 NUM_JOYSTICK_BUTTONS, // DEVICE_JOY2 00280 NUM_JOYSTICK_BUTTONS, // DEVICE_JOY3 00281 NUM_JOYSTICK_BUTTONS, // DEVICE_JOY4 00282 NUM_JOYSTICK_BUTTONS, // DEVICE_JOY5 00283 NUM_JOYSTICK_BUTTONS, // DEVICE_JOY6 00284 NUM_PUMP_PAD_BUTTONS, // DEVICE_PUMP1 00285 NUM_PUMP_PAD_BUTTONS, // DEVICE_PUMP2 00286 NUM_PARA_PAD_BUTTONS, // DEVICE_PARA 00287 }; 00288 00289 const int MAX_DEVICE_BUTTONS = NUM_KEYBOARD_BUTTONS; 00290 00291 struct DeviceInput 00292 { 00293 public: 00294 InputDevice device; 00295 int button; 00296 00297 /* This is usually 0 or 1. Analog joystick inputs can set this to a percentage (0..1). 00298 * This should be 0 for analog axes within the dead zone. */ 00299 float level; 00300 00301 RageTimer ts; 00302 00303 DeviceInput(): device(DEVICE_NONE), button(-1), level(0), ts(RageZeroTimer) { } 00304 DeviceInput( InputDevice d, int b, float l=0 ): device(d), button(b), level(l), ts(RageZeroTimer) { } 00305 DeviceInput( InputDevice d, int b, float l, const RageTimer &t ): 00306 device(d), button(b), level(l), ts(t) { } 00307 00308 bool operator==( const DeviceInput &other ) const 00309 { 00310 /* Return true if we represent the same button on the same device. Don't 00311 * compare level or ts. */ 00312 return device == other.device && button == other.button; 00313 }; 00314 00315 CString GetDescription(); 00316 00317 CString toString(); 00318 bool fromString( const CString &s ); 00319 00320 bool IsValid() const { return device != DEVICE_NONE; }; 00321 void MakeInvalid() { device = DEVICE_NONE; }; 00322 00323 char ToChar() const; 00324 00325 bool IsJoystick() const { return DEVICE_JOY1 <= device && device < DEVICE_JOY1+NUM_JOYSTICKS; } 00326 00327 static int NumButtons(InputDevice device); 00328 }; 00329 00330 #endif 00331 /* 00332 * Copyright (c) 2001-2002 Chris Danford 00333 * All rights reserved. 00334 * 00335 * Permission is hereby granted, free of charge, to any person obtaining a 00336 * copy of this software and associated documentation files (the 00337 * "Software"), to deal in the Software without restriction, including 00338 * without limitation the rights to use, copy, modify, merge, publish, 00339 * distribute, and/or sell copies of the Software, and to permit persons to 00340 * whom the Software is furnished to do so, provided that the above 00341 * copyright notice(s) and this permission notice appear in all copies of 00342 * the Software and that both the above copyright notice(s) and this 00343 * permission notice appear in supporting documentation. 00344 * 00345 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00346 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00347 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF 00348 * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS 00349 * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT 00350 * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS 00351 * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 00352 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 00353 * PERFORMANCE OF THIS SOFTWARE. 00354 */

Generated on Thu Jan 27 20:57:28 2005 for StepMania by doxygen 1.3.7