- bugfix for some hotkeys not working properly

This commit is contained in:
Mark Vejvoda
2011-07-04 18:05:02 +00:00
parent a8b25cf111
commit 852b4aa2d2
3 changed files with 55 additions and 21 deletions

View File

@@ -1508,22 +1508,25 @@ void Game::keyDown(SDL_KeyboardEvent key) {
//send key to the chat manager //send key to the chat manager
chatManager.keyDown(key); chatManager.keyDown(key);
//printf("GAME KEYDOWN #1\n");
if(chatManager.getEditEnabled() == false) { if(chatManager.getEditEnabled() == false) {
//printf("GAME KEYDOWN #2\n");
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%d - %c]\n",__FILE__,__FUNCTION__,__LINE__,key.keysym.sym,key.keysym.sym); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%d - %c]\n",__FILE__,__FUNCTION__,__LINE__,key.keysym.sym,key.keysym.sym);
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys)); Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
//if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] key = [%d - %c] pausegame [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key,configKeys.getCharKey("PauseGame")); //if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] key = [%d - %c] pausegame [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key,configKeys.getCharKey("PauseGame"));
//if(key == configKeys.getCharKey("RenderNetworkStatus")) { //if(key == configKeys.getCharKey("RenderNetworkStatus")) {
if(isKeyPressed(configKeys.getSDLKey("RenderNetworkStatus"),key) == true) { if(isKeyPressed(configKeys.getSDLKey("RenderNetworkStatus"),key, false) == true) {
renderNetworkStatus= !renderNetworkStatus; renderNetworkStatus= !renderNetworkStatus;
} }
//else if(key == configKeys.getCharKey("ShowFullConsole")) { //else if(key == configKeys.getCharKey("ShowFullConsole")) {
else if(isKeyPressed(configKeys.getSDLKey("ShowFullConsole"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("ShowFullConsole"),key, false) == true) {
showFullConsole= true; showFullConsole= true;
} }
//else if(key == configKeys.getCharKey("TogglePhotoMode")) { //else if(key == configKeys.getCharKey("TogglePhotoMode")) {
else if(isKeyPressed(configKeys.getSDLKey("TogglePhotoMode"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("TogglePhotoMode"),key, false) == true) {
photoModeEnabled = !photoModeEnabled; photoModeEnabled = !photoModeEnabled;
if( photoModeEnabled == true && if( photoModeEnabled == true &&
this->gameSettings.isNetworkGame() == false) { this->gameSettings.isNetworkGame() == false) {
@@ -1536,7 +1539,7 @@ void Game::keyDown(SDL_KeyboardEvent key) {
} }
//Toggle music //Toggle music
//else if(key == configKeys.getCharKey("ToggleMusic")) { //else if(key == configKeys.getCharKey("ToggleMusic")) {
else if(isKeyPressed(configKeys.getSDLKey("ToggleMusic"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("ToggleMusic"),key, false) == true) {
Config &config = Config::getInstance(); Config &config = Config::getInstance();
StrSound *gameMusic = world.getThisFaction()->getType()->getMusic(); StrSound *gameMusic = world.getThisFaction()->getType()->getMusic();
if(gameMusic != NULL) { if(gameMusic != NULL) {
@@ -1555,54 +1558,54 @@ void Game::keyDown(SDL_KeyboardEvent key) {
} }
//move camera left //move camera left
//else if(key == configKeys.getCharKey("CameraModeLeft")) { //else if(key == configKeys.getCharKey("CameraModeLeft")) {
else if(isKeyPressed(configKeys.getSDLKey("CameraModeLeft"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("CameraModeLeft"),key, false) == true) {
gameCamera.setMoveX(-1); gameCamera.setMoveX(-1);
camLeftButtonDown=true; camLeftButtonDown=true;
} }
//move camera right //move camera right
//else if(key == configKeys.getCharKey("CameraModeRight")) { //else if(key == configKeys.getCharKey("CameraModeRight")) {
else if(isKeyPressed(configKeys.getSDLKey("CameraModeRight"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("CameraModeRight"),key, false) == true) {
gameCamera.setMoveX(1); gameCamera.setMoveX(1);
camRightButtonDown=true; camRightButtonDown=true;
} }
//move camera up //move camera up
//else if(key == configKeys.getCharKey("CameraModeUp")) { //else if(key == configKeys.getCharKey("CameraModeUp")) {
else if(isKeyPressed(configKeys.getSDLKey("CameraModeUp"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("CameraModeUp"),key, false) == true) {
gameCamera.setMoveZ(1); gameCamera.setMoveZ(1);
camUpButtonDown=true; camUpButtonDown=true;
} }
//move camera down //move camera down
//else if(key == configKeys.getCharKey("CameraModeDown")) { //else if(key == configKeys.getCharKey("CameraModeDown")) {
else if(isKeyPressed(configKeys.getSDLKey("CameraModeDown"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("CameraModeDown"),key, false) == true) {
gameCamera.setMoveZ(-1); gameCamera.setMoveZ(-1);
camDownButtonDown=true; camDownButtonDown=true;
} }
//change camera mode //change camera mode
//else if(key == configKeys.getCharKey("FreeCameraMode")) { //else if(key == configKeys.getCharKey("FreeCameraMode")) {
else if(isKeyPressed(configKeys.getSDLKey("FreeCameraMode"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("FreeCameraMode"),key, false) == true) {
gameCamera.switchState(); gameCamera.switchState();
string stateString= gameCamera.getState()==GameCamera::sGame? lang.get("GameCamera"): lang.get("FreeCamera"); string stateString= gameCamera.getState()==GameCamera::sGame? lang.get("GameCamera"): lang.get("FreeCamera");
console.addLine(lang.get("CameraModeSet")+" "+ stateString); console.addLine(lang.get("CameraModeSet")+" "+ stateString);
} }
//reset camera mode to normal //reset camera mode to normal
//else if(key == configKeys.getCharKey("ResetCameraMode")) { //else if(key == configKeys.getCharKey("ResetCameraMode")) {
else if(isKeyPressed(configKeys.getSDLKey("ResetCameraMode"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("ResetCameraMode"),key, false) == true) {
gameCamera.resetPosition(); gameCamera.resetPosition();
} }
//pause //pause
//else if(key == configKeys.getCharKey("PauseGame")) { //else if(key == configKeys.getCharKey("PauseGame")) {
else if(isKeyPressed(configKeys.getSDLKey("PauseGame"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("PauseGame"),key, false) == true) {
//printf("Toggle pause paused = %d\n",paused); //printf("Toggle pause paused = %d\n",paused);
setPaused(!paused); setPaused(!paused);
} }
//switch display color //switch display color
//else if(key == configKeys.getCharKey("ChangeFontColor")) { //else if(key == configKeys.getCharKey("ChangeFontColor")) {
else if(isKeyPressed(configKeys.getSDLKey("ChangeFontColor"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("ChangeFontColor"),key, false) == true) {
gui.switchToNextDisplayColor(); gui.switchToNextDisplayColor();
} }
//increment speed //increment speed
//else if(key == configKeys.getCharKey("GameSpeedIncrease")) { //else if(key == configKeys.getCharKey("GameSpeedIncrease")) {
else if(isKeyPressed(configKeys.getSDLKey("GameSpeedIncrease"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("GameSpeedIncrease"),key, false) == true) {
bool speedChangesAllowed= !NetworkManager::getInstance().isNetworkGame(); bool speedChangesAllowed= !NetworkManager::getInstance().isNetworkGame();
if(speedChangesAllowed){ if(speedChangesAllowed){
incSpeed(); incSpeed();
@@ -1610,7 +1613,7 @@ void Game::keyDown(SDL_KeyboardEvent key) {
} }
//decrement speed //decrement speed
//else if(key == configKeys.getCharKey("GameSpeedDecrease")) { //else if(key == configKeys.getCharKey("GameSpeedDecrease")) {
else if(isKeyPressed(configKeys.getSDLKey("GameSpeedDecrease"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("GameSpeedDecrease"),key, false) == true) {
bool speedChangesAllowed= !NetworkManager::getInstance().isNetworkGame(); bool speedChangesAllowed= !NetworkManager::getInstance().isNetworkGame();
if(speedChangesAllowed){ if(speedChangesAllowed){
decSpeed(); decSpeed();
@@ -1618,12 +1621,13 @@ void Game::keyDown(SDL_KeyboardEvent key) {
} }
//exit //exit
//else if(key == configKeys.getCharKey("ExitKey")) { //else if(key == configKeys.getCharKey("ExitKey")) {
else if(isKeyPressed(configKeys.getSDLKey("ExitKey"),key) == true) { else if(isKeyPressed(configKeys.getSDLKey("ExitKey"),key, false) == true) {
showMessageBox(lang.get("ExitGame?"), "", true); showMessageBox(lang.get("ExitGame?"), "", true);
} }
//group //group
//else if(key>='0' && key<'0'+Selection::maxGroups){ //else if(key>='0' && key<'0'+Selection::maxGroups){
else { else {
//printf("GAME KEYDOWN #3\n");
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
for(int idx = 1; idx <= Selection::maxGroups; idx++) { for(int idx = 1; idx <= Selection::maxGroups; idx++) {
@@ -1634,8 +1638,10 @@ void Game::keyDown(SDL_KeyboardEvent key) {
SDLKey groupHotKey = configKeys.getSDLKey(keyName.c_str()); SDLKey groupHotKey = configKeys.getSDLKey(keyName.c_str());
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keyName [%s] group index = %d, key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),idx,groupHotKey,groupHotKey); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keyName [%s] group index = %d, key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),idx,groupHotKey,groupHotKey);
//printf("input.keysym.mod = %d groupHotKey = %d key = %d isgroup = %d\n",key.keysym.mod,groupHotKey,key.keysym.sym,isKeyPressed(groupHotKey,key));
//if(key == groupHotKey) { //if(key == groupHotKey) {
if(isKeyPressed(groupHotKey,key) == true) { if(isKeyPressed(groupHotKey,key) == true) {
//printf("GROUP KEY!\n");
//gui.groupKey(key-'0'); //gui.groupKey(key-'0');
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
gui.groupKey(idx-1); gui.groupKey(idx-1);

View File

@@ -195,7 +195,7 @@ private:
static void toggleFullscreen(); static void toggleFullscreen();
}; };
bool isKeyPressed(SDLKey compareKey, SDL_KeyboardEvent input); bool isKeyPressed(SDLKey compareKey, SDL_KeyboardEvent input, bool modifiersAllowed=true);
SDLKey extractKeyPressed(SDL_KeyboardEvent input); SDLKey extractKeyPressed(SDL_KeyboardEvent input);
bool isAllowedInputTextKey(SDLKey key); bool isAllowedInputTextKey(SDLKey key);

View File

@@ -944,12 +944,23 @@ char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) {
} }
*/ */
bool isKeyPressed(SDLKey compareKey, SDL_KeyboardEvent input) { bool isKeyPressed(SDLKey compareKey, SDL_KeyboardEvent input,bool modifiersAllowed) {
Uint16 c = 0; Uint16 c = SDLK_UNKNOWN;
//if(input.keysym.unicode > 0 && input.keysym.unicode < 0x80) {
if(input.keysym.unicode > 0 && input.keysym.unicode < 0x80) { if(input.keysym.unicode > 0 && input.keysym.unicode < 0x80) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
c = input.keysym.unicode;
//c = toupper(c); // When modifiers are pressed the unicode result is wrong
// example CTRL-3 will give the ESCAPE vslue 27 in unicode
if( (input.keysym.mod & KMOD_LCTRL) != KMOD_LCTRL &&
(input.keysym.mod & KMOD_RCTRL) != KMOD_RCTRL &&
(input.keysym.mod & KMOD_LALT) != KMOD_LALT &&
(input.keysym.mod & KMOD_RALT) != KMOD_RALT &&
(input.keysym.mod & KMOD_LSHIFT) != KMOD_LSHIFT &&
(input.keysym.mod & KMOD_RSHIFT) != KMOD_RSHIFT) {
c = input.keysym.unicode;
//c = toupper(c);
}
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] #1 (c & 0xFF) [%d]\n",__FILE__,__FUNCTION__,__LINE__,(c & 0xFF)); if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] #1 (c & 0xFF) [%d]\n",__FILE__,__FUNCTION__,__LINE__,(c & 0xFF));
} }
@@ -979,11 +990,24 @@ bool isKeyPressed(SDLKey compareKey, SDL_KeyboardEvent input) {
} }
} }
if(result == true && modifiersAllowed == false) {
//printf("input.keysym.mod = %d\n",input.keysym.mod);
if( (input.keysym.mod & KMOD_LCTRL) == KMOD_LCTRL ||
(input.keysym.mod & KMOD_RCTRL) == KMOD_RCTRL ||
(input.keysym.mod & KMOD_LALT) == KMOD_LALT ||
(input.keysym.mod & KMOD_RALT) == KMOD_RALT ||
(input.keysym.mod & KMOD_LSHIFT) == KMOD_LSHIFT ||
(input.keysym.mod & KMOD_RSHIFT) == KMOD_RSHIFT) {
result = false;
}
}
string compareKeyName = SDL_GetKeyName(compareKey); string compareKeyName = SDL_GetKeyName(compareKey);
string pressKeyName = SDL_GetKeyName((SDLKey)c); string pressKeyName = SDL_GetKeyName((SDLKey)c);
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] compareKey [%d - %s] pressed key [%d - %s] result = %d\n",__FILE__,__FUNCTION__,__LINE__,compareKey,compareKeyName.c_str(),c,pressKeyName.c_str(),result); if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] compareKey [%d - %s] pressed key [%d - %s] result = %d\n",__FILE__,__FUNCTION__,__LINE__,compareKey,compareKeyName.c_str(),c,pressKeyName.c_str(),result);
//printf ("In [%s::%s Line: %d] pressed key [%d - %s] input.keysym.unicode [%d] mod = %d\n",__FILE__,__FUNCTION__,__LINE__,c,pressKeyName.c_str(),input.keysym.sym,input.keysym.unicode,input.keysym.mod); //printf ("ISPRESS compareKey [%d - %s] pressed key [%d - %s] input.keysym.sym [%d] input.keysym.unicode [%d] mod = %d result = %d\n",
// compareKey,compareKeyName.c_str(),c,pressKeyName.c_str(),input.keysym.sym,input.keysym.unicode,input.keysym.mod,result);
return result; return result;
} }
@@ -993,6 +1017,7 @@ SDLKey extractKeyPressed(SDL_KeyboardEvent input) {
//if(input.keysym.unicode > 0 && input.keysym.unicode < 0x80) { //if(input.keysym.unicode > 0 && input.keysym.unicode < 0x80) {
if(input.keysym.unicode > 0) { if(input.keysym.unicode > 0) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
c = (SDLKey)input.keysym.unicode; c = (SDLKey)input.keysym.unicode;
//c = toupper(c); //c = toupper(c);
@@ -1010,6 +1035,9 @@ SDLKey extractKeyPressed(SDL_KeyboardEvent input) {
string pressKeyName = SDL_GetKeyName((SDLKey)c); string pressKeyName = SDL_GetKeyName((SDLKey)c);
string inputKeyName = SDL_GetKeyName(input.keysym.sym); string inputKeyName = SDL_GetKeyName(input.keysym.sym);
//printf ("PRESS pressed key [%d - %s] input.keysym.sym [%d] input.keysym.unicode [%d] mod = %d\n",
// c,pressKeyName.c_str(),input.keysym.sym,input.keysym.unicode,input.keysym.mod);
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] pressed key [%d - %s]\n",__FILE__,__FUNCTION__,__LINE__,c,pressKeyName.c_str()); if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] pressed key [%d - %s]\n",__FILE__,__FUNCTION__,__LINE__,c,pressKeyName.c_str());
//printf ("In [%s::%s Line: %d] pressed key [%d - %s] input [%d - %s] input.keysym.unicode [%d] mod = %d\n",__FILE__,__FUNCTION__,__LINE__,c,pressKeyName.c_str(),input.keysym.sym,inputKeyName.c_str(),input.keysym.unicode,input.keysym.mod); //printf ("In [%s::%s Line: %d] pressed key [%d - %s] input [%d - %s] input.keysym.unicode [%d] mod = %d\n",__FILE__,__FUNCTION__,__LINE__,c,pressKeyName.c_str(),input.keysym.sym,inputKeyName.c_str(),input.keysym.unicode,input.keysym.mod);