Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sf::Keyboard::Key RelativeKey(sf::Keyboard::Key key) {
- UINT sc;
- // http://www.georgehernandez.com/h/xComputers/CharacterSets/Media/USKeyboard_ScanCodes.gif
- switch(key) {
- case sf::Keyboard::Q: sc = 0x10; break;
- case sf::Keyboard::W: sc = 0x11; break;
- case sf::Keyboard::E: sc = 0x12; break;
- case sf::Keyboard::A: sc = 0x1e; break;
- case sf::Keyboard::S: sc = 0x1f; break;
- case sf::Keyboard::D: sc = 0x20; break;
- default: return key;
- }
- auto vk = MapVirtualKey(sc, MAPVK_VSC_TO_VK);
- if(vk >= 'A' && vk <= 'Z')
- return (sf::Keyboard::Key)(vk - 'A' + sf::Keyboard::A) ;
- if(vk >= '0' && vk <= '9')
- return (sf::Keyboard::Key)(vk - '0' + sf::Keyboard::Num0);
- // http://msdn.microsoft.com/en-gb/library/windows/desktop/dd375731(v=vs.85).aspx
- switch(vk) {
- case VK_OEM_COMMA: return sf::Keyboard::Comma;
- case VK_OEM_7: return sf::Keyboard::Quote;
- case VK_OEM_PERIOD: return sf::Keyboard::Period;
- default:
- cerr << "Unhandled vkey: " << vk << "\n";
- return key;
- }
- }
Add Comment
Please, Sign In to add comment