Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

# OgreInput.h

Go to the documentation of this file.

    00001 /*
    00002 -----------------------------------------------------------------------------
    00003 This source file is part of OGRE
    00004     (Object-oriented Graphics Rendering Engine)
    00005 For the latest info, see http://www.ogre3d.org/
    00006
    00007 Copyright © 2000-2002 The OGRE Team
    00008 Also see acknowledgements in Readme.html
    00009
    00010 This program is free software; you can redistribute it and/or modify it under
    00011 the terms of the GNU Lesser General Public License as published by the Free Software
    00012 Foundation; either version 2 of the License, or (at your option) any later
    00013 version.
    00014
    00015 This program is distributed in the hope that it will be useful, but WITHOUT
    00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    00018
    00019 You should have received a copy of the GNU Lesser General Public License along with
    00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
    00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
    00022 http://www.gnu.org/copyleft/lesser.txt.
    00023 -----------------------------------------------------------------------------
    00024 */
    00025 #ifndef __Input_H__
    00026 #define __Input_H__
    00027
    00028 #include "OgrePrerequisites.h"
    00029
    00030 namespace Ogre {
    00031
    00032 //    typedef HashMap<int, char> KeyChars;
    00033     typedef std::map<long, char> KeyChars;
    00034
    00035     inline long KEYCODE(long keyCode, long modifiers = 0)
    00036       { return ((modifiers << 16) & 0xffff0000) | (keyCode & 0xffff); }
    00037
    00040     enum KeyCode
    00041     {
    00042         KC_ESCAPE          =0x01,
    00043         KC_1               =0x02,
    00044         KC_2               =0x03,
    00045         KC_3               =0x04,
    00046         KC_4               =0x05,
    00047         KC_5               =0x06,
    00048         KC_6               =0x07,
    00049         KC_7               =0x08,
    00050         KC_8               =0x09,
    00051         KC_9               =0x0A,
    00052         KC_0               =0x0B,
    00053         KC_MINUS           =0x0C,    /* - on main keyboard */
    00054         KC_EQUALS          =0x0D,
    00055         KC_BACK            =0x0E,    /* backspace */
    00056         KC_TAB             =0x0F,
    00057         KC_Q               =0x10,
    00058         KC_W               =0x11,
    00059         KC_E               =0x12,
    00060         KC_R               =0x13,
    00061         KC_T               =0x14,
    00062         KC_Y               =0x15,
    00063         KC_U               =0x16,
    00064         KC_I               =0x17,
    00065         KC_O               =0x18,
    00066         KC_P               =0x19,
    00067         KC_LBRACKET        =0x1A,
    00068         KC_RBRACKET        =0x1B,
    00069         KC_RETURN          =0x1C,    /* Enter on main keyboard */
    00070         KC_LCONTROL        =0x1D,
    00071         KC_A               =0x1E,
    00072         KC_S               =0x1F,
    00073         KC_D               =0x20,
    00074         KC_F               =0x21,
    00075         KC_G               =0x22,
    00076         KC_H               =0x23,
    00077         KC_J               =0x24,
    00078         KC_K               =0x25,
    00079         KC_L               =0x26,
    00080         KC_SEMICOLON       =0x27,
    00081         KC_APOSTROPHE      =0x28,
    00082         KC_GRAVE           =0x29,    /* accent grave */
    00083         KC_LSHIFT          =0x2A,
    00084         KC_BACKSLASH       =0x2B,
    00085         KC_Z               =0x2C,
    00086         KC_X               =0x2D,
    00087         KC_C               =0x2E,
    00088         KC_V               =0x2F,
    00089         KC_B               =0x30,
    00090         KC_N               =0x31,
    00091         KC_M               =0x32,
    00092         KC_COMMA           =0x33,
    00093         KC_PERIOD          =0x34,    /* . on main keyboard */
    00094         KC_SLASH           =0x35,    /* '/' on main keyboard */
    00095         KC_RSHIFT          =0x36,
    00096         KC_MULTIPLY        =0x37,    /* * on numeric keypad */
    00097         KC_LMENU           =0x38,    /* left Alt */
    00098         KC_SPACE           =0x39,
    00099         KC_CAPITAL         =0x3A,
    00100         KC_F1              =0x3B,
    00101         KC_F2              =0x3C,
    00102         KC_F3              =0x3D,
    00103         KC_F4              =0x3E,
    00104         KC_F5              =0x3F,
    00105         KC_F6              =0x40,
    00106         KC_F7              =0x41,
    00107         KC_F8              =0x42,
    00108         KC_F9              =0x43,
    00109         KC_F10             =0x44,
    00110         KC_NUMLOCK         =0x45,
    00111         KC_SCROLL          =0x46,    /* Scroll Lock */
    00112         KC_NUMPAD7         =0x47,
    00113         KC_NUMPAD8         =0x48,
    00114         KC_NUMPAD9         =0x49,
    00115         KC_SUBTRACT        =0x4A,    /* - on numeric keypad */
    00116         KC_NUMPAD4         =0x4B,
    00117         KC_NUMPAD5         =0x4C,
    00118         KC_NUMPAD6         =0x4D,
    00119         KC_ADD             =0x4E,    /* + on numeric keypad */
    00120         KC_NUMPAD1         =0x4F,
    00121         KC_NUMPAD2         =0x50,
    00122         KC_NUMPAD3         =0x51,
    00123         KC_NUMPAD0         =0x52,
    00124         KC_DECIMAL         =0x53,    /* . on numeric keypad */
    00125         KC_OEM_102         =0x56,    /* < > | on UK/Germany keyboards */
    00126         KC_F11             =0x57,
    00127         KC_F12             =0x58,
    00128         KC_F13             =0x64,    /*                     (NEC PC98) */
    00129         KC_F14             =0x65,    /*                     (NEC PC98) */
    00130         KC_F15             =0x66,    /*                     (NEC PC98) */
    00131         KC_KANA            =0x70,    /* (Japanese keyboard)            */
    00132         KC_ABNT_C1         =0x73,    /* / ? on Portugese (Brazilian) keyboards */
    00133         KC_CONVERT         =0x79,    /* (Japanese keyboard)            */
    00134         KC_NOCONVERT       =0x7B,    /* (Japanese keyboard)            */
    00135         KC_YEN             =0x7D,    /* (Japanese keyboard)            */
    00136         KC_ABNT_C2         =0x7E,    /* Numpad . on Portugese (Brazilian) keyboards */
    00137         KC_NUMPADEQUALS    =0x8D,    /* = on numeric keypad (NEC PC98) */
    00138         KC_PREVTRACK       =0x90,    /* Previous Track (KC_CIRCUMFLEX on Japanese keyboard) */
    00139         KC_AT              =0x91,    /*                     (NEC PC98) */
    00140         KC_COLON           =0x92,    /*                     (NEC PC98) */
    00141         KC_UNDERLINE       =0x93,    /*                     (NEC PC98) */
    00142         KC_KANJI           =0x94,    /* (Japanese keyboard)            */
    00143         KC_STOP            =0x95,    /*                     (NEC PC98) */
    00144         KC_AX              =0x96,    /*                     (Japan AX) */
    00145         KC_UNLABELED       =0x97,    /*                        (J3100) */
    00146         KC_NEXTTRACK       =0x99,    /* Next Track */
    00147         KC_NUMPADENTER     =0x9C,    /* Enter on numeric keypad */
    00148         KC_RCONTROL        =0x9D,
    00149         KC_MUTE            =0xA0,    /* Mute */
    00150         KC_CALCULATOR      =0xA1,    /* Calculator */
    00151         KC_PLAYPAUSE       =0xA2,    /* Play / Pause */
    00152         KC_MEDIASTOP       =0xA4,    /* Media Stop */
    00153         KC_VOLUMEDOWN      =0xAE,    /* Volume - */
    00154         KC_VOLUMEUP        =0xB0,    /* Volume + */
    00155         KC_WEBHOME         =0xB2,    /* Web home */
    00156         KC_NUMPADCOMMA     =0xB3,    /* , on numeric keypad (NEC PC98) */
    00157         KC_DIVIDE          =0xB5,    /* / on numeric keypad */
    00158         KC_SYSRQ           =0xB7,
    00159         KC_RMENU           =0xB8,    /* right Alt */
    00160         KC_PAUSE           =0xC5,    /* Pause */
    00161         KC_HOME            =0xC7,    /* Home on arrow keypad */
    00162         KC_UP              =0xC8,    /* UpArrow on arrow keypad */
    00163         KC_PGUP            =0xC9,    /* PgUp on arrow keypad */
    00164         KC_LEFT            =0xCB,    /* LeftArrow on arrow keypad */
    00165         KC_RIGHT           =0xCD,    /* RightArrow on arrow keypad */
    00166         KC_END             =0xCF,    /* End on arrow keypad */
    00167         KC_DOWN            =0xD0,    /* DownArrow on arrow keypad */
    00168         KC_PGDOWN          =0xD1,    /* PgDn on arrow keypad */
    00169         KC_INSERT          =0xD2,    /* Insert on arrow keypad */
    00170         KC_DELETE          =0xD3,    /* Delete on arrow keypad */
    00171         KC_LWIN            =0xDB,    /* Left Windows key */
    00172         KC_RWIN            =0xDC,    /* Right Windows key */
    00173         KC_APPS            =0xDD,    /* AppMenu key */
    00174         KC_POWER           =0xDE,    /* System Power */
    00175         KC_SLEEP           =0xDF,    /* System Sleep */
    00176         KC_WAKE            =0xE3,    /* System Wake */
    00177         KC_WEBSEARCH       =0xE5,    /* Web Search */
    00178         KC_WEBFAVORITES    =0xE6,    /* Web Favorites */
    00179         KC_WEBREFRESH      =0xE7,    /* Web Refresh */
    00180         KC_WEBSTOP         =0xE8,    /* Web Stop */
    00181         KC_WEBFORWARD      =0xE9,    /* Web Forward */
    00182         KC_WEBBACK         =0xEA,    /* Web Back */
    00183         KC_MYCOMPUTER      =0xEB,    /* My Computer */
    00184         KC_MAIL            =0xEC,    /* Mail */
    00185         KC_MEDIASELECT     =0xED     /* Media Select */
    00186     };
    00187
    00190     struct _OgreExport MouseState
    00191     {
    00193         long Xabs, Yabs, Zabs;
    00195         long Xrel, Yrel, Zrel;
    00198         long Buttons;
    00199
    00201         inline long isButtonDown( uchar button ) const
    00202         {
    00203             return Buttons & ( 1 << button );
    00204         }
    00205     };
    00206
    00218     class _OgreExport InputReader
    00219     {
    00220     public:
    00221         InputReader();
    00222         virtual ~InputReader();
    00223
    00230         void useBufferedInput(EventQueue* pEventQueue, bool keys = true, bool mouse = true) ;
    00231
    00232         virtual void setBufferedInput(bool keys, bool mouse) ;
    00233
    00234
    00247         virtual void initialise(
    00248             RenderWindow* pWindow,
    00249             bool useKeyboard = true,
    00250             bool useMouse = true,
    00251             bool useGameController = false ) = 0;
    00252
    00262         virtual void capture() = 0;
    00263
    00268         virtual bool isKeyDown( KeyCode kc ) const;
    00269
    00272         virtual long getMouseRelativeX() const { return getMouseRelX(); }
    00273
    00276         virtual long getMouseRelativeY() const { return getMouseRelY(); }
    00277
    00280         virtual long getMouseRelativeZ() const { return getMouseRelZ(); }
    00281
    00284         virtual long getMouseRelX() const = 0;
    00285
    00288         virtual long getMouseRelY() const = 0;
    00289
    00292         virtual long getMouseRelZ() const = 0;
    00293
    00295         virtual long getMouseAbsX() const = 0;
    00297         virtual long getMouseAbsY() const = 0;
    00299         virtual long getMouseAbsZ() const = 0;
    00300
    00302         virtual void getMouseState( MouseState& state ) const = 0;
    00303
    00305         virtual bool getMouseButton( uchar button ) const = 0;
    00306
    00309         void addCursorMoveListener( MouseMotionListener* c );
    00310
    00313         void removeCursorMoveListener( MouseMotionListener* c );
    00314         static char getKeyChar(int keyCode, long modifiers = 0);
    00315
    00316
    00317     protected:
    00318
    00321         long mModifiers;
    00322
    00323 //      static KeyChars sKeyChars;
    00324         static bool sKeysInitialised;
    00331         Cursor* mCursor;
    00332
    00334         EventQueue* mEventQueue;
    00335
    00339         bool mUseBufferedKeys, mUseBufferedMouse;
    00340
    00342         MouseState mMouseState;
    00343
    00345         typedef std::set<KeyCode> BufferedKeysDownSet;
    00346         BufferedKeysDownSet mBufferedKeysDown;
    00347
    00349         void mouseMoved();
    00350
    00353         void createMouseEvent(int id, int button);
    00354
    00356         void triggerMouseButton(int nMouseCode, bool mousePressed);
    00357
    00358         void createKeyEvent(int id, int key);
    00359         void keyChanged(int key, bool down);
    00360         void setupKeyChars();
    00362         virtual bool isKeyDownImmediate( KeyCode kc ) const = 0;
    00363     };
    00364
    00365
    00373     typedef void (*DLL_CREATEINPUTREADER)(InputReader** ppReader);
    00374
    00375 }
    00376
    00377 #endif

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:30 2004