mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-05 11:05:06 +01:00
a66a30a771
*added support to control screen pointer with gc pad or classic controller. you are always able to control as long as the corresponding wii control does not point to the screen (e.g. wiimote 1 not pointing to screen -> gcpad/classic controller 1 can control pointer 1). a speed factor is added to the gui option. need feedback about a proper default value, currently 15% (only tested gc pad on dolphin-emu) *fix reinit of cheatcount on download of new file *moved installation window to be on top of main window *added game installation cancel *added nand extract cancel *added back extract of save feature for a real nand channels *added auto position of progress window messages in vertical direction depending of how many are used at the same time
222 lines
4.6 KiB
C++
222 lines
4.6 KiB
C++
/****************************************************************************
|
|
* libwiigui
|
|
*
|
|
* Tantric 2009
|
|
*
|
|
* gui_trigger.cpp
|
|
*
|
|
* GUI class definitions
|
|
***************************************************************************/
|
|
|
|
#include "gui.h"
|
|
|
|
static int scrollDelay = 0;
|
|
|
|
/**
|
|
* Constructor for the GuiTrigger class.
|
|
*/
|
|
GuiTrigger::GuiTrigger()
|
|
{
|
|
chan = -1;
|
|
memset(&wpad, 0, sizeof(WPADData));
|
|
memset(&pad, 0, sizeof(PADData));
|
|
}
|
|
|
|
/**
|
|
* Destructor for the GuiTrigger class.
|
|
*/
|
|
GuiTrigger::~GuiTrigger()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Sets a simple trigger. Requires:
|
|
* - Element is selected
|
|
* - Trigger button is pressed
|
|
*/
|
|
void GuiTrigger::SetSimpleTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
|
|
{
|
|
type = TRIGGER_SIMPLE;
|
|
chan = ch;
|
|
wpad.btns_d = wiibtns;
|
|
pad.btns_d = gcbtns;
|
|
}
|
|
|
|
/**
|
|
* Sets a held trigger. Requires:
|
|
* - Element is selected
|
|
* - Trigger button is pressed and held
|
|
*/
|
|
void GuiTrigger::SetHeldTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
|
|
{
|
|
type = TRIGGER_HELD;
|
|
chan = ch;
|
|
wpad.btns_h = wiibtns;
|
|
pad.btns_h = gcbtns;
|
|
}
|
|
|
|
/**
|
|
* Sets a button trigger. Requires:
|
|
* - Trigger button is pressed
|
|
*/
|
|
void GuiTrigger::SetButtonOnlyTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
|
|
{
|
|
type = TRIGGER_BUTTON_ONLY;
|
|
chan = ch;
|
|
wpad.btns_d = wiibtns;
|
|
pad.btns_d = gcbtns;
|
|
}
|
|
|
|
/****************************************************************************
|
|
* WPAD_Stick
|
|
*
|
|
* Get X/Y value from Wii Joystick (classic, nunchuk) input
|
|
***************************************************************************/
|
|
|
|
s8 GuiTrigger::WPAD_Stick(u8 right, int axis)
|
|
{
|
|
float mag = 0.0;
|
|
float ang = 0.0;
|
|
|
|
switch ( wpad.exp.type )
|
|
{
|
|
case WPAD_EXP_NUNCHUK:
|
|
case WPAD_EXP_GUITARHERO3:
|
|
{
|
|
if ( right == 0 )
|
|
{
|
|
mag = wpad.exp.nunchuk.js.mag;
|
|
ang = wpad.exp.nunchuk.js.ang;
|
|
}
|
|
break;
|
|
}
|
|
case WPAD_EXP_CLASSIC:
|
|
{
|
|
if ( right == 0 )
|
|
{
|
|
mag = wpad.exp.classic.ljs.mag;
|
|
ang = wpad.exp.classic.ljs.ang;
|
|
}
|
|
else
|
|
{
|
|
mag = wpad.exp.classic.rjs.mag;
|
|
ang = wpad.exp.classic.rjs.ang;
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
/* calculate x/y value (angle need to be converted into radian) */
|
|
if ( mag > 1.0 )
|
|
mag = 1.0;
|
|
else if ( mag < -1.0 )
|
|
mag = -1.0;
|
|
|
|
float val;
|
|
|
|
if ( axis == 0 ) // x-axis
|
|
val = (float) (mag * sin( (PI * ang) / 180.0f ));
|
|
else // y-axis
|
|
val = (float) (mag * cos( (PI * ang) / 180.0f ));
|
|
|
|
return ( s8 )( val * 128.0f );
|
|
}
|
|
|
|
bool GuiTrigger::Left()
|
|
{
|
|
u32 wiibtn = WPAD_BUTTON_LEFT;
|
|
if(wpad.exp.type == WPAD_EXP_CLASSIC)
|
|
wiibtn = WPAD_CLASSIC_BUTTON_LEFT;
|
|
|
|
if ( ((wpad.btns_d | wpad.btns_h) & wiibtn)
|
|
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_LEFT)
|
|
|| (wpad.exp.type == WPAD_EXP_NUNCHUK && WPAD_Stick(0, 0) < -PADCAL))
|
|
{
|
|
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_LEFT))
|
|
{
|
|
scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay.
|
|
return true;
|
|
}
|
|
else if (--scrollDelay <= 0)
|
|
{
|
|
scrollDelay = SCROLL_LOOP_DELAY;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool GuiTrigger::Right()
|
|
{
|
|
u32 wiibtn = WPAD_BUTTON_RIGHT;
|
|
if(wpad.exp.type == WPAD_EXP_CLASSIC)
|
|
wiibtn = WPAD_CLASSIC_BUTTON_RIGHT;
|
|
|
|
if ( ((wpad.btns_d | wpad.btns_h) & wiibtn)
|
|
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_RIGHT)
|
|
|| (wpad.exp.type == WPAD_EXP_NUNCHUK && WPAD_Stick(0, 0) > PADCAL))
|
|
{
|
|
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_RIGHT))
|
|
{
|
|
scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay.
|
|
return true;
|
|
}
|
|
else if (--scrollDelay <= 0)
|
|
{
|
|
scrollDelay = SCROLL_LOOP_DELAY;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool GuiTrigger::Up()
|
|
{
|
|
u32 wiibtn = WPAD_BUTTON_UP;
|
|
if(wpad.exp.type == WPAD_EXP_CLASSIC)
|
|
wiibtn = WPAD_CLASSIC_BUTTON_UP;
|
|
|
|
if ( ((wpad.btns_d | wpad.btns_h) & wiibtn)
|
|
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_UP)
|
|
|| (wpad.exp.type == WPAD_EXP_NUNCHUK && WPAD_Stick(0, 1) > PADCAL))
|
|
{
|
|
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_UP))
|
|
{
|
|
scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay.
|
|
return true;
|
|
}
|
|
else if (--scrollDelay <= 0)
|
|
{
|
|
scrollDelay = SCROLL_LOOP_DELAY;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool GuiTrigger::Down()
|
|
{
|
|
u32 wiibtn = WPAD_BUTTON_DOWN;
|
|
if(wpad.exp.type == WPAD_EXP_CLASSIC)
|
|
wiibtn = WPAD_CLASSIC_BUTTON_DOWN;
|
|
|
|
if ( ((wpad.btns_d | wpad.btns_h) & wiibtn)
|
|
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_DOWN)
|
|
|| (wpad.exp.type == WPAD_EXP_NUNCHUK && WPAD_Stick(0, 1) < -PADCAL))
|
|
{
|
|
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_DOWN))
|
|
{
|
|
scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay.
|
|
return true;
|
|
}
|
|
else if (--scrollDelay <= 0)
|
|
{
|
|
scrollDelay = SCROLL_LOOP_DELAY;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|