View difference between Paste ID: G3BgaFdw and Sanxxz4e
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
}