Set default keys for input on first run.

We use the following key input if the config `vbam.ini` does not exist:

input  | keyboard
A      | A
B      | S
L      | Q
R      | W
SELECT | Z
START  | X

We also set a joystick default, using the XBOX 360 controller as a
base.

- Fix #463.
This commit is contained in:
Edênis Freindorfer Azevedo 2019-07-05 20:44:12 -03:00 committed by Rafael Kitover
parent 9bc8f33c40
commit 3dc738b5c5
3 changed files with 20 additions and 12 deletions

View File

@ -144,8 +144,8 @@ const wxString joynames[NUM_KEYS] = {
wxJoyKeyBinding defkeys_keyboard[NUM_KEYS] = {
WJKB(WXK_UP), WJKB(WXK_DOWN), WJKB(WXK_LEFT), WJKB(WXK_RIGHT),
WJKB(wxT('Z')), WJKB(wxT('X')), WJKB(wxT('A')), WJKB(wxT('S')),
WJKB(wxT('C')), WJKB(wxT('V')),
WJKB(wxT('A')), WJKB(wxT('S')), WJKB(wxT('Q')), WJKB(wxT('W')),
WJKB(wxT('Z')), WJKB(wxT('X')),
WJKB(0), WJKB(0), WJKB(0), WJKB(0),
WJKB(0), WJKB(0), WJKB(0), WJKB(0),
WJKB(WXK_SPACE), WJKB(0), WJKB(0)
@ -153,8 +153,8 @@ wxJoyKeyBinding defkeys_keyboard[NUM_KEYS] = {
wxJoyKeyBinding defkeys_joystick[NUM_KEYS] = {
WJKB(1, WXJB_AXIS_MINUS, 1), WJKB(1, WXJB_AXIS_PLUS, 1), WJKB(0, WXJB_AXIS_MINUS, 1), WJKB(0, WXJB_AXIS_PLUS, 1),
WJKB(0, WXJB_BUTTON, 1), WJKB(1, WXJB_BUTTON, 1), WJKB(2, WXJB_BUTTON, 1), WJKB(3, WXJB_BUTTON, 1),
WJKB(4, WXJB_BUTTON, 1), WJKB(5, WXJB_BUTTON, 1),
WJKB(0, WXJB_BUTTON, 1), WJKB(1, WXJB_BUTTON, 1), WJKB(4, WXJB_BUTTON, 1), WJKB(5, WXJB_BUTTON, 1),
WJKB(6, WXJB_BUTTON, 1), WJKB(7, WXJB_BUTTON, 1),
WJKB(0), WJKB(0), WJKB(0), WJKB(0),
WJKB(0), WJKB(0), WJKB(0), WJKB(0),
WJKB(0), WJKB(0), WJKB(0)
@ -346,13 +346,6 @@ opts_t::opts_t()
bilinear = true;
default_stick = 1;
for (int i = 0; i < NUM_KEYS; i++) {
if (defkeys_keyboard[i].key)
joykey_bindings[0][i].push_back(defkeys_keyboard[i]);
if (defkeys_joystick[i].key)
joykey_bindings[0][i].push_back(defkeys_joystick[i]);
}
recent = new wxFileHistory(10);
autofire_rate = 1;
print_auto_page = true;
@ -368,6 +361,17 @@ bool opt_lt(const opt_desc& opt1, const opt_desc& opt2)
return wxStrcmp(opt1.opt, opt2.opt) < 0;
}
// set default input keys
void set_default_keys()
{
for (int i = 0; i < NUM_KEYS; i++) {
if (defkeys_keyboard[i].key)
gopts.joykey_bindings[0][i].push_back(defkeys_keyboard[i]);
if (defkeys_joystick[i].joy)
gopts.joykey_bindings[0][i].push_back(defkeys_joystick[i]);
}
}
// FIXME: simulate MakeInstanceFilename(vbam.ini) using subkeys (Slave%d/*)
void load_opts()
{

View File

@ -115,6 +115,8 @@ extern const int num_opts;
extern const wxAcceleratorEntry default_accels[];
extern const int num_def_accels;
// call to setup default keys.
void set_default_keys();
// call to load config (once)
// will write defaults for options not present and delete bad opts
// will also initialize opts[] array translations

View File

@ -165,6 +165,8 @@ wxString wxvbamApp::GetConfigurationPath()
break;
}
}
// use default keys for input.
set_default_keys();
}
return data_path;
@ -488,7 +490,7 @@ void wxvbamApp::OnInitCmdLine(wxCmdLineParser& cl)
N_("Print configuration path and exit"),
wxCMD_LINE_VAL_NONE, 0 },
{ wxCMD_LINE_SWITCH, t("f"), t("fullscreen"),
N_("Start in full-screen mode"),
N_("Start in full-screen mode"),
wxCMD_LINE_VAL_NONE, 0 },
#if !defined(NO_LINK) && !defined(__WXMSW__)
{ wxCMD_LINE_SWITCH, t("s"), t("delete-shared-state"),