* Update IN_IsConsoleKey so that specifying ascii values/characters for the
console key always results in the character being used as opposed to the key
This commit is contained in:
parent
a0ba5b4e38
commit
56972c5c69
1 changed files with 52 additions and 10 deletions
|
@ -120,9 +120,24 @@ static void IN_PrintKey( const SDL_keysym *keysym, keyNum_t key, qboolean down )
|
||||||
IN_IsConsoleKey
|
IN_IsConsoleKey
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
static qboolean IN_IsConsoleKey( keyNum_t key, const char *buf )
|
static qboolean IN_IsConsoleKey( keyNum_t key, const char character )
|
||||||
{
|
{
|
||||||
static int consoleKeys[ MAX_CONSOLE_KEYS ];
|
typedef struct consoleKey_s
|
||||||
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
KEY,
|
||||||
|
CHARACTER
|
||||||
|
} type;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
keyNum_t key;
|
||||||
|
char character;
|
||||||
|
} u;
|
||||||
|
} consoleKey_t;
|
||||||
|
|
||||||
|
static consoleKey_t consoleKeys[ MAX_CONSOLE_KEYS ];
|
||||||
static int numConsoleKeys = 0;
|
static int numConsoleKeys = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -137,26 +152,53 @@ static qboolean IN_IsConsoleKey( keyNum_t key, const char *buf )
|
||||||
|
|
||||||
while( numConsoleKeys < MAX_CONSOLE_KEYS )
|
while( numConsoleKeys < MAX_CONSOLE_KEYS )
|
||||||
{
|
{
|
||||||
|
consoleKey_t *c = &consoleKeys[ numConsoleKeys ];
|
||||||
|
char *keyName;
|
||||||
|
|
||||||
token = COM_Parse( &text_p );
|
token = COM_Parse( &text_p );
|
||||||
if( !token[ 0 ] )
|
if( !token[ 0 ] )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
consoleKeys[ numConsoleKeys++ ] =
|
c->u.key = Key_StringToKeynum( token );
|
||||||
Key_StringToKeynum( token );
|
|
||||||
|
// 0 isn't a key
|
||||||
|
if( c->u.key == 0 )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
keyName = Key_KeynumToString( c->u.key );
|
||||||
|
|
||||||
|
if( strlen( keyName ) == 1 )
|
||||||
|
{
|
||||||
|
c->type = CHARACTER;
|
||||||
|
c->u.character = *keyName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
c->type = KEY;
|
||||||
|
|
||||||
|
numConsoleKeys++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the character in preference to the key name
|
// Use the character in preference to the key name
|
||||||
if( *buf )
|
if( character != '\0' )
|
||||||
key = 0;
|
key = 0;
|
||||||
|
|
||||||
for( i = 0; i < numConsoleKeys; i++ )
|
for( i = 0; i < numConsoleKeys; i++ )
|
||||||
{
|
{
|
||||||
if( !consoleKeys[ i ] )
|
consoleKey_t *c = &consoleKeys[ i ];
|
||||||
continue;
|
|
||||||
|
|
||||||
if( consoleKeys[ i ] == key || consoleKeys[ i ] == *buf )
|
switch( c->type )
|
||||||
|
{
|
||||||
|
case KEY:
|
||||||
|
if( key && c->u.key == key )
|
||||||
return qtrue;
|
return qtrue;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHARACTER:
|
||||||
|
if( c->u.character == character )
|
||||||
|
return qtrue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return qfalse;
|
return qfalse;
|
||||||
|
@ -291,7 +333,7 @@ static const char *IN_TranslateSDLToQ3Key( SDL_keysym *keysym,
|
||||||
if( in_keyboardDebug->integer )
|
if( in_keyboardDebug->integer )
|
||||||
IN_PrintKey( keysym, *key, down );
|
IN_PrintKey( keysym, *key, down );
|
||||||
|
|
||||||
if( IN_IsConsoleKey( *key, buf ) )
|
if( IN_IsConsoleKey( *key, *buf ) )
|
||||||
{
|
{
|
||||||
// Console keys can't be bound or generate characters
|
// Console keys can't be bound or generate characters
|
||||||
*key = K_CONSOLE;
|
*key = K_CONSOLE;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue