From f02a2d7055b6d620d6b226e8c8bc508856f139b3 Mon Sep 17 00:00:00 2001 From: "simon.kagstrom" Date: Sat, 21 Feb 2009 09:01:33 +0000 Subject: [PATCH] Fix case when multiple buttons are bound to the same key --- CHANGES.WII | 3 +++ Src/C64_SDL.h | 9 +++++---- Src/Display_SDL.h | 24 +++++++++++++++++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGES.WII b/CHANGES.WII index 951917f..d5dcd53 100644 --- a/CHANGES.WII +++ b/CHANGES.WII @@ -6,6 +6,9 @@ TODO: Crash on + in "Other" menu version 7: + * Fix bug when multiple buttons are bound to the same keys, we now + simply skip one of the bindings. + * Wiimote direction keys and "fire" can now be bound to keyboard keys diff --git a/Src/C64_SDL.h b/Src/C64_SDL.h index 47c102f..aa72f17 100644 --- a/Src/C64_SDL.h +++ b/Src/C64_SDL.h @@ -249,10 +249,11 @@ void C64::select_disc(Prefs *np) char *C64::bind_one_key(Prefs *np, int which) { - static const char *which_to_button_name[] = { "up", "down", "left", "right", - "fire","A", "B", "+", "-", "1", - "classic up", "classic down", "classic left", "classic right", "classic fire", - "classic X", "classic Y", "classic B", "classic L", + static const char *which_to_button_name[N_WIIMOTE_BINDINGS] = { + "up", "down", "left", "right", + "2","A", "B", "+", "-", "1", + "classic up", "classic down", "classic left", "classic right", "classic a", + "classic X", "classic Y", "classic b", "classic L", "classic R", "classic ZR", "classic ZL" }; static char strs[N_WIIMOTE_BINDINGS][255]; char *out = strs[which]; diff --git a/Src/Display_SDL.h b/Src/Display_SDL.h index c937615..43f964e 100644 --- a/Src/Display_SDL.h +++ b/Src/Display_SDL.h @@ -627,6 +627,9 @@ uint8 C64::poll_joystick(int port) if (wpad->exp.type == WPAD_EXP_CLASSIC) held_classic = wpad->exp.classic.btns_held; + if ( (held & WPAD_BUTTON_HOME) || (held_classic & CLASSIC_CTRL_BUTTON_HOME) ) + TheC64->enter_menu(); + extra_keys[WIIMOTE_UP] = held & WPAD_BUTTON_UP; extra_keys[WIIMOTE_DOWN] = held & WPAD_BUTTON_DOWN; extra_keys[WIIMOTE_LEFT] = held & WPAD_BUTTON_LEFT; @@ -657,10 +660,29 @@ uint8 C64::poll_joystick(int port) extra_keys[WIIMOTE_MINUS] = (held_classic & CLASSIC_CTRL_BUTTON_PLUS) | held & WPAD_BUTTON_MINUS; + /* Merge common keys */ + int active_binded_keys[N_WIIMOTE_BINDINGS]; + memcpy(active_binded_keys, ThePrefs.JoystickKeyBinding, sizeof(active_binded_keys)); + for (int first = 0; first <= N_WIIMOTE_BINDINGS; first++) + { + if (!extra_keys[first]) + continue; + for (int second = 0; second <= N_WIIMOTE_BINDINGS; second++) + { + if (first != second && + active_binded_keys[first] == + active_binded_keys[second]) { + /* Unbind this */ + extra_keys[second] = 0; + active_binded_keys[second] = -1; + } + } + } + for (int i = 0; i < N_WIIMOTE_BINDINGS; i++) { static bool is_pressed[2][N_WIIMOTE_BINDINGS]; - int kc = ThePrefs.JoystickKeyBinding[i]; + int kc = active_binded_keys[i]; if ( kc >= 0) {