Joystick fixed for Nunchuk and Classic controller (Y axis was inverted). Someone still needs to check gamecube. Makefile fixed.

This commit is contained in:
Carl.Kenner 2009-05-10 10:24:50 +00:00
parent 554c1977b9
commit 3b4c232b4d
2 changed files with 26 additions and 8 deletions

View file

@ -64,8 +64,7 @@ install:
@cp -frv include/*.* $(INSTALL_HEADER_DIR)/SDL @cp -frv include/*.* $(INSTALL_HEADER_DIR)/SDL
# Used to install library by pressing Alt+R in Programmer's Notepad # Used to install library by pressing Alt+R in Programmer's Notepad
run: run: all install
all install
test-make: test-make:
$(MAKE) -f Makefile.test install $(MAKE) -f Makefile.test install

View file

@ -49,6 +49,9 @@
#define JOYNAMELEN 10 #define JOYNAMELEN 10
#define AXIS_MIN -32768 /* minimum value for axis coordinate */
#define AXIS_MAX 32767 /* maximum value for axis coordinate */
typedef struct joystick_paddata_t typedef struct joystick_paddata_t
{ {
u16 prev_buttons; u16 prev_buttons;
@ -204,7 +207,7 @@ int SDL_SYS_JoystickOpen(SDL_Joystick *joystick)
return(0); return(0);
} }
static s8 WPAD_Stick(u8 chan, u8 right, int axis) static s16 WPAD_Stick(u8 chan, u8 right, int axis)
{ {
float mag = 0.0; float mag = 0.0;
float ang = 0.0; float ang = 0.0;
@ -248,7 +251,7 @@ static s8 WPAD_Stick(u8 chan, u8 right, int axis)
else // y-axis else // y-axis
val = mag * cos((PI * ang)/180.0f); val = mag * cos((PI * ang)/180.0f);
return (s8)(val * 128.0f); return (s16)(val * 128.0f);
} }
static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick) static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick)
@ -309,13 +312,21 @@ static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick)
axis = WPAD_Stick(joystick->index, 0, 0); axis = WPAD_Stick(joystick->index, 0, 0);
if(prev_state->wiimote.classicL_stickX != axis) if(prev_state->wiimote.classicL_stickX != axis)
{ {
SDL_PrivateJoystickAxis(joystick, 0, axis << 8); s16 value;
if (axis >= 128) value = AXIS_MAX;
else if (axis <=-128) value = AXIS_MIN;
else value = axis << 8;
SDL_PrivateJoystickAxis(joystick, 0, value);
prev_state->wiimote.classicL_stickX = axis; prev_state->wiimote.classicL_stickX = axis;
} }
axis = WPAD_Stick(joystick->index, 0, 1); axis = WPAD_Stick(joystick->index, 0, 1);
if(prev_state->wiimote.classicL_stickY != axis) if(prev_state->wiimote.classicL_stickY != axis)
{ {
SDL_PrivateJoystickAxis(joystick, 1, axis << 8); s16 value;
if (axis >= 128) value = AXIS_MAX;
else if (axis <=-128) value = AXIS_MIN;
else value = axis << 8;
SDL_PrivateJoystickAxis(joystick, 1, -value);
prev_state->wiimote.classicL_stickY = axis; prev_state->wiimote.classicL_stickY = axis;
} }
axis = WPAD_Stick(joystick->index, 1, 0); axis = WPAD_Stick(joystick->index, 1, 0);
@ -348,13 +359,21 @@ static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick)
axis = WPAD_Stick(joystick->index, 0, 0); axis = WPAD_Stick(joystick->index, 0, 0);
if(prev_state->wiimote.nunchuk_stickX != axis) if(prev_state->wiimote.nunchuk_stickX != axis)
{ {
SDL_PrivateJoystickAxis(joystick, 0, axis << 8); s16 value;
if (axis >= 128) value = AXIS_MAX;
else if (axis <=-128) value = AXIS_MIN;
else value = axis << 8;
SDL_PrivateJoystickAxis(joystick, 0, value);
prev_state->wiimote.nunchuk_stickX = axis; prev_state->wiimote.nunchuk_stickX = axis;
} }
axis = WPAD_Stick(joystick->index, 0, 1); axis = WPAD_Stick(joystick->index, 0, 1);
if(prev_state->wiimote.nunchuk_stickY != axis) if(prev_state->wiimote.nunchuk_stickY != axis)
{ {
SDL_PrivateJoystickAxis(joystick, 1, axis << 8); s16 value;
if (axis >= 128) value = AXIS_MAX;
else if (axis <=-128) value = AXIS_MIN;
else value = axis << 8;
SDL_PrivateJoystickAxis(joystick, 1, -value);
prev_state->wiimote.nunchuk_stickY = axis; prev_state->wiimote.nunchuk_stickY = axis;
} }
} }