-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_UP_PRESSED (wBtn_Pressed(WPAD_BUTTON_UP, WPAD_EXP_NONE) \
#define WBTN_DOWN (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN) || wBtn_Pressed(WPAD_CLASSIC_BUTTON_UP, WPAD_EXP_CLASSIC))
#define WBTN_LEFT (WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT) #define WBTN_DOWN_PRESSED (wBtn_Pressed(WPAD_BUTTON_DOWN, WPAD_EXP_NONE) \
#define WBTN_RIGHT (WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT) || wBtn_Pressed(WPAD_CLASSIC_BUTTON_DOWN, WPAD_EXP_CLASSIC))
#define WBTN_HOME (WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME) #define WBTN_LEFT_PRESSED (wBtn_Pressed(WPAD_BUTTON_LEFT, WPAD_EXP_NONE) \
#define WBTN_MINUS (WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_FULL_L) || wBtn_Pressed(WPAD_CLASSIC_BUTTON_LEFT, WPAD_EXP_CLASSIC))
#define WBTN_PLUS (WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_FULL_R) #define WBTN_RIGHT_PRESSED (wBtn_Pressed(WPAD_BUTTON_RIGHT, WPAD_EXP_NONE) \
#define WBTN_Z (WPAD_NUNCHUK_BUTTON_Z | WPAD_CLASSIC_BUTTON_ZR) || wBtn_Pressed(WPAD_CLASSIC_BUTTON_RIGHT, WPAD_EXP_CLASSIC))
#define WBTN_A (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A) #define WBTN_HOME_PRESSED (wBtn_Pressed(WPAD_BUTTON_HOME, WPAD_EXP_NONE) \
#define WBTN_B (WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B) || wBtn_Pressed(WPAD_CLASSIC_BUTTON_HOME, WPAD_EXP_CLASSIC))
#define WBTN_1 (WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y) #define WBTN_MINUS_PRESSED (wBtn_Pressed(WPAD_BUTTON_MINUS, WPAD_EXP_NONE) \
#define WBTN_2 (WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X) || 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_UP_HELD (wBtn_Held(WPAD_BUTTON_UP, WPAD_EXP_NONE) \
#define WBTN_DOWN_PRESSED (wii_btnsPressed & WBTN_DOWN) || wBtn_Held(WPAD_CLASSIC_BUTTON_UP, WPAD_EXP_CLASSIC))
#define WBTN_LEFT_PRESSED (wii_btnsPressed & WBTN_LEFT) #define WBTN_DOWN_HELD (wBtn_Held(WPAD_BUTTON_DOWN, WPAD_EXP_NONE) \
#define WBTN_RIGHT_PRESSED (wii_btnsPressed & WBTN_RIGHT) || wBtn_Held(WPAD_CLASSIC_BUTTON_DOWN, WPAD_EXP_CLASSIC))
#define WBTN_HOME_PRESSED (wii_btnsPressed & WBTN_HOME) #define WBTN_LEFT_HELD (wBtn_Held(WPAD_BUTTON_LEFT, WPAD_EXP_NONE) \
#define WBTN_MINUS_PRESSED (wii_btnsPressed & WBTN_MINUS) || wBtn_Held(WPAD_CLASSIC_BUTTON_LEFT, WPAD_EXP_CLASSIC))
#define WBTN_PLUS_PRESSED (wii_btnsPressed & WBTN_PLUS) #define WBTN_RIGHT_HELD (wBtn_Held(WPAD_BUTTON_RIGHT, WPAD_EXP_NONE) \
#define WBTN_Z_PRESSED (wii_btnsPressed & WBTN_Z) || wBtn_Held(WPAD_CLASSIC_BUTTON_RIGHT, WPAD_EXP_CLASSIC))
#define WBTN_A_PRESSED (wii_btnsPressed & WBTN_A) #define WBTN_HOME_HELD (wBtn_Held(WPAD_BUTTON_HOME, WPAD_EXP_NONE) \
#define WBTN_B_PRESSED (wii_btnsPressed & WBTN_B) || wBtn_Held(WPAD_CLASSIC_BUTTON_HOME, WPAD_EXP_CLASSIC))
#define WBTN_1_PRESSED (wii_btnsPressed & WBTN_1) #define WBTN_MINUS_HELD (wBtn_Held(WPAD_BUTTON_MINUS, WPAD_EXP_NONE) \
#define WBTN_2_PRESSED (wii_btnsPressed & WBTN_2) || wBtn_Held(WPAD_CLASSIC_BUTTON_FULL_L, WPAD_EXP_CLASSIC))
#define WBTN_PLUS_HELD (wBtn_Held(WPAD_BUTTON_PLUS, WPAD_EXP_NONE) \
#define WBTN_UP_HELD (wii_btnsHeld & WBTN_UP) || wBtn_Held(WPAD_CLASSIC_BUTTON_FULL_R, WPAD_EXP_CLASSIC))
#define WBTN_DOWN_HELD (wii_btnsHeld & WBTN_DOWN) #define WBTN_A_HELD (wBtn_Held(WPAD_BUTTON_A, WPAD_EXP_NONE) \
#define WBTN_LEFT_HELD (wii_btnsHeld & WBTN_LEFT) || wBtn_Held(WPAD_CLASSIC_BUTTON_A, WPAD_EXP_CLASSIC))
#define WBTN_RIGHT_HELD (wii_btnsHeld & WBTN_RIGHT) #define WBTN_B_HELD (wBtn_Held(WPAD_BUTTON_B, WPAD_EXP_NONE) \
#define WBTN_HOME_HELD (wii_btnsHeld & WBTN_HOME) || wBtn_Held(WPAD_CLASSIC_BUTTON_B, WPAD_EXP_CLASSIC))
#define WBTN_MINUS_HELD (wii_btnsHeld & WBTN_MINUS) #define WBTN_1_HELD (wBtn_Held(WPAD_BUTTON_1, WPAD_EXP_NONE) \
#define WBTN_PLUS_HELD (wii_btnsHeld & WBTN_PLUS) || wBtn_Held(WPAD_CLASSIC_BUTTON_Y, WPAD_EXP_CLASSIC))
#define WBTN_A_HELD (wii_btnsHeld & WBTN_A) #define WBTN_2_HELD (wBtn_Held(WPAD_BUTTON_2, WPAD_EXP_NONE) \
#define WBTN_B_HELD (wii_btnsHeld & WBTN_B) || wBtn_Held(WPAD_CLASSIC_BUTTON_X, WPAD_EXP_CLASSIC))
#define WBTN_1_HELD (wii_btnsHeld & WBTN_1)
#define WBTN_2_HELD (wii_btnsHeld & WBTN_2)
#define GBTN_UP (PAD_BUTTON_UP) #define GBTN_UP (PAD_BUTTON_UP)
#define GBTN_DOWN (PAD_BUTTON_DOWN) #define GBTN_DOWN (PAD_BUTTON_DOWN)
@ -99,17 +109,20 @@
#define BTN_1_HELD (WBTN_1_HELD || GBTN_1_HELD) #define BTN_1_HELD (WBTN_1_HELD || GBTN_1_HELD)
#define BTN_2_HELD (WBTN_2_HELD || GBTN_2_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_UP_REPEAT (wii_btnRepeat(WBTN_UP) || gc_btnRepeat(GBTN_UP))
#define BTN_DOWN_REPEAT (wii_btnRepeat(WBTN_DOWN) || gc_btnRepeat(GBTN_DOWN)) #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_LEFT_REPEAT (wii_btnRepeat(WBTN_LEFT) || gc_btnRepeat(GBTN_LEFT))
#define BTN_RIGHT_REPEAT (wii_btnRepeat(WBTN_RIGHT) || gc_btnRepeat(GBTN_RIGHT)) #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_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_UP lStick_Up()
#define LEFT_STICK_DOWN lStick_Down() #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_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_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) #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

@ -595,8 +595,12 @@ private:
u8 m_padADelay; u8 m_padADelay;
//u8 m_padBDelay; //u8 m_padBDelay;
u32 wii_btnsPressed; u32 wii_btnsPressed[WPAD_MAX_WIIMOTES];
u32 wii_btnsHeld; 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_btnsPressed;
u32 gc_btnsHeld; u32 gc_btnsHeld;
@ -632,7 +636,7 @@ private:
bool wRoll_Left(void); bool wRoll_Left(void);
bool wRoll_Right(void); bool wRoll_Right(void);
bool wii_btnRepeat(s64 btn); bool wii_btnRepeat(u8 btn);
bool gc_btnRepeat(s64 btn); bool gc_btnRepeat(s64 btn);
bool WPadIR_Valid(int chan); bool WPadIR_Valid(int chan);

View File

@ -125,28 +125,54 @@ void CMenu::ScanInput()
void CMenu::ButtonsPressed() void CMenu::ButtonsPressed()
{ {
wii_btnsPressed = 0;
gc_btnsPressed = 0; gc_btnsPressed = 0;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) 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); gc_btnsPressed |= PAD_ButtonsDown(chan);
} }
} }
void CMenu::ButtonsHeld() void CMenu::ButtonsHeld()
{ {
wii_btnsHeld = 0;
gc_btnsHeld = 0; gc_btnsHeld = 0;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) 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); 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() void CMenu::LeftStick()
{ {
u8 speed = 0, pSpeed = 0; u8 speed = 0, pSpeed = 0;
@ -190,7 +216,8 @@ void CMenu::LeftStick()
} }
else 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]--; pointerhidedelay[chan]--;
} }
if (pointerhidedelay[chan] == 0) 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); 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; bool b = false;
if(btn == WBTN_UP) if(btn == WBTN_UP)
{ {
if(wii_btnsHeld & WBTN_UP) if(WBTN_UP_HELD)
{ {
if(m_wpadUpDelay == 0 || m_wpadUpDelay >= g_repeatDelay) if(m_wpadUpDelay == 0 || m_wpadUpDelay >= g_repeatDelay)
b = true; b = true;
@ -239,7 +266,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
} }
else if(btn == WBTN_RIGHT) else if(btn == WBTN_RIGHT)
{ {
if(wii_btnsHeld & WBTN_RIGHT) if(WBTN_RIGHT_HELD)
{ {
if(m_wpadRightDelay == 0 || m_wpadRightDelay >= g_repeatDelay) if(m_wpadRightDelay == 0 || m_wpadRightDelay >= g_repeatDelay)
b = true; b = true;
@ -251,7 +278,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
} }
else if(btn == WBTN_DOWN) else if(btn == WBTN_DOWN)
{ {
if(wii_btnsHeld & WBTN_DOWN) if(WBTN_DOWN_HELD)
{ {
if(m_wpadDownDelay == 0 || m_wpadDownDelay >= g_repeatDelay) if(m_wpadDownDelay == 0 || m_wpadDownDelay >= g_repeatDelay)
b = true; b = true;
@ -263,7 +290,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
} }
else if(btn == WBTN_LEFT) else if(btn == WBTN_LEFT)
{ {
if(wii_btnsHeld & WBTN_LEFT) if(WBTN_LEFT_HELD)
{ {
if(m_wpadLeftDelay == 0 || m_wpadLeftDelay >= g_repeatDelay) if(m_wpadLeftDelay == 0 || m_wpadLeftDelay >= g_repeatDelay)
b = true; b = true;
@ -275,7 +302,7 @@ bool CMenu::wii_btnRepeat(s64 btn)
} }
else if(btn == WBTN_A) else if(btn == WBTN_A)
{ {
if(wii_btnsHeld & WBTN_A) if(WBTN_A_HELD)
{ {
m_btnMgr.noClick(true); m_btnMgr.noClick(true);
if(m_wpadADelay == 0 || m_wpadADelay >= g_repeatDelay) 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--) 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); gGrabStatus[chan] = GBTN_B & PAD_ButtonsHeld(chan);
if((wGrabStatus[chan] && wX[chan] > 0 && wd[chan]->ir.x < wX[chan] - 30) if((wGrabStatus[chan] && wX[chan] > 0 && wd[chan]->ir.x < wX[chan] - 30)
|| (gGrabStatus[chan] && gX[chan] > 0 && stickPointer_x[chan] < gX[chan])) || (gGrabStatus[chan] && gX[chan] > 0 && stickPointer_x[chan] < gX[chan]))