event.h
Engine/source/platform/input/event.h
Library-wide input events.
Classes:
Generic input event.
Handles input device plug-ins.
Public Defines
AddInputVirtualMap(description, type, code) ->addVirtualMap( #description, type, code );
INPUTMGR() <>::instance()
Returns the InputEventManager singleton.
SI_ANY() 0xff
Wildcard match used by the input system.
Public Enumerations
InputActionType { SI_MAKE = 0x01 SI_BREAK = 0x02 SI_MOVE = 0x03 SI_REPEAT = 0x04 SI_VALUE = 0x05 }
Device Event Action Types.
InputDeviceTypesEnum { UnknownDeviceType MouseDeviceType KeyboardDeviceType JoystickDeviceType GamepadDeviceType XInputDeviceType NUM_INPUT_DEVICE_TYPES INPUT_DEVICE_PLUGIN_DEVICES_START = NUM_INPUT_DEVICE_TYPES }
InputEventType { SI_UNKNOWN = 0x01 SI_BUTTON = 0x02 SI_POV = 0x03 SI_AXIS = 0x04 SI_POS = 0x05 SI_ROT = 0x06 SI_INT = 0x07 SI_FLOAT = 0x08 SI_KEY = 0x0A }
Device Event Types.
InputModifiers { SI_LSHIFT = BIT(0) SI_RSHIFT = BIT(1) SI_SHIFT = (SI_LSHIFT|SI_RSHIFT) SI_LCTRL = BIT(2) SI_RCTRL = BIT(3) SI_CTRL = (SI_LCTRL|SI_RCTRL) SI_LALT = BIT(4) SI_RALT = BIT(5) SI_ALT = (SI_LALT|SI_RALT) SI_MAC_LOPT = BIT(6) SI_MAC_ROPT = BIT(7) SI_MAC_OPT = (SI_MAC_LOPT|SI_MAC_ROPT) SI_COPYPASTE = SI_CTRL SI_MULTISELECT = SI_CTRL SI_RANGESELECT = SI_SHIFT SI_PRIMARY_ALT = SI_ALT SI_PRIMARY_CTRL = SI_CTRL SI_WORDJUMP = SI_CTRL SI_LINEJUMP = SI_ALT SI_DOCJUMP = SI_CTRL }
InputObjectInstancesEnum { KEY_NULL = 0x000 KEY_BACKSPACE = 0x001 KEY_TAB = 0x002 KEY_RETURN = 0x003 KEY_CONTROL = 0x004 KEY_ALT = 0x005 KEY_SHIFT = 0x006 KEY_PAUSE = 0x007 KEY_CAPSLOCK = 0x008 KEY_ESCAPE = 0x009 KEY_SPACE = 0x00a KEY_PAGE_DOWN = 0x00b KEY_PAGE_UP = 0x00c KEY_END = 0x00d KEY_HOME = 0x00e KEY_LEFT = 0x00f KEY_UP = 0x010 KEY_RIGHT = 0x011 KEY_DOWN = 0x012 KEY_PRINT = 0x013 KEY_INSERT = 0x014 KEY_DELETE = 0x015 KEY_HELP = 0x016 KEY_0 = 0x017 KEY_1 = 0x018 KEY_2 = 0x019 KEY_3 = 0x01a KEY_4 = 0x01b KEY_5 = 0x01c KEY_6 = 0x01d KEY_7 = 0x01e KEY_8 = 0x01f KEY_9 = 0x020 KEY_A = 0x021 KEY_B = 0x022 KEY_C = 0x023 KEY_D = 0x024 KEY_E = 0x025 KEY_F = 0x026 KEY_G = 0x027 KEY_H = 0x028 KEY_I = 0x029 KEY_J = 0x02a KEY_K = 0x02b KEY_L = 0x02c KEY_M = 0x02d KEY_N = 0x02e KEY_O = 0x02f KEY_P = 0x030 KEY_Q = 0x031 KEY_R = 0x032 KEY_S = 0x033 KEY_T = 0x034 KEY_U = 0x035 KEY_V = 0x036 KEY_W = 0x037 KEY_X = 0x038 KEY_Y = 0x039 KEY_Z = 0x03a KEY_TILDE = 0x03b KEY_MINUS = 0x03c KEY_EQUALS = 0x03d KEY_LBRACKET = 0x03e KEY_RBRACKET = 0x03f KEY_BACKSLASH = 0x040 KEY_SEMICOLON = 0x041 KEY_APOSTROPHE = 0x042 KEY_COMMA = 0x043 KEY_PERIOD = 0x044 KEY_SLASH = 0x045 KEY_NUMPAD0 = 0x046 KEY_NUMPAD1 = 0x047 KEY_NUMPAD2 = 0x048 KEY_NUMPAD3 = 0x049 KEY_NUMPAD4 = 0x04a KEY_NUMPAD5 = 0x04b KEY_NUMPAD6 = 0x04c KEY_NUMPAD7 = 0x04d KEY_NUMPAD8 = 0x04e KEY_NUMPAD9 = 0x04f KEY_MULTIPLY = 0x050 KEY_ADD = 0x051 KEY_SEPARATOR = 0x052 KEY_SUBTRACT = 0x053 KEY_DECIMAL = 0x054 KEY_DIVIDE = 0x055 KEY_NUMPADENTER = 0x056 KEY_F1 = 0x057 KEY_F2 = 0x058 KEY_F3 = 0x059 KEY_F4 = 0x05a KEY_F5 = 0x05b KEY_F6 = 0x05c KEY_F7 = 0x05d KEY_F8 = 0x05e KEY_F9 = 0x05f KEY_F10 = 0x060 KEY_F11 = 0x061 KEY_F12 = 0x062 KEY_F13 = 0x063 KEY_F14 = 0x064 KEY_F15 = 0x065 KEY_F16 = 0x066 KEY_F17 = 0x067 KEY_F18 = 0x068 KEY_F19 = 0x069 KEY_F20 = 0x06a KEY_F21 = 0x06b KEY_F22 = 0x06c KEY_F23 = 0x06d KEY_F24 = 0x06e KEY_NUMLOCK = 0x06f KEY_SCROLLLOCK = 0x070 KEY_LCONTROL = 0x071 KEY_RCONTROL = 0x072 KEY_LALT = 0x073 KEY_RALT = 0x074 KEY_LSHIFT = 0x075 KEY_RSHIFT = 0x076 KEY_WIN_LWINDOW = 0x077 KEY_WIN_RWINDOW = 0x078 KEY_WIN_APPS = 0x079 KEY_OEM_102 = 0x080 KEY_MAC_OPT = 0x090 KEY_MAC_LOPT = 0x091 KEY_MAC_ROPT = 0x092 KEY_BUTTON0 = 0x0100 KEY_BUTTON1 = 0x0101 KEY_BUTTON2 = 0x0102 KEY_BUTTON3 = 0x0103 KEY_BUTTON4 = 0x0104 KEY_BUTTON5 = 0x0105 KEY_BUTTON6 = 0x0106 KEY_BUTTON7 = 0x0107 KEY_BUTTON8 = 0x0108 KEY_BUTTON9 = 0x0109 KEY_BUTTON10 = 0x010A KEY_BUTTON11 = 0x010B KEY_BUTTON12 = 0x010C KEY_BUTTON13 = 0x010D KEY_BUTTON14 = 0x010E KEY_BUTTON15 = 0x010F KEY_BUTTON16 = 0x0110 KEY_BUTTON17 = 0x0111 KEY_BUTTON18 = 0x0112 KEY_BUTTON19 = 0x0113 KEY_BUTTON20 = 0x0114 KEY_BUTTON21 = 0x0115 KEY_BUTTON22 = 0x0116 KEY_BUTTON23 = 0x0117 KEY_BUTTON24 = 0x0118 KEY_BUTTON25 = 0x0119 KEY_BUTTON26 = 0x011A KEY_BUTTON27 = 0x011B KEY_BUTTON28 = 0x011C KEY_BUTTON29 = 0x011D KEY_BUTTON30 = 0x011E KEY_BUTTON31 = 0x011F KEY_BUTTON32 = 0x0120 KEY_BUTTON33 = 0x0121 KEY_BUTTON34 = 0x0122 KEY_BUTTON35 = 0x0123 KEY_BUTTON36 = 0x0124 KEY_BUTTON37 = 0x0125 KEY_BUTTON38 = 0x0126 KEY_BUTTON39 = 0x0127 KEY_BUTTON40 = 0x0128 KEY_BUTTON41 = 0x0129 KEY_BUTTON42 = 0x012A KEY_BUTTON43 = 0x012B KEY_BUTTON44 = 0x012C KEY_BUTTON45 = 0x012D KEY_BUTTON46 = 0x012E KEY_BUTTON47 = 0x012F KEY_ANYKEY = 0xfffe SI_XPOV = 0x204 SI_YPOV = 0x205 SI_UPOV = 0x206 SI_DPOV = 0x207 SI_LPOV = 0x208 SI_RPOV = 0x209 SI_XAXIS = 0x20B SI_YAXIS = 0x20C SI_ZAXIS = 0x20D SI_RXAXIS = 0x20E SI_RYAXIS = 0x20F SI_RZAXIS = 0x210 SI_SLIDER = 0x211 SI_XPOV2 = 0x212 SI_YPOV2 = 0x213 SI_UPOV2 = 0x214 SI_DPOV2 = 0x215 SI_LPOV2 = 0x216 SI_RPOV2 = 0x217 XI_CONNECT = 0x300 XI_THUMBLX = 0x301 XI_THUMBLY = 0x302 XI_THUMBRX = 0x303 XI_THUMBRY = 0x304 XI_LEFT_TRIGGER = 0x305 XI_RIGHT_TRIGGER = 0x306 XI_START = 0x311 XI_BACK = 0x312 XI_LEFT_THUMB = 0x313 XI_RIGHT_THUMB = 0x314 XI_LEFT_SHOULDER = 0x315 XI_RIGHT_SHOULDER = 0x316 XI_A = 0x317 XI_B = 0x318 XI_X = 0x319 XI_Y = 0x320 INPUT_DEVICE_PLUGIN_CODES_START = 0x400 }
Public Typedefs
Detailed Description
Library-wide input events.
All external events are converted into system events, which are defined in this file.
Public Defines
AddInputVirtualMap(description, type, code) ->addVirtualMap( #description, type, code );
INPUTMGR() <>::instance()
Returns the InputEventManager singleton.
SI_ANY() 0xff
Wildcard match used by the input system.
Public Enumerations
InputActionType
Enumerator
- SI_MAKE = 0x01
Button was depressed.
- SI_BREAK = 0x02
Button was released.
- SI_MOVE = 0x03
An axis moved.
- SI_REPEAT = 0x04
A key repeat occurred. Happens in between a SI_MAKE and SI_BREAK.
- SI_VALUE = 0x05
A value of some type. Matched with SI_FLOAT or SI_INT.
Device Event Action Types.
InputDeviceTypesEnum
Enumerator
- UnknownDeviceType
- MouseDeviceType
- KeyboardDeviceType
- JoystickDeviceType
- GamepadDeviceType
- XInputDeviceType
- NUM_INPUT_DEVICE_TYPES
- INPUT_DEVICE_PLUGIN_DEVICES_START = NUM_INPUT_DEVICE_TYPES
InputEventType
Enumerator
- SI_UNKNOWN = 0x01
- SI_BUTTON = 0x02
- SI_POV = 0x03
- SI_AXIS = 0x04
- SI_POS = 0x05
- SI_ROT = 0x06
- SI_INT = 0x07
- SI_FLOAT = 0x08
- SI_KEY = 0x0A
Device Event Types.
InputModifiers
Enumerator
- SI_LSHIFT = BIT(0)
shift and ctrl are the same between platforms.
- SI_RSHIFT = BIT(1)
- SI_SHIFT = (SI_LSHIFT|SI_RSHIFT)
- SI_LCTRL = BIT(2)
- SI_RCTRL = BIT(3)
- SI_CTRL = (SI_LCTRL|SI_RCTRL)
- SI_LALT = BIT(4)
win altkey, mapped to mac cmdkey.
- SI_RALT = BIT(5)
- SI_ALT = (SI_LALT|SI_RALT)
- SI_MAC_LOPT = BIT(6)
mac optionkey
- SI_MAC_ROPT = BIT(7)
- SI_MAC_OPT = (SI_MAC_LOPT|SI_MAC_ROPT)
- SI_COPYPASTE = SI_CTRL
modifier keys used for common operations
- SI_MULTISELECT = SI_CTRL
- SI_RANGESELECT = SI_SHIFT
- SI_PRIMARY_ALT = SI_ALT
- SI_PRIMARY_CTRL = SI_CTRL
- SI_WORDJUMP = SI_CTRL
modfier key used in conjunction w/ arrow keys to move cursor to next word
- SI_LINEJUMP = SI_ALT
modifier key used in conjunction w/ arrow keys to move cursor to beginning / end of line
- SI_DOCJUMP = SI_CTRL
modifier key used in conjunction w/ home & end to jump to the top or bottom of a document
InputObjectInstancesEnum
Enumerator
- KEY_NULL = 0x000
Invalid KeyCode.
- KEY_BACKSPACE = 0x001
- KEY_TAB = 0x002
- KEY_RETURN = 0x003
- KEY_CONTROL = 0x004
- KEY_ALT = 0x005
- KEY_SHIFT = 0x006
- KEY_PAUSE = 0x007
- KEY_CAPSLOCK = 0x008
- KEY_ESCAPE = 0x009
- KEY_SPACE = 0x00a
- KEY_PAGE_DOWN = 0x00b
- KEY_PAGE_UP = 0x00c
- KEY_END = 0x00d
- KEY_HOME = 0x00e
- KEY_LEFT = 0x00f
- KEY_UP = 0x010
- KEY_RIGHT = 0x011
- KEY_DOWN = 0x012
- KEY_PRINT = 0x013
- KEY_INSERT = 0x014
- KEY_DELETE = 0x015
- KEY_HELP = 0x016
- KEY_0 = 0x017
- KEY_1 = 0x018
- KEY_2 = 0x019
- KEY_3 = 0x01a
- KEY_4 = 0x01b
- KEY_5 = 0x01c
- KEY_6 = 0x01d
- KEY_7 = 0x01e
- KEY_8 = 0x01f
- KEY_9 = 0x020
- KEY_A = 0x021
- KEY_B = 0x022
- KEY_C = 0x023
- KEY_D = 0x024
- KEY_E = 0x025
- KEY_F = 0x026
- KEY_G = 0x027
- KEY_H = 0x028
- KEY_I = 0x029
- KEY_J = 0x02a
- KEY_K = 0x02b
- KEY_L = 0x02c
- KEY_M = 0x02d
- KEY_N = 0x02e
- KEY_O = 0x02f
- KEY_P = 0x030
- KEY_Q = 0x031
- KEY_R = 0x032
- KEY_S = 0x033
- KEY_T = 0x034
- KEY_U = 0x035
- KEY_V = 0x036
- KEY_W = 0x037
- KEY_X = 0x038
- KEY_Y = 0x039
- KEY_Z = 0x03a
- KEY_TILDE = 0x03b
- KEY_MINUS = 0x03c
- KEY_EQUALS = 0x03d
- KEY_LBRACKET = 0x03e
- KEY_RBRACKET = 0x03f
- KEY_BACKSLASH = 0x040
- KEY_SEMICOLON = 0x041
- KEY_APOSTROPHE = 0x042
- KEY_COMMA = 0x043
- KEY_PERIOD = 0x044
- KEY_SLASH = 0x045
- KEY_NUMPAD0 = 0x046
- KEY_NUMPAD1 = 0x047
- KEY_NUMPAD2 = 0x048
- KEY_NUMPAD3 = 0x049
- KEY_NUMPAD4 = 0x04a
- KEY_NUMPAD5 = 0x04b
- KEY_NUMPAD6 = 0x04c
- KEY_NUMPAD7 = 0x04d
- KEY_NUMPAD8 = 0x04e
- KEY_NUMPAD9 = 0x04f
- KEY_MULTIPLY = 0x050
- KEY_ADD = 0x051
- KEY_SEPARATOR = 0x052
- KEY_SUBTRACT = 0x053
- KEY_DECIMAL = 0x054
- KEY_DIVIDE = 0x055
- KEY_NUMPADENTER = 0x056
- KEY_F1 = 0x057
- KEY_F2 = 0x058
- KEY_F3 = 0x059
- KEY_F4 = 0x05a
- KEY_F5 = 0x05b
- KEY_F6 = 0x05c
- KEY_F7 = 0x05d
- KEY_F8 = 0x05e
- KEY_F9 = 0x05f
- KEY_F10 = 0x060
- KEY_F11 = 0x061
- KEY_F12 = 0x062
- KEY_F13 = 0x063
- KEY_F14 = 0x064
- KEY_F15 = 0x065
- KEY_F16 = 0x066
- KEY_F17 = 0x067
- KEY_F18 = 0x068
- KEY_F19 = 0x069
- KEY_F20 = 0x06a
- KEY_F21 = 0x06b
- KEY_F22 = 0x06c
- KEY_F23 = 0x06d
- KEY_F24 = 0x06e
- KEY_NUMLOCK = 0x06f
- KEY_SCROLLLOCK = 0x070
- KEY_LCONTROL = 0x071
- KEY_RCONTROL = 0x072
- KEY_LALT = 0x073
- KEY_RALT = 0x074
- KEY_LSHIFT = 0x075
- KEY_RSHIFT = 0x076
- KEY_WIN_LWINDOW = 0x077
- KEY_WIN_RWINDOW = 0x078
- KEY_WIN_APPS = 0x079
- KEY_OEM_102 = 0x080
- KEY_MAC_OPT = 0x090
- KEY_MAC_LOPT = 0x091
- KEY_MAC_ROPT = 0x092
- KEY_BUTTON0 = 0x0100
- KEY_BUTTON1 = 0x0101
- KEY_BUTTON2 = 0x0102
- KEY_BUTTON3 = 0x0103
- KEY_BUTTON4 = 0x0104
- KEY_BUTTON5 = 0x0105
- KEY_BUTTON6 = 0x0106
- KEY_BUTTON7 = 0x0107
- KEY_BUTTON8 = 0x0108
- KEY_BUTTON9 = 0x0109
- KEY_BUTTON10 = 0x010A
- KEY_BUTTON11 = 0x010B
- KEY_BUTTON12 = 0x010C
- KEY_BUTTON13 = 0x010D
- KEY_BUTTON14 = 0x010E
- KEY_BUTTON15 = 0x010F
- KEY_BUTTON16 = 0x0110
- KEY_BUTTON17 = 0x0111
- KEY_BUTTON18 = 0x0112
- KEY_BUTTON19 = 0x0113
- KEY_BUTTON20 = 0x0114
- KEY_BUTTON21 = 0x0115
- KEY_BUTTON22 = 0x0116
- KEY_BUTTON23 = 0x0117
- KEY_BUTTON24 = 0x0118
- KEY_BUTTON25 = 0x0119
- KEY_BUTTON26 = 0x011A
- KEY_BUTTON27 = 0x011B
- KEY_BUTTON28 = 0x011C
- KEY_BUTTON29 = 0x011D
- KEY_BUTTON30 = 0x011E
- KEY_BUTTON31 = 0x011F
- KEY_BUTTON32 = 0x0120
- KEY_BUTTON33 = 0x0121
- KEY_BUTTON34 = 0x0122
- KEY_BUTTON35 = 0x0123
- KEY_BUTTON36 = 0x0124
- KEY_BUTTON37 = 0x0125
- KEY_BUTTON38 = 0x0126
- KEY_BUTTON39 = 0x0127
- KEY_BUTTON40 = 0x0128
- KEY_BUTTON41 = 0x0129
- KEY_BUTTON42 = 0x012A
- KEY_BUTTON43 = 0x012B
- KEY_BUTTON44 = 0x012C
- KEY_BUTTON45 = 0x012D
- KEY_BUTTON46 = 0x012E
- KEY_BUTTON47 = 0x012F
- KEY_ANYKEY = 0xfffe
- SI_XPOV = 0x204
Joystick event codes.
- SI_YPOV = 0x205
- SI_UPOV = 0x206
- SI_DPOV = 0x207
- SI_LPOV = 0x208
- SI_RPOV = 0x209
- SI_XAXIS = 0x20B
- SI_YAXIS = 0x20C
- SI_ZAXIS = 0x20D
- SI_RXAXIS = 0x20E
- SI_RYAXIS = 0x20F
- SI_RZAXIS = 0x210
- SI_SLIDER = 0x211
- SI_XPOV2 = 0x212
- SI_YPOV2 = 0x213
- SI_UPOV2 = 0x214
- SI_DPOV2 = 0x215
- SI_LPOV2 = 0x216
- SI_RPOV2 = 0x217
- XI_CONNECT = 0x300
- XI_THUMBLX = 0x301
- XI_THUMBLY = 0x302
- XI_THUMBRX = 0x303
- XI_THUMBRY = 0x304
- XI_LEFT_TRIGGER = 0x305
- XI_RIGHT_TRIGGER = 0x306
- XI_START = 0x311
- XI_BACK = 0x312
- XI_LEFT_THUMB = 0x313
- XI_RIGHT_THUMB = 0x314
- XI_LEFT_SHOULDER = 0x315
- XI_RIGHT_SHOULDER = 0x316
- XI_A = 0x317
- XI_B = 0x318
- XI_X = 0x319
- XI_Y = 0x320
- INPUT_DEVICE_PLUGIN_CODES_START = 0x400
Public Typedefs
typedef U32 InputDeviceTypes
Input device types.
typedef U32 InputObjectInstances
Input event constants:
1 2//----------------------------------------------------------------------------- 3// Copyright (c) 2012 GarageGames, LLC 4// 5// Permission is hereby granted, free of charge, to any person obtaining a copy 6// of this software and associated documentation files (the "Software"), to 7// deal in the Software without restriction, including without limitation the 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9// sell copies of the Software, and to permit persons to whom the Software is 10// furnished to do so, subject to the following conditions: 11// 12// The above copyright notice and this permission notice shall be included in 13// all copies or substantial portions of the Software. 14// 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21// IN THE SOFTWARE. 22//----------------------------------------------------------------------------- 23/// @file 24/// Library-wide input events 25/// 26/// All external events are converted into system events, which are defined 27/// in this file. 28 29/// 30#ifndef _EVENT_H_ 31#define _EVENT_H_ 32 33#include "platform/types.h" 34#include "platform/input/IInputDevice.h" 35#include "core/util/journal/journaledSignal.h" 36#include "core/util/tSingleton.h" 37#include "core/util/tDictionary.h" 38#include "core/tSimpleHashTable.h" 39 40#define AddInputVirtualMap( description, type, code ) \ 41 INPUTMGR->addVirtualMap( #description, type, code ); 42 43/// @defgroup input_constants Input system constants 44/// @{ 45 46/// Input event constants: 47typedef U32 InputObjectInstances; 48enum InputObjectInstancesEnum 49{ 50 KEY_NULL = 0x000, ///< Invalid KeyCode 51 KEY_BACKSPACE = 0x001, 52 KEY_TAB = 0x002, 53 KEY_RETURN = 0x003, 54 KEY_CONTROL = 0x004, 55 KEY_ALT = 0x005, 56 KEY_SHIFT = 0x006, 57 KEY_PAUSE = 0x007, 58 KEY_CAPSLOCK = 0x008, 59 KEY_ESCAPE = 0x009, 60 KEY_SPACE = 0x00a, 61 KEY_PAGE_DOWN = 0x00b, 62 KEY_PAGE_UP = 0x00c, 63 KEY_END = 0x00d, 64 KEY_HOME = 0x00e, 65 KEY_LEFT = 0x00f, 66 KEY_UP = 0x010, 67 KEY_RIGHT = 0x011, 68 KEY_DOWN = 0x012, 69 KEY_PRINT = 0x013, 70 KEY_INSERT = 0x014, 71 KEY_DELETE = 0x015, 72 KEY_HELP = 0x016, 73 74 KEY_0 = 0x017, 75 KEY_1 = 0x018, 76 KEY_2 = 0x019, 77 KEY_3 = 0x01a, 78 KEY_4 = 0x01b, 79 KEY_5 = 0x01c, 80 KEY_6 = 0x01d, 81 KEY_7 = 0x01e, 82 KEY_8 = 0x01f, 83 KEY_9 = 0x020, 84 85 KEY_A = 0x021, 86 KEY_B = 0x022, 87 KEY_C = 0x023, 88 KEY_D = 0x024, 89 KEY_E = 0x025, 90 KEY_F = 0x026, 91 KEY_G = 0x027, 92 KEY_H = 0x028, 93 KEY_I = 0x029, 94 KEY_J = 0x02a, 95 KEY_K = 0x02b, 96 KEY_L = 0x02c, 97 KEY_M = 0x02d, 98 KEY_N = 0x02e, 99 KEY_O = 0x02f, 100 KEY_P = 0x030, 101 KEY_Q = 0x031, 102 KEY_R = 0x032, 103 KEY_S = 0x033, 104 KEY_T = 0x034, 105 KEY_U = 0x035, 106 KEY_V = 0x036, 107 KEY_W = 0x037, 108 KEY_X = 0x038, 109 KEY_Y = 0x039, 110 KEY_Z = 0x03a, 111 112 KEY_TILDE = 0x03b, 113 KEY_MINUS = 0x03c, 114 KEY_EQUALS = 0x03d, 115 KEY_LBRACKET = 0x03e, 116 KEY_RBRACKET = 0x03f, 117 KEY_BACKSLASH = 0x040, 118 KEY_SEMICOLON = 0x041, 119 KEY_APOSTROPHE = 0x042, 120 KEY_COMMA = 0x043, 121 KEY_PERIOD = 0x044, 122 KEY_SLASH = 0x045, 123 KEY_NUMPAD0 = 0x046, 124 KEY_NUMPAD1 = 0x047, 125 KEY_NUMPAD2 = 0x048, 126 KEY_NUMPAD3 = 0x049, 127 KEY_NUMPAD4 = 0x04a, 128 KEY_NUMPAD5 = 0x04b, 129 KEY_NUMPAD6 = 0x04c, 130 KEY_NUMPAD7 = 0x04d, 131 KEY_NUMPAD8 = 0x04e, 132 KEY_NUMPAD9 = 0x04f, 133 KEY_MULTIPLY = 0x050, 134 KEY_ADD = 0x051, 135 KEY_SEPARATOR = 0x052, 136 KEY_SUBTRACT = 0x053, 137 KEY_DECIMAL = 0x054, 138 KEY_DIVIDE = 0x055, 139 KEY_NUMPADENTER = 0x056, 140 141 KEY_F1 = 0x057, 142 KEY_F2 = 0x058, 143 KEY_F3 = 0x059, 144 KEY_F4 = 0x05a, 145 KEY_F5 = 0x05b, 146 KEY_F6 = 0x05c, 147 KEY_F7 = 0x05d, 148 KEY_F8 = 0x05e, 149 KEY_F9 = 0x05f, 150 KEY_F10 = 0x060, 151 KEY_F11 = 0x061, 152 KEY_F12 = 0x062, 153 KEY_F13 = 0x063, 154 KEY_F14 = 0x064, 155 KEY_F15 = 0x065, 156 KEY_F16 = 0x066, 157 KEY_F17 = 0x067, 158 KEY_F18 = 0x068, 159 KEY_F19 = 0x069, 160 KEY_F20 = 0x06a, 161 KEY_F21 = 0x06b, 162 KEY_F22 = 0x06c, 163 KEY_F23 = 0x06d, 164 KEY_F24 = 0x06e, 165 166 KEY_NUMLOCK = 0x06f, 167 KEY_SCROLLLOCK = 0x070, 168 KEY_LCONTROL = 0x071, 169 KEY_RCONTROL = 0x072, 170 KEY_LALT = 0x073, 171 KEY_RALT = 0x074, 172 KEY_LSHIFT = 0x075, 173 KEY_RSHIFT = 0x076, 174 KEY_WIN_LWINDOW = 0x077, 175 KEY_WIN_RWINDOW = 0x078, 176 KEY_WIN_APPS = 0x079, 177 KEY_OEM_102 = 0x080, 178 179 KEY_MAC_OPT = 0x090, 180 KEY_MAC_LOPT = 0x091, 181 KEY_MAC_ROPT = 0x092, 182 183 KEY_BUTTON0 = 0x0100, 184 KEY_BUTTON1 = 0x0101, 185 KEY_BUTTON2 = 0x0102, 186 KEY_BUTTON3 = 0x0103, 187 KEY_BUTTON4 = 0x0104, 188 KEY_BUTTON5 = 0x0105, 189 KEY_BUTTON6 = 0x0106, 190 KEY_BUTTON7 = 0x0107, 191 KEY_BUTTON8 = 0x0108, 192 KEY_BUTTON9 = 0x0109, 193 KEY_BUTTON10 = 0x010A, 194 KEY_BUTTON11 = 0x010B, 195 KEY_BUTTON12 = 0x010C, 196 KEY_BUTTON13 = 0x010D, 197 KEY_BUTTON14 = 0x010E, 198 KEY_BUTTON15 = 0x010F, 199 KEY_BUTTON16 = 0x0110, 200 KEY_BUTTON17 = 0x0111, 201 KEY_BUTTON18 = 0x0112, 202 KEY_BUTTON19 = 0x0113, 203 KEY_BUTTON20 = 0x0114, 204 KEY_BUTTON21 = 0x0115, 205 KEY_BUTTON22 = 0x0116, 206 KEY_BUTTON23 = 0x0117, 207 KEY_BUTTON24 = 0x0118, 208 KEY_BUTTON25 = 0x0119, 209 KEY_BUTTON26 = 0x011A, 210 KEY_BUTTON27 = 0x011B, 211 KEY_BUTTON28 = 0x011C, 212 KEY_BUTTON29 = 0x011D, 213 KEY_BUTTON30 = 0x011E, 214 KEY_BUTTON31 = 0x011F, 215 KEY_BUTTON32 = 0x0120, 216 KEY_BUTTON33 = 0x0121, 217 KEY_BUTTON34 = 0x0122, 218 KEY_BUTTON35 = 0x0123, 219 KEY_BUTTON36 = 0x0124, 220 KEY_BUTTON37 = 0x0125, 221 KEY_BUTTON38 = 0x0126, 222 KEY_BUTTON39 = 0x0127, 223 KEY_BUTTON40 = 0x0128, 224 KEY_BUTTON41 = 0x0129, 225 KEY_BUTTON42 = 0x012A, 226 KEY_BUTTON43 = 0x012B, 227 KEY_BUTTON44 = 0x012C, 228 KEY_BUTTON45 = 0x012D, 229 KEY_BUTTON46 = 0x012E, 230 KEY_BUTTON47 = 0x012F, 231 KEY_ANYKEY = 0xfffe, 232 233 /// Joystick event codes. 234 SI_XPOV = 0x204, 235 SI_YPOV = 0x205, 236 SI_UPOV = 0x206, 237 SI_DPOV = 0x207, 238 SI_LPOV = 0x208, 239 SI_RPOV = 0x209, 240 SI_XAXIS = 0x20B, 241 SI_YAXIS = 0x20C, 242 SI_ZAXIS = 0x20D, 243 SI_RXAXIS = 0x20E, 244 SI_RYAXIS = 0x20F, 245 SI_RZAXIS = 0x210, 246 SI_SLIDER = 0x211, 247 SI_XPOV2 = 0x212, 248 SI_YPOV2 = 0x213, 249 SI_UPOV2 = 0x214, 250 SI_DPOV2 = 0x215, 251 SI_LPOV2 = 0x216, 252 SI_RPOV2 = 0x217, 253 254 XI_CONNECT = 0x300, 255 XI_THUMBLX = 0x301, 256 XI_THUMBLY = 0x302, 257 XI_THUMBRX = 0x303, 258 XI_THUMBRY = 0x304, 259 XI_LEFT_TRIGGER = 0x305, 260 XI_RIGHT_TRIGGER = 0x306, 261 262 /*XI_DPAD_UP = 0x307, 263 XI_DPAD_DOWN = 0x308, 264 XI_DPAD_LEFT = 0x309, 265 XI_DPAD_RIGHT = 0x310,*/ 266 267 XI_START = 0x311, 268 XI_BACK = 0x312, 269 XI_LEFT_THUMB = 0x313, 270 XI_RIGHT_THUMB = 0x314, 271 XI_LEFT_SHOULDER = 0x315, 272 XI_RIGHT_SHOULDER = 0x316, 273 274 XI_A = 0x317, 275 XI_B = 0x318, 276 XI_X = 0x319, 277 XI_Y = 0x320, 278 279 INPUT_DEVICE_PLUGIN_CODES_START = 0x400, 280}; 281 282/// Input device types 283typedef U32 InputDeviceTypes; 284enum InputDeviceTypesEnum 285{ 286 UnknownDeviceType, 287 MouseDeviceType, 288 KeyboardDeviceType, 289 JoystickDeviceType, 290 GamepadDeviceType, 291 XInputDeviceType, 292 293 NUM_INPUT_DEVICE_TYPES, 294 295 INPUT_DEVICE_PLUGIN_DEVICES_START = NUM_INPUT_DEVICE_TYPES, 296}; 297 298/// Device Event Action Types 299enum InputActionType 300{ 301 /// Button was depressed. 302 SI_MAKE = 0x01, 303 304 /// Button was released. 305 SI_BREAK = 0x02, 306 307 /// An axis moved. 308 SI_MOVE = 0x03, 309 310 /// A key repeat occurred. Happens in between a SI_MAKE and SI_BREAK. 311 SI_REPEAT = 0x04, 312 313 /// A value of some type. Matched with SI_FLOAT or SI_INT. 314 SI_VALUE = 0x05, 315}; 316 317///Device Event Types 318enum InputEventType 319{ 320 SI_UNKNOWN = 0x01, 321 SI_BUTTON = 0x02, // Button press/release 322 SI_POV = 0x03, // Point of View hat 323 SI_AXIS = 0x04, // Axis in range -1.0..1.0 324 SI_POS = 0x05, // Absolute position value (Point3F) 325 SI_ROT = 0x06, // Absolute rotation value (QuatF) 326 SI_INT = 0x07, // Integer value (S32) 327 SI_FLOAT = 0x08, // Float value (F32) 328 SI_KEY = 0x0A, // Keyboard key 329}; 330 331/// Wildcard match used by the input system. 332#define SI_ANY 0xff 333 334// Modifier Keys 335enum InputModifiers 336{ 337 /// shift and ctrl are the same between platforms. 338 SI_LSHIFT = BIT(0), 339 SI_RSHIFT = BIT(1), 340 SI_SHIFT = (SI_LSHIFT</a>|<a href="/coding/group/group__input__constants/#group__input__constants_1ggae87906764558c3f3650510499da72fafa46eee670cbeffa606fa12ed0825b4afb">SI_RSHIFT), 341 SI_LCTRL = BIT(2), 342 SI_RCTRL = BIT(3), 343 SI_CTRL = (SI_LCTRL</a>|<a href="/coding/group/group__input__constants/#group__input__constants_1ggae87906764558c3f3650510499da72fafa85fe9c7e58c341530a1828aeb7e628f8">SI_RCTRL), 344 345 /// win altkey, mapped to mac cmdkey. 346 SI_LALT = BIT(4), 347 SI_RALT = BIT(5), 348 SI_ALT = (SI_LALT</a>|<a href="/coding/group/group__input__constants/#group__input__constants_1ggae87906764558c3f3650510499da72fafa7458aeb51ed4957ae5e71a50a309e9f3">SI_RALT), 349 350 /// mac optionkey 351 SI_MAC_LOPT = BIT(6), 352 SI_MAC_ROPT = BIT(7), 353 SI_MAC_OPT = (SI_MAC_LOPT</a>|<a href="/coding/group/group__input__constants/#group__input__constants_1ggae87906764558c3f3650510499da72fafa4453d88f4745ad634672f6b785f60073">SI_MAC_ROPT), 354 355 /// modifier keys used for common operations 356#if defined(TORQUE_OS_MAC) 357 SI_COPYPASTE = SI_ALT, 358 SI_MULTISELECT = SI_ALT, 359 SI_RANGESELECT = SI_SHIFT, 360 SI_PRIMARY_ALT = SI_MAC_OPT, ///< Primary key used for toggling into alternates of commands. 361 SI_PRIMARY_CTRL = SI_ALT, ///< Primary key used for triggering commands. 362#else 363 SI_COPYPASTE = SI_CTRL, 364 SI_MULTISELECT = SI_CTRL, 365 SI_RANGESELECT = SI_SHIFT, 366 SI_PRIMARY_ALT = SI_ALT, 367 SI_PRIMARY_CTRL = SI_CTRL, 368#endif 369 /// modfier key used in conjunction w/ arrow keys to move cursor to next word 370#if defined(TORQUE_OS_MAC) 371 SI_WORDJUMP = SI_MAC_OPT, 372#else 373 SI_WORDJUMP = SI_CTRL, 374#endif 375 /// modifier key used in conjunction w/ arrow keys to move cursor to beginning / end of line 376 SI_LINEJUMP = SI_ALT, 377 378 /// modifier key used in conjunction w/ home & end to jump to the top or bottom of a document 379#if defined(TORQUE_OS_MAC) 380 SI_DOCJUMP = SI_ANY, 381#else 382 SI_DOCJUMP = SI_CTRL, 383#endif 384}; 385 386/// @} 387 388 389/// Generic input event. 390struct InputEventInfo 391{ 392 InputEventInfo() 393 { 394 deviceInst = 0; 395 fValue = 0.f; 396 fValue2 = 0.f; 397 fValue3 = 0.f; 398 fValue4 = 0.f; 399 iValue = 0; 400 deviceType = (InputDeviceTypes)0; 401 objType = (InputEventType)0; 402 ascii = 0; 403 objInst = (InputObjectInstances)0; 404 action = (InputActionType)0; 405 modifier = (InputModifiers)0; 406 } 407 408 /// Device instance: joystick0, joystick1, etc 409 U32 deviceInst; 410 411 /// Value typically ranges from -1.0 to 1.0, but doesn't have to. 412 /// It depends on the context. 413 F32 fValue; 414 415 /// Extended float values (often used for absolute rotation Quat) 416 F32 fValue2; 417 F32 fValue3; 418 F32 fValue4; 419 420 /// Signed integer value 421 S32 iValue; 422 423 /// What was the action? (MAKE/BREAK/MOVE) 424 InputActionType action; 425 InputDeviceTypes deviceType; 426 InputEventType objType; 427 InputObjectInstances objInst; 428 429 /// ASCII character code if this is a keyboard event. 430 U16 ascii; 431 432 /// Modifiers to action: SI_LSHIFT, SI_LCTRL, etc. 433 InputModifiers modifier; 434 435 inline void postToSignal(InputEvent &ie) 436 { 437 ie.trigger(deviceInst, fValue, fValue2, fValue3, fValue4, iValue, deviceType, objType, ascii, objInst, action, modifier); 438 } 439}; 440 441class Point3F; 442class QuatF; 443 444/// Handles input device plug-ins 445class InputEventManager 446{ 447public: 448 struct VirtualMapData 449 { 450 StringTableEntry desc; 451 InputEventType type; 452 InputObjectInstances code; 453 }; 454 455public: 456 InputEventManager(); 457 virtual ~InputEventManager(); 458 459 /// Get the next device type code 460 U32 getNextDeviceType(); 461 462 /// Get the next device action code 463 U32 getNextDeviceCode(); 464 465 void registerDevice(IInputDevice* device); 466 void unregisterDevice(IInputDevice* device); 467 468 /// Check if the given device name is a registered device. 469 /// The given name can optionally include an instance number on the end. 470 bool isRegisteredDevice(const char* name); 471 472 /// Check if the given device type is a registered device. 473 bool isRegisteredDevice(U32 type); 474 475 /// Same as above but also provides the found device type and actual 476 // device name length. Used by ActionMap::getDeviceTypeAndInstance() 477 bool isRegisteredDeviceWithAttributes(const char* name, U32& deviceType, U32&nameLen); 478 479 /// Returns the name of a registered device given its type 480 const char* getRegisteredDeviceName(U32 type); 481 482 void start(); 483 void stop(); 484 485 void process(); 486 487 // Add to the virtual map table 488 void addVirtualMap(const char* description, InputEventType type, InputObjectInstances code); 489 490 // Find a virtual map entry based on the text description 491 VirtualMapData* findVirtualMap(const char* description); 492 493 // Find a virtual map entry's description based on the action code 494 const char* findVirtualMapDescFromCode(U32 code); 495 496 /// Build an input event based on a single iValue 497 void buildInputEvent(U32 deviceType, U32 deviceInst, InputEventType objType, InputObjectInstances objInst, InputActionType action, S32 iValue); 498 499 /// Build an input event based on a single fValue 500 void buildInputEvent(U32 deviceType, U32 deviceInst, InputEventType objType, InputObjectInstances objInst, InputActionType action, F32 fValue); 501 502 /// Build an input event based on a Point3F 503 void buildInputEvent(U32 deviceType, U32 deviceInst, InputEventType objType, InputObjectInstances objInst, InputActionType action, Point3F& pValue); 504 505 /// Build an input event based on a QuatF 506 void buildInputEvent(U32 deviceType, U32 deviceInst, InputEventType objType, InputObjectInstances objInst, InputActionType action, QuatF& qValue); 507 508 /// Build an input event based on a AngAxisF 509 void buildInputEvent(U32 deviceType, U32 deviceInst, InputEventType objType, InputObjectInstances objInst, InputActionType action, AngAxisF& qValue); 510 511protected: 512 U32 mNextDeviceTypeCode; 513 U32 mNextDeviceCode; 514 515 Vector<IInputDevice*> mDeviceList; 516 517 // Holds description to VirtualMapData struct 518 SimpleHashTable<VirtualMapData> mVirtualMap; 519 520 // Used to look up a description based on a VirtualMapData.code 521 HashTable<U32, VirtualMapData> mActionCodeMap; 522 523protected: 524 void buildVirtualMap(); 525 526public: 527 // For ManagedSingleton. 528 static const char* getSingletonName() { return "InputEventManager"; } 529}; 530 531/// Returns the InputEventManager singleton. 532#define INPUTMGR ManagedSingleton<InputEventManager>::instance() 533 534 535#endif 536
