SHOW:
|
|
- or go back to the newest paste.
1 | sf::Keyboard::Key RelativeKey(sf::Keyboard::Key key) { | |
2 | UINT sc; | |
3 | ||
4 | // http://www.georgehernandez.com/h/xComputers/CharacterSets/Media/USKeyboard_ScanCodes.gif | |
5 | switch(key) { | |
6 | case sf::Keyboard::Q: sc = 0x10; break; | |
7 | case sf::Keyboard::W: sc = 0x11; break; | |
8 | case sf::Keyboard::E: sc = 0x12; break; | |
9 | case sf::Keyboard::A: sc = 0x1e; break; | |
10 | case sf::Keyboard::S: sc = 0x1f; break; | |
11 | case sf::Keyboard::D: sc = 0x20; break; | |
12 | default: return key; | |
13 | } | |
14 | ||
15 | auto vk = MapVirtualKey(sc, MAPVK_VSC_TO_VK); | |
16 | ||
17 | if(vk >= 'A' && vk <= 'Z') | |
18 | return (sf::Keyboard::Key)(vk - 'A' + sf::Keyboard::A) ; | |
19 | ||
20 | if(vk >= '0' && vk <= '9') | |
21 | return (sf::Keyboard::Key)(vk - '0' + sf::Keyboard::Num0); | |
22 | ||
23 | // http://msdn.microsoft.com/en-gb/library/windows/desktop/dd375731(v=vs.85).aspx | |
24 | switch(vk) { | |
25 | case VK_OEM_COMMA: return sf::Keyboard::Comma; | |
26 | case VK_OEM_7: return sf::Keyboard::Quote; | |
27 | case VK_OEM_PERIOD: return sf::Keyboard::Period; | |
28 | default: | |
29 | cerr << "Unhandled vkey: " << vk << "\n"; | |
30 | return key; | |
31 | } | |
32 | } |