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 | } |