Guest User

Untitled

a guest
Mar 18th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
Add Comment
Please, Sign In to add comment