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
# Used to install library by pressing Alt+R in Programmer's Notepad
run:
all install
run: all install
test-make:
$(MAKE) -f Makefile.test install

View file

@ -49,6 +49,9 @@
#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
{
u16 prev_buttons;
@ -204,7 +207,7 @@ int SDL_SYS_JoystickOpen(SDL_Joystick *joystick)
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 ang = 0.0;
@ -248,7 +251,7 @@ static s8 WPAD_Stick(u8 chan, u8 right, int axis)
else // y-axis
val = mag * cos((PI * ang)/180.0f);
return (s8)(val * 128.0f);
return (s16)(val * 128.0f);
}
static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick)
@ -309,13 +312,21 @@ static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick)
axis = WPAD_Stick(joystick->index, 0, 0);
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;
}
axis = WPAD_Stick(joystick->index, 0, 1);
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;
}
axis = WPAD_Stick(joystick->index, 1, 0);
@ -348,13 +359,21 @@ static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick)
axis = WPAD_Stick(joystick->index, 0, 0);
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;
}
axis = WPAD_Stick(joystick->index, 0, 1);
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;
}
}