Keyboard input: Add option to use cursor keys as cursors instead of

joystick
This commit is contained in:
simon.kagstrom 2010-08-23 08:32:48 +00:00
parent fd5fe7825f
commit 17d70cc3ef
5 changed files with 51 additions and 9 deletions

View File

@ -586,12 +586,38 @@ void C64Display::TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix,
case SDLK_RSHIFT: c64_key = MATRIX(6,4); break; case SDLK_RSHIFT: c64_key = MATRIX(6,4); break;
case SDLK_LALT: case SDLK_LMETA: c64_key = MATRIX(7,5); break; case SDLK_LALT: case SDLK_LMETA: c64_key = MATRIX(7,5); break;
case SDLK_RALT: case SDLK_RMETA: c64_key = MATRIX(7,5); break; case SDLK_RALT: case SDLK_RMETA: c64_key = MATRIX(7,5); break;
case SDLK_UP:
case SDLK_UP: c64_key = 0x01 | 0x40; break; {
case SDLK_DOWN: c64_key = 0x02 | 0x40; break; if (ThePrefs.CursorKeysForJoystick)
case SDLK_LEFT: c64_key = 0x04 | 0x40; break; c64_key = 0x01 | 0x40;
case SDLK_RIGHT: c64_key = 0x08 | 0x40; break; else
c64_key = MATRIX(0,7) | 0x80;
break;
}
case SDLK_DOWN:
{
if (ThePrefs.CursorKeysForJoystick)
c64_key = 0x02 | 0x40;
else
c64_key = MATRIX(0,7);
break;
}
case SDLK_LEFT:
{
if (ThePrefs.CursorKeysForJoystick)
c64_key = 0x04 | 0x40;
else
c64_key = MATRIX(0,2) | 0x80;
break;
}
case SDLK_RIGHT:
{
if (ThePrefs.CursorKeysForJoystick)
c64_key = 0x08 | 0x40;
else
c64_key = MATRIX(0,2);
break;
}
case SDLK_F1: c64_key = MATRIX(0,4); break; case SDLK_F1: c64_key = MATRIX(0,4); break;
case SDLK_F2: c64_key = MATRIX(0,4) | 0x80; break; case SDLK_F2: c64_key = MATRIX(0,4) | 0x80; break;
case SDLK_F3: c64_key = MATRIX(0,5); break; case SDLK_F3: c64_key = MATRIX(0,5); break;

View File

@ -118,6 +118,7 @@ Prefs::Prefs()
snprintf(this->NetworkServer, 64, "play.c64-network.org"); snprintf(this->NetworkServer, 64, "play.c64-network.org");
this->NetworkPort = 46214; this->NetworkPort = 46214;
this->NetworkRegion = REGION_UNKNOWN; this->NetworkRegion = REGION_UNKNOWN;
this->CursorKeysForJoystick = true;
strcpy(this->Theme, "default"); strcpy(this->Theme, "default");
} }
@ -319,6 +320,7 @@ bool Prefs::operator==(const Prefs &rhs) const
&& strcmp(this->NetworkName, rhs.NetworkName) == 0 && strcmp(this->NetworkName, rhs.NetworkName) == 0
&& strcmp(this->Theme, rhs.Theme) == 0 && strcmp(this->Theme, rhs.Theme) == 0
&& this->NetworkAvatar == rhs.NetworkAvatar && this->NetworkAvatar == rhs.NetworkAvatar
&& this->CursorKeysForJoystick == rhs.CursorKeysForJoystick
); );
} }
@ -504,6 +506,8 @@ void Prefs::Load(const char *filename)
NetworkAvatar = atoi(value); NetworkAvatar = atoi(value);
else if (!strcmp(keyword, "Theme")) else if (!strcmp(keyword, "Theme"))
strcpy(Theme, value); strcpy(Theme, value);
else if (!strcmp(keyword, "CursorKeysForJoystick"))
CursorKeysForJoystick = !strcmp(value, "TRUE");
} }
} }
fclose(file); fclose(file);
@ -616,6 +620,7 @@ bool Prefs::Save(const char *filename)
maybe_write(file, NetworkPort != TheDefaultPrefs.NetworkPort, "NetworkPort = %d\n", NetworkPort); maybe_write(file, NetworkPort != TheDefaultPrefs.NetworkPort, "NetworkPort = %d\n", NetworkPort);
maybe_write(file, NetworkRegion != TheDefaultPrefs.NetworkRegion, "NetworkRegion = %d\n", NetworkRegion); maybe_write(file, NetworkRegion != TheDefaultPrefs.NetworkRegion, "NetworkRegion = %d\n", NetworkRegion);
maybe_write(file, strcmp(Theme, TheDefaultPrefs.Theme) != 0, "Theme = %s\n", Theme); maybe_write(file, strcmp(Theme, TheDefaultPrefs.Theme) != 0, "Theme = %s\n", Theme);
maybe_write(file, CursorKeysForJoystick != TheDefaultPrefs.CursorKeysForJoystick, "CursorKeysForJoystick = %s\n", CursorKeysForJoystick ? "TRUE" : "FALSE");
fclose(file); fclose(file);
ThePrefsOnDisk = *this; ThePrefsOnDisk = *this;
return true; return true;

View File

@ -172,6 +172,8 @@ public:
int NetworkKey; int NetworkKey;
uint16 NetworkAvatar; uint16 NetworkAvatar;
char Theme[128]; char Theme[128];
bool CursorKeysForJoystick;
}; };

View File

@ -95,6 +95,13 @@ public:
case 1: case 1:
Gui::gui->pushView(Gui::gui->bkv); Gui::gui->pushView(Gui::gui->bkv);
break; break;
case 2:
Gui::gui->np->CursorKeysForJoystick = !Gui::gui->np->CursorKeysForJoystick;
if (Gui::gui->np->CursorKeysForJoystick)
Gui::gui->status_bar->queueMessage("Cursor keys used as joystick");
else
Gui::gui->status_bar->queueMessage("Cursor keys used as keyboard cursors");
break;
default: default:
panic("Illegal selection\n"); panic("Illegal selection\n");
} }

View File

@ -133,7 +133,7 @@ const char *main_menu_messages[14] = {
/*02*/ "States", /*02*/ "States",
/*03*/ "^|Load|Save|Delete", /*03*/ "^|Load|Save|Delete",
/*04*/ "Keyboard", /*04*/ "Keyboard",
/*05*/ "^|Type|Bind", /*05*/ "^|Type|Bind|Toggle crsr",
/*06*/ " ", /*06*/ " ",
/*07*/ "Game info", /*07*/ "Game info",
/*08*/ "Networking", /*08*/ "Networking",
@ -158,8 +158,10 @@ const char **main_menu_help[14] = {
NULL, NULL,
(const char*[]){ (const char*[]){
"Bind keyboard keys to the", "Bind keyboard keys to the",
"joysticks, or type with", "joysticks, toggle cursor",
"the virtual keyboard", "key settings (joystick or",
"cursors) or type with the",
"virtual keyboard",
NULL, NULL,
}, },
NULL, NULL,