diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/keyboard.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/keyboard.h')
| -rw-r--r-- | hammer/keyboard.h | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/hammer/keyboard.h b/hammer/keyboard.h new file mode 100644 index 0000000..88b1ec8 --- /dev/null +++ b/hammer/keyboard.h @@ -0,0 +1,270 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef KEYBOARD_H +#define KEYBOARD_H +#ifdef _WIN32 +#pragma once +#endif + + +#define KEY_MOD_SHIFT 0x0001 +#define KEY_MOD_CONTROL 0x0002 +#define KEY_MOD_ALT 0x0004 + + +// +// Defines the maximum number of physical keys. These physical keys correspond to +// the windows virtual key codes shown below. Missing key codes may be up for grabs, +// but it is probably safer to add to the end of the list. +// +#define MAX_PHYSICAL_KEYS 256 + +// +// VK_LBUTTON 0x01 +// VK_RBUTTON 0x02 +// VK_CANCEL 0x03 +// VK_MBUTTON 0x04 +// ? 0x04 +// ? 0x05 +// ? 0x06 +// ? 0x07 +// VK_BACK 0x08 +// VK_TAB 0x09 +// ? 0x0A +// ? 0x0B +// VK_CLEAR 0x0C +// VK_RETURN 0x0D +// ? 0x0E +// ? 0x0F +// VK_SHIFT 0x10 +// VK_CONTROL 0x11 +// VK_MENU 0x12 +// VK_PAUSE 0x13 +// VK_CAPITAL 0x14 +// VK_KANA 0x15 +// VK_HANGUL 0x15 +// VK_JUNJA 0x17 +// VK_FINAL 0x18 +// VK_KANJI 0x19 +// ? 0x1A +// VK_ESCAPE 0x1B +// VK_CONVERT 0x1C +// VK_NONCONVERT 0x1D +// VK_ACCEPT 0x1E +// VK_MODECHANGE 0x1F +// VK_SPACE 0x20 +// VK_PRIOR 0x21 +// VK_NEXT 0x22 +// VK_END 0x23 +// VK_HOME 0x24 +// VK_LEFT 0x25 +// VK_UP 0x26 +// VK_RIGHT 0x27 +// VK_DOWN 0x28 +// VK_SELECT 0x29 +// VK_PRINT 0x2A +// VK_EXECUTE 0x2B +// VK_SNAPSHOT 0x2C +// VK_INSERT 0x2D +// VK_DELETE 0x2E +// VK_HELP 0x2F +// +// VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) +// +// VK_0 0x30 +// VK_1 0x31 +// VK_2 0x32 +// VK_3 0x33 +// VK_4 0x34 +// VK_5 0x35 +// VK_6 0x36 +// VK_7 0x37 +// VK_8 0x38 +// VK_9 0x39 +// ? 0x40 +// +// VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) +// +// VK_A 0X41 +// VK_B 0X42 +// VK_C 0X43 +// VK_D 0X44 +// VK_E 0X45 +// VK_F 0X46 +// VK_G 0X47 +// VK_H 0X48 +// VK_I 0X49 +// VK_J 0X4A +// VK_K 0X4B +// VK_L 0X4C +// VK_M 0X4D +// VK_N 0X4E +// VK_O 0X4F +// VK_P 0X50 +// VK_Q 0X51 +// VK_R 0X52 +// VK_S 0X53 +// VK_T 0X54 +// VK_U 0X55 +// VK_V 0X56 +// VK_W 0X57 +// VK_X 0X58 +// VK_Y 0X59 +// VK_Z 0X5A +// VK_LWIN 0x5B +// VK_RWIN 0x5C +// VK_APPS 0x5D +// ? 0x5E +// ? 0x5F +// VK_NUMPAD0 0x60 +// VK_NUMPAD1 0x61 +// VK_NUMPAD2 0x62 +// VK_NUMPAD3 0x63 +// VK_NUMPAD4 0x64 +// VK_NUMPAD5 0x65 +// VK_NUMPAD6 0x66 +// VK_NUMPAD7 0x67 +// VK_NUMPAD8 0x68 +// VK_NUMPAD9 0x69 +// VK_MULTIPLY 0x6A +// VK_ADD 0x6B +// VK_SEPARATOR 0x6C +// VK_SUBTRACT 0x6D +// VK_DECIMAL 0x6E +// VK_DIVIDE 0x6F +// +// Function keys +// +// VK_F1 0x70 +// VK_F2 0x71 +// VK_F3 0x72 +// VK_F4 0x73 +// VK_F5 0x74 +// VK_F6 0x75 +// VK_F7 0x76 +// VK_F8 0x77 +// VK_F9 0x78 +// VK_F10 0x79 +// VK_F11 0x7A +// VK_F12 0x7B +// VK_F13 0x7C +// VK_F14 0x7D +// VK_F15 0x7E +// VK_F16 0x7F +// VK_F17 0x80 +// VK_F18 0x81 +// VK_F19 0x82 +// VK_F20 0x83 +// VK_F21 0x84 +// VK_F22 0x85 +// VK_F23 0x86 +// VK_F24 0x87 +// ? 0x88 +// ? 0x89 +// ? 0x8A +// ? 0x8B +// ? 0x8C +// ? 0x8D +// ? 0x8E +// ? 0x8F +// VK_NUMLOCK 0x90 +// VK_SCROLL 0x91 +// ? 0x92 +// ? 0x93 +// ? 0x94 +// ? 0x95 +// ? 0x96 +// ? 0x97 +// ? 0x98 +// ? 0x99 +// ? 0x9A +// ? 0x9B +// ? 0x9C +// ? 0x9D +// ? 0x9E +// ? 0x9F +// +// VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. +// Used only as parameters to GetAsyncKeyState() and GetKeyState(). +// No other API or message will distinguish left and right keys in this way. +// +// VK_LSHIFT 0xA0 +// VK_RSHIFT 0xA1 +// VK_LCONTROL 0xA2 +// VK_RCONTROL 0xA3 +// VK_LMENU 0xA4 +// VK_RMENU 0xA5 +// VK_PROCESSKEY 0xE5 +// VK_ATTN 0xF6 +// VK_CRSEL 0xF7 +// VK_EXSEL 0xF8 +// VK_EREOF 0xF9 +// VK_PLAY 0xFA +// VK_ZOOM 0xFB +// VK_NONAME 0xFC +// VK_PA1 0xFD +// VK_OEM_CLEAR 0xFE +// + + +// +// Defines the maximum number of logical keys. Logical keys are application-specific +// values that are associated with physical keys via AddKeyMap. +// +#define MAX_LOGICAL_KEYS 256 + + +// +// Defines the maximum number of unique key bindings. +// +#define MAX_KEYMAPS 256 + + +typedef struct +{ + unsigned int uChar; + unsigned int uModifierKeys; + unsigned int uLogicalKey; +} KeyMap_t; + + +class CKeyboard +{ + public: + + CKeyboard(void); + ~CKeyboard(void); + + void AddKeyMap(unsigned int uChar, unsigned int uModifierKeys, unsigned int uLogicalKey); + void ClearImpulseFlags(void); + void ClearKeyStates(void); + float GetKeyScale(unsigned int uLogicalKey); + + void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); + void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); + + void RemoveAllKeyMaps(void); + + protected: + + bool IsKeyPressed(unsigned int uChar, unsigned int uModifierKeys); + bool IsModifierKey(unsigned int uChar); + + unsigned int GetModifierKeyBit(unsigned int uChar); + + void UpdateLogicalKeys(unsigned int uChar, bool bPressed); + + unsigned int g_uPhysicalKeyState[MAX_PHYSICAL_KEYS]; + unsigned int g_uLogicalKeyState[MAX_LOGICAL_KEYS]; + + KeyMap_t g_uKeyMap[MAX_KEYMAPS]; + unsigned int g_uKeyMaps; +}; + + +#endif // KEYBOARD_H |