usbloadergx/source/GUI/gui_trigger.cpp

221 lines
4.3 KiB
C++
Raw Normal View History

/****************************************************************************
* 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
*/
2010-09-24 02:48:03 +02:00
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
*/
2010-09-24 02:48:03 +02:00
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
*/
2010-09-24 02:48:03 +02:00
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
***************************************************************************/
2010-09-24 02:48:03 +02:00
s8 GuiTrigger::WPAD_Stick(u8 right, int axis)
{
float mag = 0.0;
float ang = 0.0;
switch ( wpad.exp.type )
{
default:
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;
}
}
/* 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;
2019-08-26 19:53:21 +02:00
if(wpad.exp.type == WPAD_EXP_CLASSIC)
* Fixed missing games in "GameCube Delete menu" if the "GameCube Source" setting has USB priority. * Fixed Playlog writing when using Hermes cIOS v4 (untested) (Requires AHB access). * Fixed EmuNAND when using cIOS revision 65535 (issue 2225) * Added Nintendont support: 1. Select Nintendont's boot.dol folder in userpath settings. 2. Set the "GameCube Mode" setting to Nintendont. 3. Nintendont share some of DIOS MIOS (Lite) settings. * Added sections in the Loader settings (Wii/gamecube/Devolution/DIOS MIOS/Nintendont). * Updated the GameCube game settings to display only the selected GameCube mode related settings. * Updated some menus to support more controller's input: - Prevent GC/CC X and Y buttons to change row number in Wall layout (use d-pad up/down only) - Added GC/CC support to carousel's arrow button - Added GC/CC support to Wall/Carousel continuous scroll (+/- on CC, L/R on GC) - Added GC support L/R and Start buttons in the settings/homebrew browser. - Added D-pad support in listing windows if not pointing the screen. The cursor now moves with the selection (not very good with high Overscan value) (issue 2093) * Changed the StartupProcess to speed up launch time by using AHB access to read config files. IOS argument in meta.xml has priority over AHB detection. * Added IOS58 + AHB support for launching the loader without cIOS (Wii games and EmuNAND still require cIOS). * Added a Loader's IOS setting (now Loader and Games use two separate settings: loader can use 58 and games 249). * Added LibruntimeIOSPatch to patch IOS58 and Hermes v4 to get ISFS access and enable Banner mode, Channel's title and System font with these IOSes (Requires AHB access) * Added a delete prompt if downloaded cheat file is empty. * Force all launched homebrew to reload to IOS58 if available. * Changed Gecko.c to send logs to wifigecko too. * Changed wifigecko IP to send logs to all IP 192.168.0.x * Updated French translation.
2013-10-01 23:13:08 +02:00
wiibtn |= WPAD_CLASSIC_BUTTON_LEFT;
if( ((wpad.btns_d | wpad.btns_h) & wiibtn)
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_LEFT))
{
2019-08-26 19:53:21 +02:00
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;
2019-08-26 19:53:21 +02:00
if(wpad.exp.type == WPAD_EXP_CLASSIC)
* Fixed missing games in "GameCube Delete menu" if the "GameCube Source" setting has USB priority. * Fixed Playlog writing when using Hermes cIOS v4 (untested) (Requires AHB access). * Fixed EmuNAND when using cIOS revision 65535 (issue 2225) * Added Nintendont support: 1. Select Nintendont's boot.dol folder in userpath settings. 2. Set the "GameCube Mode" setting to Nintendont. 3. Nintendont share some of DIOS MIOS (Lite) settings. * Added sections in the Loader settings (Wii/gamecube/Devolution/DIOS MIOS/Nintendont). * Updated the GameCube game settings to display only the selected GameCube mode related settings. * Updated some menus to support more controller's input: - Prevent GC/CC X and Y buttons to change row number in Wall layout (use d-pad up/down only) - Added GC/CC support to carousel's arrow button - Added GC/CC support to Wall/Carousel continuous scroll (+/- on CC, L/R on GC) - Added GC support L/R and Start buttons in the settings/homebrew browser. - Added D-pad support in listing windows if not pointing the screen. The cursor now moves with the selection (not very good with high Overscan value) (issue 2093) * Changed the StartupProcess to speed up launch time by using AHB access to read config files. IOS argument in meta.xml has priority over AHB detection. * Added IOS58 + AHB support for launching the loader without cIOS (Wii games and EmuNAND still require cIOS). * Added a Loader's IOS setting (now Loader and Games use two separate settings: loader can use 58 and games 249). * Added LibruntimeIOSPatch to patch IOS58 and Hermes v4 to get ISFS access and enable Banner mode, Channel's title and System font with these IOSes (Requires AHB access) * Added a delete prompt if downloaded cheat file is empty. * Force all launched homebrew to reload to IOS58 if available. * Changed Gecko.c to send logs to wifigecko too. * Changed wifigecko IP to send logs to all IP 192.168.0.x * Updated French translation.
2013-10-01 23:13:08 +02:00
wiibtn |= WPAD_CLASSIC_BUTTON_RIGHT;
if( ((wpad.btns_d | wpad.btns_h) & wiibtn)
2019-08-26 19:53:21 +02:00
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_RIGHT))
{
if( (wpad.btns_d & wiibtn)
2019-08-26 19:53:21 +02:00
|| (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;
2019-08-26 19:53:21 +02:00
if(wpad.exp.type == WPAD_EXP_CLASSIC)
* Fixed missing games in "GameCube Delete menu" if the "GameCube Source" setting has USB priority. * Fixed Playlog writing when using Hermes cIOS v4 (untested) (Requires AHB access). * Fixed EmuNAND when using cIOS revision 65535 (issue 2225) * Added Nintendont support: 1. Select Nintendont's boot.dol folder in userpath settings. 2. Set the "GameCube Mode" setting to Nintendont. 3. Nintendont share some of DIOS MIOS (Lite) settings. * Added sections in the Loader settings (Wii/gamecube/Devolution/DIOS MIOS/Nintendont). * Updated the GameCube game settings to display only the selected GameCube mode related settings. * Updated some menus to support more controller's input: - Prevent GC/CC X and Y buttons to change row number in Wall layout (use d-pad up/down only) - Added GC/CC support to carousel's arrow button - Added GC/CC support to Wall/Carousel continuous scroll (+/- on CC, L/R on GC) - Added GC support L/R and Start buttons in the settings/homebrew browser. - Added D-pad support in listing windows if not pointing the screen. The cursor now moves with the selection (not very good with high Overscan value) (issue 2093) * Changed the StartupProcess to speed up launch time by using AHB access to read config files. IOS argument in meta.xml has priority over AHB detection. * Added IOS58 + AHB support for launching the loader without cIOS (Wii games and EmuNAND still require cIOS). * Added a Loader's IOS setting (now Loader and Games use two separate settings: loader can use 58 and games 249). * Added LibruntimeIOSPatch to patch IOS58 and Hermes v4 to get ISFS access and enable Banner mode, Channel's title and System font with these IOSes (Requires AHB access) * Added a delete prompt if downloaded cheat file is empty. * Force all launched homebrew to reload to IOS58 if available. * Changed Gecko.c to send logs to wifigecko too. * Changed wifigecko IP to send logs to all IP 192.168.0.x * Updated French translation.
2013-10-01 23:13:08 +02:00
wiibtn |= WPAD_CLASSIC_BUTTON_UP;
if( ((wpad.btns_d | wpad.btns_h) & wiibtn)
2019-08-26 19:53:21 +02:00
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_UP))
{
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;
2019-08-26 19:53:21 +02:00
if(wpad.exp.type == WPAD_EXP_CLASSIC)
* Fixed missing games in "GameCube Delete menu" if the "GameCube Source" setting has USB priority. * Fixed Playlog writing when using Hermes cIOS v4 (untested) (Requires AHB access). * Fixed EmuNAND when using cIOS revision 65535 (issue 2225) * Added Nintendont support: 1. Select Nintendont's boot.dol folder in userpath settings. 2. Set the "GameCube Mode" setting to Nintendont. 3. Nintendont share some of DIOS MIOS (Lite) settings. * Added sections in the Loader settings (Wii/gamecube/Devolution/DIOS MIOS/Nintendont). * Updated the GameCube game settings to display only the selected GameCube mode related settings. * Updated some menus to support more controller's input: - Prevent GC/CC X and Y buttons to change row number in Wall layout (use d-pad up/down only) - Added GC/CC support to carousel's arrow button - Added GC/CC support to Wall/Carousel continuous scroll (+/- on CC, L/R on GC) - Added GC support L/R and Start buttons in the settings/homebrew browser. - Added D-pad support in listing windows if not pointing the screen. The cursor now moves with the selection (not very good with high Overscan value) (issue 2093) * Changed the StartupProcess to speed up launch time by using AHB access to read config files. IOS argument in meta.xml has priority over AHB detection. * Added IOS58 + AHB support for launching the loader without cIOS (Wii games and EmuNAND still require cIOS). * Added a Loader's IOS setting (now Loader and Games use two separate settings: loader can use 58 and games 249). * Added LibruntimeIOSPatch to patch IOS58 and Hermes v4 to get ISFS access and enable Banner mode, Channel's title and System font with these IOSes (Requires AHB access) * Added a delete prompt if downloaded cheat file is empty. * Force all launched homebrew to reload to IOS58 if available. * Changed Gecko.c to send logs to wifigecko too. * Changed wifigecko IP to send logs to all IP 192.168.0.x * Updated French translation.
2013-10-01 23:13:08 +02:00
wiibtn |= WPAD_CLASSIC_BUTTON_DOWN;
if( ((wpad.btns_d | wpad.btns_h) & wiibtn)
2019-08-26 19:53:21 +02:00
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_DOWN))
{
if( (wpad.btns_d & wiibtn)
2019-08-26 19:53:21 +02:00
|| (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;
}