Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/input/src/core/InputInterfaces.h @ 1236

Last change on this file since 1236 was 1236, checked in by rgrieder, 16 years ago
  • feature: Automatic key repetition in InputBuffer, configurable in orxonox.ini
  • replaced std::list and std::map with std::vector in InputManager where necessary
  • new mouseWheelTurned event
  • some renaming
  • OIS:: calls only necessary in InputManager now
File size: 15.7 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30 @file
31 @brief Declarations of various interface classes for the input management.
32 */
33
34#ifndef _InputInterfaces_H__
35#define _InputInterfaces_H__
36
37#include "CorePrereqs.h"
38
39#include "ois/OIS.h"
40
41namespace orxonox
42{
43  namespace KeyCode
44  {
45          enum Enum
46          {
47                  Unassigned    = OIS::KC_UNASSIGNED, 
48                  Escape        = OIS::KC_ESCAPE,     
49            _1            = OIS::KC_1,           
50            _2            = OIS::KC_2,           
51            _3            = OIS::KC_3,           
52            _4            = OIS::KC_4,           
53            _5            = OIS::KC_5,           
54      _6            = OIS::KC_6,           
55            _7            = OIS::KC_7,           
56            _8            = OIS::KC_8,           
57            _9            = OIS::KC_9,           
58            _0            = OIS::KC_0,           
59                  Minus         = OIS::KC_MINUS,           // - on main keyboard
60                  Equals        = OIS::KC_EQUALS,     
61                  Back          = OIS::KC_BACK,            // backspace
62                  Tab           = OIS::KC_TAB,         
63                  Q             = OIS::KC_Q,           
64                  W             = OIS::KC_W,           
65                  E             = OIS::KC_E,           
66                  R             = OIS::KC_R,           
67                  T             = OIS::KC_T,           
68                  Y             = OIS::KC_Y,           
69                  U             = OIS::KC_U,           
70                  I             = OIS::KC_I,           
71                  O             = OIS::KC_O,           
72                  P             = OIS::KC_P,           
73                  LeftBracket   = OIS::KC_LBRACKET,   
74                  RightBracket  = OIS::KC_RBRACKET,   
75                  Return        = OIS::KC_RETURN,          // Enter on main keyboard
76                  LeftControl   = OIS::KC_LCONTROL,   
77                  A             = OIS::KC_A,           
78                  S             = OIS::KC_S,           
79                  D             = OIS::KC_D,           
80                  F             = OIS::KC_F,           
81                  G             = OIS::KC_G,           
82                  H             = OIS::KC_H,           
83                  J             = OIS::KC_J,           
84                  K             = OIS::KC_K,           
85                  L             = OIS::KC_L,           
86                  Semicolon     = OIS::KC_SEMICOLON,   
87                  Apostrophe    = OIS::KC_APOSTROPHE, 
88                  Grave         = OIS::KC_GRAVE,           // accent
89                  LeftShift     = OIS::KC_LSHIFT,     
90                  Backslash     = OIS::KC_BACKSLASH,   
91                  Z             = OIS::KC_Z,           
92                  X             = OIS::KC_X,           
93                  C             = OIS::KC_C,           
94                  V             = OIS::KC_V,           
95                  B             = OIS::KC_B,           
96                  N             = OIS::KC_N,           
97                  M             = OIS::KC_M,           
98                  Comma         = OIS::KC_COMMA,       
99                  Period        = OIS::KC_PERIOD,          // . on main keyboard
100                  Slash         = OIS::KC_SLASH,           // / on main keyboard
101                  RightShift    = OIS::KC_RSHIFT,     
102                  Multiply      = OIS::KC_MULTIPLY,        // * on numeric keypad
103                  LeftAlt       = OIS::KC_LMENU,           // left Alt
104                  Space         = OIS::KC_SPACE,       
105                  CapsLock      = OIS::KC_CAPITAL,     
106                  F1            = OIS::KC_F1,         
107                  F2            = OIS::KC_F2,         
108                  F3            = OIS::KC_F3,         
109                  F4            = OIS::KC_F4,         
110                  F5            = OIS::KC_F5,         
111                  F6            = OIS::KC_F6,         
112                  F7            = OIS::KC_F7,         
113                  F8            = OIS::KC_F8,         
114                  F9            = OIS::KC_F9,         
115                  F10           = OIS::KC_F10,         
116                  Numlock       = OIS::KC_NUMLOCK,     
117                  Scrolllock    = OIS::KC_SCROLL,          // Scroll Lock
118                  Numpad7       = OIS::KC_NUMPAD7,     
119                  Numpad8       = OIS::KC_NUMPAD8,     
120                  Numpad9       = OIS::KC_NUMPAD9,     
121                  NumpadSubtract= OIS::KC_SUBTRACT,        // - on numeric keypad
122                  Numpad4       = OIS::KC_NUMPAD4,     
123                  Numpad5       = OIS::KC_NUMPAD5,     
124                  Numpad6       = OIS::KC_NUMPAD6,     
125                  NumpadAdd     = OIS::KC_ADD,             // + on numeric keypad
126                  Numpad1       = OIS::KC_NUMPAD1,     
127                  Numpad2       = OIS::KC_NUMPAD2,     
128                  Numpad3       = OIS::KC_NUMPAD3,     
129                  Numpad0       = OIS::KC_NUMPAD0,     
130                  NumpadPeriod  = OIS::KC_DECIMAL,         // . on numeric keypad
131                  LessThan      = OIS::KC_OEM_102,         // < > | on UK/Germany keyboards
132                  F11           = OIS::KC_F11,         
133                  F12           = OIS::KC_F12,         
134                  F13           = OIS::KC_F13,             //                     (NEC PC98)
135                  F14           = OIS::KC_F14,             //                     (NEC PC98)
136                  F15           = OIS::KC_F15,             //                     (NEC PC98)
137                  Kana          = OIS::KC_KANA,            // (Japanese keyboard)
138                  ABNT_C1       = OIS::KC_ABNT_C1,         // / ? on Portugese (Brazilian) keyboards
139                  Convert       = OIS::KC_CONVERT,         // (Japanese keyboard)
140                  NoConvert     = OIS::KC_NOCONVERT,       // (Japanese keyboard)
141                  Yen           = OIS::KC_YEN,             // (Japanese keyboard)
142                  ABNT_C2       = OIS::KC_ABNT_C2,         // Numpad . on Portugese (Brazilian) keyboards
143                  NumpadEquals  = OIS::KC_NUMPADEQUALS,    // = on numeric keypad (NEC PC98)
144                  PreviousTrack = OIS::KC_PREVTRACK,       // Previous Track (KC_CIRCUMFLEX on Japanese keyboard)
145                  AT            = OIS::KC_AT,              //                     (NEC PC98)
146                  Colon         = OIS::KC_COLON,           //                     (NEC PC98)
147                  Underline     = OIS::KC_UNDERLINE,       //                     (NEC PC98)
148                  Kanji         = OIS::KC_KANJI,           // (Japanese keyboard)
149                  Stop          = OIS::KC_STOP,            //                     (NEC PC98)
150                  AX            = OIS::KC_AX,              //                     (Japan AX)
151                  Unlabeled     = OIS::KC_UNLABELED,       //                        (J3100)
152                  NextTrack     = OIS::KC_NEXTTRACK,       // Next Track
153                  NumpadEnter   = OIS::KC_NUMPADENTER,     // Enter on numeric keypad
154                  RightControl  = OIS::KC_RCONTROL,   
155                  Mute          = OIS::KC_MUTE,            // Mute
156                  Calculator    = OIS::KC_CALCULATOR,      // Calculator
157                  PlayPause     = OIS::KC_PLAYPAUSE,       // Play / Pause
158                  MediaStop     = OIS::KC_MEDIASTOP,       // Media Stop
159                  VolumeDown    = OIS::KC_VOLUMEDOWN,      // Volume -
160                  VolumeUp      = OIS::KC_VOLUMEUP,        // Volume +
161                  WebHome       = OIS::KC_WEBHOME,         // Web home
162                  NumpadComma   = OIS::KC_NUMPADCOMMA,     // , on numeric keypad (NEC PC98)
163                  Divide        = OIS::KC_DIVIDE,          // / on numeric keypad
164                  SYSRQ         = OIS::KC_SYSRQ,       
165                  RightAlt      = OIS::KC_RMENU,           // right Alt
166                  Pause         = OIS::KC_PAUSE,           // Pause
167                  Home          = OIS::KC_HOME,            // Home on arrow keypad
168                  Up            = OIS::KC_UP,              // UpArrow on arrow keypad
169                  PageUp        = OIS::KC_PGUP,            // PgUp on arrow keypad
170                  Left          = OIS::KC_LEFT,            // LeftArrow on arrow keypad
171                  Right         = OIS::KC_RIGHT,           // RightArrow on arrow keypad
172                  End           = OIS::KC_END,             // End on arrow keypad
173                  Down          = OIS::KC_DOWN,            // DownArrow on arrow keypad
174                  PageDown      = OIS::KC_PGDOWN,          // PgDn on arrow keypad
175                  Insert        = OIS::KC_INSERT,          // Insert on arrow keypad
176                  Delete        = OIS::KC_DELETE,          // Delete on arrow keypad
177                  LeftWindows   = OIS::KC_LWIN,            // Left Windows key
178                  RightWindows  = OIS::KC_RWIN,            // Right Windows key
179                  Apps          = OIS::KC_APPS,            // AppMenu key
180                  Power         = OIS::KC_POWER,           // System Power
181                  Sleep         = OIS::KC_SLEEP,           // System Sleep
182                  Wake          = OIS::KC_WAKE,            // System Wake
183                  WebSearch     = OIS::KC_WEBSEARCH,       // Web Search
184                  WebFavorites  = OIS::KC_WEBFAVORITES,    // Web Favorites
185                  WebRefresh    = OIS::KC_WEBREFRESH,      // Web Refresh
186                  WebStop       = OIS::KC_WEBSTOP,         // Web Stop
187                  WebForward    = OIS::KC_WEBFORWARD,      // Web Forward
188                  WebBack       = OIS::KC_WEBBACK,         // Web Back
189                  MyComputer    = OIS::KC_MYCOMPUTER,      // My Computer
190                  Mail          = OIS::KC_MAIL,            // Mail
191                  MediaSelect   = OIS::KC_MEDIASELECT      // Media Select
192          };
193  }
194
195        /*using OIS::KC_UNASSIGNED;
196        using OIS::KC_ESCAPE;
197        using OIS::KC_1;
198        using OIS::KC_2;
199        using OIS::KC_3;
200        using OIS::KC_4;
201        using OIS::KC_5;
202        using OIS::KC_6;
203        using OIS::KC_7;
204        using OIS::KC_8;
205        using OIS::KC_9;
206        using OIS::KC_0;
207        using OIS::KC_MINUS;
208        using OIS::KC_EQUALS;
209        using OIS::KC_BACK;
210        using OIS::KC_TAB;
211        using OIS::KC_Q;
212        using OIS::KC_W;
213        using OIS::KC_E;
214        using OIS::KC_R;
215        using OIS::KC_T;
216        using OIS::KC_Y;
217        using OIS::KC_U;
218        using OIS::KC_I;
219        using OIS::KC_O;
220        using OIS::KC_P;
221        using OIS::KC_LBRACKET;
222        using OIS::KC_RBRACKET;
223        using OIS::KC_RETURN;
224        using OIS::KC_LCONTROL;
225        using OIS::KC_A;
226        using OIS::KC_S;
227        using OIS::KC_D;
228        using OIS::KC_F;
229        using OIS::KC_G;
230        using OIS::KC_H;
231        using OIS::KC_J;
232        using OIS::KC_K;
233        using OIS::KC_L;
234        using OIS::KC_SEMICOLON;
235        using OIS::KC_APOSTROPHE;
236        using OIS::KC_GRAVE;
237        using OIS::KC_LSHIFT;
238        using OIS::KC_BACKSLASH;
239        using OIS::KC_Z;
240        using OIS::KC_X;
241        using OIS::KC_C;
242        using OIS::KC_V;
243        using OIS::KC_B;
244        using OIS::KC_N;
245        using OIS::KC_M;
246        using OIS::KC_COMMA;
247        using OIS::KC_PERIOD;
248        using OIS::KC_SLASH;
249        using OIS::KC_RSHIFT;
250        using OIS::KC_MULTIPLY;
251        using OIS::KC_LMENU;
252        using OIS::KC_SPACE;
253        using OIS::KC_CAPITAL;
254        using OIS::KC_F1;
255        using OIS::KC_F2;
256        using OIS::KC_F3;
257        using OIS::KC_F4;
258        using OIS::KC_F5;
259        using OIS::KC_F6;
260        using OIS::KC_F7;
261        using OIS::KC_F8;
262        using OIS::KC_F9;
263        using OIS::KC_F10;
264        using OIS::KC_NUMLOCK;
265        using OIS::KC_SCROLL;
266        using OIS::KC_NUMPAD7;
267        using OIS::KC_NUMPAD8;
268        using OIS::KC_NUMPAD9;
269        using OIS::KC_SUBTRACT;
270        using OIS::KC_NUMPAD4;
271        using OIS::KC_NUMPAD5;
272        using OIS::KC_NUMPAD6;
273        using OIS::KC_ADD;
274        using OIS::KC_NUMPAD1;
275        using OIS::KC_NUMPAD2;
276        using OIS::KC_NUMPAD3;
277        using OIS::KC_NUMPAD0;
278        using OIS::KC_DECIMAL;
279        using OIS::KC_OEM_102;
280        using OIS::KC_F11;
281        using OIS::KC_F12;
282        using OIS::KC_F13;
283        using OIS::KC_F14;
284        using OIS::KC_F15;
285        using OIS::KC_KANA;
286        using OIS::KC_ABNT_C1;
287        using OIS::KC_CONVERT;
288        using OIS::KC_NOCONVERT;
289        using OIS::KC_YEN;
290        using OIS::KC_ABNT_C2;
291        using OIS::KC_NUMPADEQUALS;
292        using OIS::KC_PREVTRACK;
293        using OIS::KC_AT;
294        using OIS::KC_COLON;
295        using OIS::KC_UNDERLINE;
296        using OIS::KC_KANJI;
297        using OIS::KC_STOP;
298        using OIS::KC_AX;
299        using OIS::KC_UNLABELED;
300        using OIS::KC_NEXTTRACK;
301        using OIS::KC_NUMPADENTER;
302        using OIS::KC_RCONTROL;
303        using OIS::KC_MUTE;
304        using OIS::KC_CALCULATOR;
305        using OIS::KC_PLAYPAUSE;
306        using OIS::KC_MEDIASTOP;
307        using OIS::KC_VOLUMEDOWN;
308        using OIS::KC_VOLUMEUP;
309        using OIS::KC_WEBHOME;
310        using OIS::KC_NUMPADCOMMA;
311        using OIS::KC_DIVIDE;
312        using OIS::KC_SYSRQ;
313        using OIS::KC_RMENU;
314        using OIS::KC_PAUSE;
315        using OIS::KC_HOME;
316        using OIS::KC_UP;
317        using OIS::KC_PGUP;
318        using OIS::KC_LEFT;
319        using OIS::KC_RIGHT;
320        using OIS::KC_END;
321        using OIS::KC_DOWN;
322        using OIS::KC_PGDOWN;
323        using OIS::KC_INSERT;
324        using OIS::KC_DELETE;
325        using OIS::KC_LWIN;
326        using OIS::KC_RWIN;
327        using OIS::KC_APPS;
328        using OIS::KC_POWER;
329        using OIS::KC_SLEEP;
330        using OIS::KC_WAKE;
331        using OIS::KC_WEBSEARCH;
332        using OIS::KC_WEBFAVORITES;
333        using OIS::KC_WEBREFRESH;
334        using OIS::KC_WEBSTOP;
335        using OIS::KC_WEBFORWARD;
336        using OIS::KC_WEBBACK;
337        using OIS::KC_MYCOMPUTER;
338        using OIS::KC_MAIL;
339        using OIS::KC_MEDIASELECT;
340  }
341  typedef OIS::KeyCode KeyCode;*/
342
343  //typedef OIS::MouseButton MouseButton;
344 
345  namespace MouseButton
346  {
347    enum Enum
348    {
349      Left    = OIS::MB_Left,
350      Right   = OIS::MB_Right,
351      Middle  = OIS::MB_Middle,
352      Button3 = OIS::MB_Button3,
353      Button4 = OIS::MB_Button4,
354      Button5 = OIS::MB_Button5,
355      Button6 = OIS::MB_Button6,
356      Button7 = OIS::MB_Button7
357    };
358  }
359
360  /*using OIS::MB_Left;
361  using OIS::MB_Right;
362  using OIS::MB_Middle;
363  using OIS::MB_Button3;
364  using OIS::MB_Button4;
365  using OIS::MB_Button5;
366  using OIS::MB_Button6;
367  using OIS::MB_Button7;*/
368
369  namespace KeyboardModifier
370  {
371    enum Enum
372    {
373            Shift = 0x0000001,
374            Ctrl  = 0x0000010,
375            Alt   = 0x0000100
376    };
377  }
378
379  class _CoreExport KeyboardState
380  {
381  public:
382  };
383
384  struct _CoreExport Key
385  {
386    Key(const OIS::KeyEvent& evt) : key((KeyCode::Enum)evt.key), text(evt.text) { }
387    KeyCode::Enum key;
388    unsigned int text;
389  };
390
391  class _CoreExport KeyEvent
392  {
393  public:
394                KeyEvent(KeyCode::Enum key, unsigned int text) : key(key), text(text) { }
395    KeyEvent(const OIS::KeyEvent& evt, unsigned int mod) : key((KeyCode::Enum)evt.key), text(evt.text), modifiers(mod) { }
396    KeyEvent(const Key& key, unsigned int mod) : key(key.key), text(key.text), modifiers(mod) { }
397    bool isModifierDown(KeyboardModifier::Enum modifier) const { return (KeyboardModifier::Enum)modifier&modifiers; }
398
399                const KeyCode::Enum key;
400                unsigned int text;
401    unsigned int modifiers;
402  };
403
404  typedef OIS::MouseState MouseState;
405
406  class _CoreExport JoyStickState : OIS::JoyStickState
407  {
408  public:
409    JoyStickState(const OIS::JoyStickState& state, int ID) : OIS::JoyStickState(state), JoyStickID(ID) { }
410    JoyStickState() { clear(); }
411    int JoyStickID;
412  };
413
414  /**
415    @brief Interface class used for key input listeners.
416  */
417  class _CoreExport KeyHandler
418  {
419  public:
420    virtual ~KeyHandler() { }
421    virtual bool keyPressed (const KeyEvent& evt) = 0;
422    virtual bool keyReleased(const KeyEvent& evt) = 0;
423    virtual bool keyHeld    (const KeyEvent& evt) = 0;
424  };
425
426  /**
427    @brief Interface class used for mouse input listeners.
428  */
429  class _CoreExport MouseHandler
430  {
431  public:
432    virtual ~MouseHandler() { }
433    virtual bool mouseButtonPressed (const MouseState& state, MouseButton::Enum id) = 0;
434    virtual bool mouseButtonReleased(const MouseState& state, MouseButton::Enum id) = 0;
435    virtual bool mouseButtonHeld    (const MouseState& state, MouseButton::Enum id) = 0;
436    virtual bool mouseMoved         (const MouseState& state) = 0;
437    virtual bool mouseWheelTurned   (const MouseState& state) = 0;
438  };
439
440
441  /**
442    @brief Interface class used for joy stick input listeners.
443  */
444  class _CoreExport JoyStickHandler
445  {
446  public:
447    virtual ~JoyStickHandler() { }
448                virtual bool joyStickButtonPressed (const JoyStickState& state, int button) = 0;
449                virtual bool joyStickButtonReleased(const JoyStickState& state, int button) = 0;
450    virtual bool joyStickButtonHeld    (const JoyStickState& state, int button) = 0;
451                virtual bool joyStickAxisMoved     (const JoyStickState& state, int axis)   = 0;
452                virtual bool joyStickSliderMoved   (const JoyStickState& state, int index) {return true;}
453                virtual bool joyStickPovMoved      (const JoyStickState& state, int index) {return true;}
454                virtual bool joyStickVector3Moved  (const JoyStickState& state, int index) {return true;}
455  };
456
457}
458
459#endif /* _InputInterfaces_H__ */
Note: See TracBrowser for help on using the repository browser.