-wiimote controls are checked much more now, the wiimote extensions

are handled separately per player, so it cant happen that for
example the nunchuk button c gets interpreted as classic controller
button left anymore, this change might change the controls slighly
This commit is contained in:
fix94.1 2013-03-31 17:09:37 +00:00
parent b24b4ef37b
commit d1e1e04fb4
3 changed files with 106 additions and 142 deletions

View File

@ -1,41 +1,51 @@
#define WBTN_UP (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP)
#define WBTN_DOWN (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN)
#define WBTN_LEFT (WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT)
#define WBTN_RIGHT (WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT)
#define WBTN_HOME (WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME)
#define WBTN_MINUS (WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_FULL_L)
#define WBTN_PLUS (WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_FULL_R)
#define WBTN_Z (WPAD_NUNCHUK_BUTTON_Z | WPAD_CLASSIC_BUTTON_ZR)
#define WBTN_A (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)
#define WBTN_B (WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B)
#define WBTN_1 (WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y)
#define WBTN_2 (WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X)
#define WBTN_UP_PRESSED (wBtn_Pressed(WPAD_BUTTON_UP, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_UP, WPAD_EXP_CLASSIC))
#define WBTN_DOWN_PRESSED (wBtn_Pressed(WPAD_BUTTON_DOWN, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_DOWN, WPAD_EXP_CLASSIC))
#define WBTN_LEFT_PRESSED (wBtn_Pressed(WPAD_BUTTON_LEFT, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_LEFT, WPAD_EXP_CLASSIC))
#define WBTN_RIGHT_PRESSED (wBtn_Pressed(WPAD_BUTTON_RIGHT, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_RIGHT, WPAD_EXP_CLASSIC))
#define WBTN_HOME_PRESSED (wBtn_Pressed(WPAD_BUTTON_HOME, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_HOME, WPAD_EXP_CLASSIC))
#define WBTN_MINUS_PRESSED (wBtn_Pressed(WPAD_BUTTON_MINUS, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_FULL_L, WPAD_EXP_CLASSIC))
#define WBTN_PLUS_PRESSED (wBtn_Pressed(WPAD_BUTTON_PLUS, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_FULL_R, WPAD_EXP_CLASSIC))
#define WBTN_Z_PRESSED (wBtn_Pressed(WPAD_NUNCHUK_BUTTON_Z, WPAD_EXP_NUNCHUK) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_ZR, WPAD_EXP_CLASSIC))
#define WBTN_A_PRESSED (wBtn_Pressed(WPAD_BUTTON_A, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_A, WPAD_EXP_CLASSIC))
#define WBTN_B_PRESSED (wBtn_Pressed(WPAD_BUTTON_B, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_B, WPAD_EXP_CLASSIC))
#define WBTN_1_PRESSED (wBtn_Pressed(WPAD_BUTTON_1, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_Y, WPAD_EXP_CLASSIC))
#define WBTN_2_PRESSED (wBtn_Pressed(WPAD_BUTTON_2, WPAD_EXP_NONE) \
|| wBtn_Pressed(WPAD_CLASSIC_BUTTON_X, WPAD_EXP_CLASSIC))
#define WBTN_UP_PRESSED (wii_btnsPressed & WBTN_UP)
#define WBTN_DOWN_PRESSED (wii_btnsPressed & WBTN_DOWN)
#define WBTN_LEFT_PRESSED (wii_btnsPressed & WBTN_LEFT)
#define WBTN_RIGHT_PRESSED (wii_btnsPressed & WBTN_RIGHT)
#define WBTN_HOME_PRESSED (wii_btnsPressed & WBTN_HOME)
#define WBTN_MINUS_PRESSED (wii_btnsPressed & WBTN_MINUS)
#define WBTN_PLUS_PRESSED (wii_btnsPressed & WBTN_PLUS)
#define WBTN_Z_PRESSED (wii_btnsPressed & WBTN_Z)
#define WBTN_A_PRESSED (wii_btnsPressed & WBTN_A)
#define WBTN_B_PRESSED (wii_btnsPressed & WBTN_B)
#define WBTN_1_PRESSED (wii_btnsPressed & WBTN_1)
#define WBTN_2_PRESSED (wii_btnsPressed & WBTN_2)
#define WBTN_UP_HELD (wii_btnsHeld & WBTN_UP)
#define WBTN_DOWN_HELD (wii_btnsHeld & WBTN_DOWN)
#define WBTN_LEFT_HELD (wii_btnsHeld & WBTN_LEFT)
#define WBTN_RIGHT_HELD (wii_btnsHeld & WBTN_RIGHT)
#define WBTN_HOME_HELD (wii_btnsHeld & WBTN_HOME)
#define WBTN_MINUS_HELD (wii_btnsHeld & WBTN_MINUS)
#define WBTN_PLUS_HELD (wii_btnsHeld & WBTN_PLUS)
#define WBTN_A_HELD (wii_btnsHeld & WBTN_A)
#define WBTN_B_HELD (wii_btnsHeld & WBTN_B)
#define WBTN_1_HELD (wii_btnsHeld & WBTN_1)
#define WBTN_2_HELD (wii_btnsHeld & WBTN_2)
#define WBTN_UP_HELD (wBtn_Held(WPAD_BUTTON_UP, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_UP, WPAD_EXP_CLASSIC))
#define WBTN_DOWN_HELD (wBtn_Held(WPAD_BUTTON_DOWN, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_DOWN, WPAD_EXP_CLASSIC))
#define WBTN_LEFT_HELD (wBtn_Held(WPAD_BUTTON_LEFT, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_LEFT, WPAD_EXP_CLASSIC))
#define WBTN_RIGHT_HELD (wBtn_Held(WPAD_BUTTON_RIGHT, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_RIGHT, WPAD_EXP_CLASSIC))
#define WBTN_HOME_HELD (wBtn_Held(WPAD_BUTTON_HOME, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_HOME, WPAD_EXP_CLASSIC))
#define WBTN_MINUS_HELD (wBtn_Held(WPAD_BUTTON_MINUS, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_FULL_L, WPAD_EXP_CLASSIC))
#define WBTN_PLUS_HELD (wBtn_Held(WPAD_BUTTON_PLUS, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_FULL_R, WPAD_EXP_CLASSIC))
#define WBTN_A_HELD (wBtn_Held(WPAD_BUTTON_A, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_A, WPAD_EXP_CLASSIC))
#define WBTN_B_HELD (wBtn_Held(WPAD_BUTTON_B, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_B, WPAD_EXP_CLASSIC))
#define WBTN_1_HELD (wBtn_Held(WPAD_BUTTON_1, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_Y, WPAD_EXP_CLASSIC))
#define WBTN_2_HELD (wBtn_Held(WPAD_BUTTON_2, WPAD_EXP_NONE) \
|| wBtn_Held(WPAD_CLASSIC_BUTTON_X, WPAD_EXP_CLASSIC))
#define GBTN_UP (PAD_BUTTON_UP)
#define GBTN_DOWN (PAD_BUTTON_DOWN)
@ -99,17 +109,20 @@
#define BTN_1_HELD (WBTN_1_HELD || GBTN_1_HELD)
#define BTN_2_HELD (WBTN_2_HELD || GBTN_2_HELD)
enum
{
WBTN_UP = 0,
WBTN_DOWN,
WBTN_LEFT,
WBTN_RIGHT,
WBTN_A,
};
#define BTN_UP_REPEAT (wii_btnRepeat(WBTN_UP) || gc_btnRepeat(GBTN_UP))
#define BTN_DOWN_REPEAT (wii_btnRepeat(WBTN_DOWN) || gc_btnRepeat(GBTN_DOWN))
#define BTN_LEFT_REPEAT (wii_btnRepeat(WBTN_LEFT) || gc_btnRepeat(GBTN_LEFT))
#define BTN_RIGHT_REPEAT (wii_btnRepeat(WBTN_RIGHT) || gc_btnRepeat(GBTN_RIGHT))
/* #define BTN_MINUS_REPEAT (wii_btnRepeat(WBTN_MINUS) || gc_btnRepeat(GBTN_MINUS))
#define BTN_PLUS_REPEAT (wii_btnRepeat(WBTN_PLUS) || gc_btnRepeat(GBTN_PLUS))
#define BTN_HOME_REPEAT (wii_btnRepeat(WBTN_HOME) || gc_btnRepeat(GBTN_HOME)) */
#define BTN_A_REPEAT (wii_btnRepeat(WBTN_A) || gc_btnRepeat(GBTN_A))
/* #define BTN_B_REPEAT (wii_btnRepeat(WBTN_B) || gc_btnRepeat(GBTN_B))
#define BTN_1_REPEAT (wii_btnRepeat(WBTN_1) || gc_btnRepeat(GBTN_1))
#define BTN_2_REPEAT (wii_btnRepeat(WBTN_2) || gc_btnRepeat(GBTN_2)) */
#define LEFT_STICK_UP lStick_Up()
#define LEFT_STICK_DOWN lStick_Down()
@ -136,84 +149,3 @@
#define RIGHT_STICK_ANG_RIGHT (right_stick_angle[chan] >= 30 && right_stick_angle[chan] <= 150)
#define RIGHT_STICK_ANG_DOWN (right_stick_angle[chan] >= 120 && right_stick_angle[chan] <= 240)
#define RIGHT_STICK_ANG_LEFT (right_stick_angle[chan] >= 210 && right_stick_angle[chan] <= 330)
/*
//Button values reference//
WPAD_BUTTON_2 0x0001
PAD_BUTTON_LEFT 0x0001
WPAD_BUTTON_1 0x0002
PAD_BUTTON_RIGHT 0x0002
WPAD_BUTTON_B 0x0004
PAD_BUTTON_DOWN 0x0004
WPAD_BUTTON_A 0x0008
PAD_BUTTON_UP 0x0008
WPAD_BUTTON_MINUS 0x0010
PAD_TRIGGER_Z 0x0010
PAD_TRIGGER_R 0x0020
PAD_TRIGGER_L 0x0040
WPAD_BUTTON_HOME 0x0080
WPAD_BUTTON_LEFT 0x0100
PAD_BUTTON_A 0x0100
WPAD_BUTTON_RIGHT 0x0200
PAD_BUTTON_B 0x0200
WPAD_BUTTON_DOWN 0x0400
PAD_BUTTON_X 0x0400
WPAD_BUTTON_UP 0x0800
PAD_BUTTON_Y 0x0800
WPAD_BUTTON_PLUS 0x1000
PAD_BUTTON_MENU 0x1000
PAD_BUTTON_START 0x1000
WPAD_NUNCHUK_BUTTON_Z (0x0001<<16)
WPAD_CLASSIC_BUTTON_UP (0x0001<<16)
WPAD_GUITAR_HERO_3_BUTTON_STRUM_UP (0x0001<<16)
WPAD_NUNCHUK_BUTTON_C (0x0002<<16)
WPAD_CLASSIC_BUTTON_LEFT (0x0002<<16)
WPAD_CLASSIC_BUTTON_ZR (0x0004<<16)
WPAD_CLASSIC_BUTTON_X (0x0008<<16)
WPAD_GUITAR_HERO_3_BUTTON_YELLOW (0x0008<<16)
WPAD_CLASSIC_BUTTON_A (0x0010<<16)
WPAD_GUITAR_HERO_3_BUTTON_GREEN (0x0010<<16)
WPAD_CLASSIC_BUTTON_Y (0x0020<<16)
WPAD_GUITAR_HERO_3_BUTTON_BLUE (0x0020<<16)
WPAD_CLASSIC_BUTTON_B (0x0040<<16)
WPAD_GUITAR_HERO_3_BUTTON_RED (0x0040<<16)
WPAD_CLASSIC_BUTTON_ZL (0x0080<<16)
WPAD_GUITAR_HERO_3_BUTTON_ORANGE (0x0080<<16)
WPAD_CLASSIC_BUTTON_FULL_R (0x0200<<16)
WPAD_CLASSIC_BUTTON_PLUS (0x0400<<16)
WPAD_GUITAR_HERO_3_BUTTON_PLUS (0x0400<<16)
WPAD_CLASSIC_BUTTON_HOME (0x0800<<16)
WPAD_CLASSIC_BUTTON_MINUS (0x1000<<16)
WPAD_GUITAR_HERO_3_BUTTON_MINUS (0x1000<<16)
WPAD_CLASSIC_BUTTON_FULL_L (0x2000<<16)
WPAD_CLASSIC_BUTTON_DOWN (0x4000<<16)
WPAD_GUITAR_HERO_3_BUTTON_STRUM_DOWN (0x4000<<16)
WPAD_CLASSIC_BUTTON_RIGHT (0x8000<<16)
*/

View File

@ -580,7 +580,7 @@ private:
u8 pointerhidedelay[WPAD_MAX_WIIMOTES];
u16 stickPointer_x[WPAD_MAX_WIIMOTES];
u16 stickPointer_y[WPAD_MAX_WIIMOTES];
u8 m_wpadLeftDelay;
u8 m_wpadDownDelay;
u8 m_wpadRightDelay;
@ -594,9 +594,13 @@ private:
u8 m_padUpDelay;
u8 m_padADelay;
//u8 m_padBDelay;
u32 wii_btnsPressed;
u32 wii_btnsHeld;
u32 wii_btnsPressed[WPAD_MAX_WIIMOTES];
u32 wii_btnsHeld[WPAD_MAX_WIIMOTES];
bool wBtn_Pressed(int btn, u8 ext);
bool wBtn_PressedChan(int btn, u8 ext, int &chan);
bool wBtn_Held(int btn, u8 ext);
bool wBtn_HeldChan(int btn, u8 ext, int &chan);
u32 gc_btnsPressed;
u32 gc_btnsHeld;
@ -632,7 +636,7 @@ private:
bool wRoll_Left(void);
bool wRoll_Right(void);
bool wii_btnRepeat(s64 btn);
bool wii_btnRepeat(u8 btn);
bool gc_btnRepeat(s64 btn);
bool WPadIR_Valid(int chan);

View File

@ -125,28 +125,54 @@ void CMenu::ScanInput()
void CMenu::ButtonsPressed()
{
wii_btnsPressed = 0;
gc_btnsPressed = 0;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{
wii_btnsPressed |= WPAD_ButtonsDown(chan);
wii_btnsPressed[chan] = WPAD_ButtonsDown(chan);
gc_btnsPressed |= PAD_ButtonsDown(chan);
}
}
void CMenu::ButtonsHeld()
{
wii_btnsHeld = 0;
gc_btnsHeld = 0;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{
wii_btnsHeld |= WPAD_ButtonsHeld(chan);
wii_btnsHeld[chan] = WPAD_ButtonsHeld(chan);
gc_btnsHeld |= PAD_ButtonsHeld(chan);
}
}
bool CMenu::wBtn_PressedChan(int btn, u8 ext, int &chan)
{
return ((wii_btnsPressed[chan] & btn) && (ext == WPAD_EXP_NONE || ext == wd[chan]->exp.type));
}
bool CMenu::wBtn_Pressed(int btn, u8 ext)
{
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{
if(wBtn_PressedChan(btn, ext, chan))
return true;
}
return false;
}
bool CMenu::wBtn_HeldChan(int btn, u8 ext, int &chan)
{
return ((wii_btnsHeld[chan] & btn) && (ext == WPAD_EXP_NONE || ext == wd[chan]->exp.type));
}
bool CMenu::wBtn_Held(int btn, u8 ext)
{
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{
if(wBtn_HeldChan(btn, ext, chan))
return true;
}
return false;
}
void CMenu::LeftStick()
{
u8 speed = 0, pSpeed = 0;
@ -190,7 +216,8 @@ void CMenu::LeftStick()
}
else
{
if(pointerhidedelay[chan] > 0 && !wii_btnsHeld && !wii_btnsPressed && !gc_btnsHeld && !gc_btnsPressed)
if(pointerhidedelay[chan] > 0 && !wii_btnsHeld[chan] && !wii_btnsPressed[chan]
&& !gc_btnsHeld && !gc_btnsPressed)
pointerhidedelay[chan]--;
}
if (pointerhidedelay[chan] == 0)
@ -221,13 +248,13 @@ bool CMenu::WPadIR_ANY(void)
return (wd[0]->ir.valid || wd[1]->ir.valid || wd[2]->ir.valid || wd[3]->ir.valid);
}
bool CMenu::wii_btnRepeat(s64 btn)
bool CMenu::wii_btnRepeat(u8 btn)
{
bool b = false;
if(btn == WBTN_UP)
{
if(wii_btnsHeld & WBTN_UP)
if(WBTN_UP_HELD)
{
if(m_wpadUpDelay == 0 || m_wpadUpDelay >= g_repeatDelay)
b = true;
@ -239,7 +266,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
}
else if(btn == WBTN_RIGHT)
{
if(wii_btnsHeld & WBTN_RIGHT)
if(WBTN_RIGHT_HELD)
{
if(m_wpadRightDelay == 0 || m_wpadRightDelay >= g_repeatDelay)
b = true;
@ -251,7 +278,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
}
else if(btn == WBTN_DOWN)
{
if(wii_btnsHeld & WBTN_DOWN)
if(WBTN_DOWN_HELD)
{
if(m_wpadDownDelay == 0 || m_wpadDownDelay >= g_repeatDelay)
b = true;
@ -263,7 +290,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
}
else if(btn == WBTN_LEFT)
{
if(wii_btnsHeld & WBTN_LEFT)
if(WBTN_LEFT_HELD)
{
if(m_wpadLeftDelay == 0 || m_wpadLeftDelay >= g_repeatDelay)
b = true;
@ -275,7 +302,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
}
else if(btn == WBTN_A)
{
if(wii_btnsHeld & WBTN_A)
if(WBTN_A_HELD)
{
m_btnMgr.noClick(true);
if(m_wpadADelay == 0 || m_wpadADelay >= g_repeatDelay)
@ -474,7 +501,8 @@ void CMenu::_getGrabStatus(void)
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{
wGrabStatus[chan] = WBTN_B & WPAD_ButtonsHeld(chan);
wGrabStatus[chan] = (wBtn_HeldChan(WPAD_BUTTON_B, WPAD_EXP_NONE, chan)
|| wBtn_HeldChan(WPAD_CLASSIC_BUTTON_B, WPAD_EXP_CLASSIC, chan));
gGrabStatus[chan] = GBTN_B & PAD_ButtonsHeld(chan);
if((wGrabStatus[chan] && wX[chan] > 0 && wd[chan]->ir.x < wX[chan] - 30)
|| (gGrabStatus[chan] && gX[chan] > 0 && stickPointer_x[chan] < gX[chan]))