ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я никогда не использовал эту библиотеку!
Я нашел это:
Any other (printable) key :
TCODK_CHAR
Поэтому, когда вы получаете TCODK_CHAR
, вы ищете char c;
в этой структуры. а>:
typedef struct {
TCOD_keycode_t vk;
char c;
unsigned pressed : 1;
unsigned lalt : 1;
unsigned lctrl : 1;
unsigned ralt : 1;
unsigned rctrl : 1;
unsigned shift : 1;
} TCOD_key_t;
Я считаю, что он будет содержать нажатый символ.
ОБНОВЛЕНИЕ
Это библиотека C, поэтому предполагаемое использование, вероятно, было примерно таким: (key
здесь относится к типу TCOD_key_t
)
switch(key.vk) {
case TCODK_UP : onUp(); break;
case TCODK_CHAR: onChar(key.c); break
default: break;
}
С картой вы можете сделать что-то вроде:
if(TCODK_CHAR == key.vk)
onChar(key.c);
else
specialCommands[key.vk]();
(где specialCommands
равно std::map<TCOD_keycode_t, std::function<...> >
)
Вы можете поместить обратные вызовы char
в карту, однако, если некоторые из членов перечисления TCOD_keycode_t
будут совпадать с кодом символа, у вас будет конфликт ключей (т.е. если гипотетически TCODK_UP
имеет значение 65
, это будет тот же ключ, что и char 'a'
( ASCII-код 65
)).
У вас также может быть другой map
или array
, который сопоставляет символы (key.c
) с различными функциями.
person
Ivan Aksamentov - Drop
schedule
15.12.2015