*added nunchuck to control of virtual screen pointer and removed it from control of list up/down scrolling and carousel

*fixed crash with 3D cover grabbing (old pointer method was still used)
*some clean up
This commit is contained in:
strtoul 2011-12-29 08:26:49 +00:00
parent d9be1719be
commit fffd644e67
8 changed files with 54 additions and 123 deletions

View File

@ -2,8 +2,8 @@
<app version="1">
<name> USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>2.3 r1139</version>
<release_date>201112281612</release_date>
<version>2.3 r1141</version>
<release_date>201112290822</release_date>
<!-- // remove this line to enable arguments
<arguments>
<arg>--ios=250</arg>

View File

@ -25,8 +25,7 @@
#include "BoxMesh.hpp"
#include "settings/CSettings.h"
#include "themes/CTheme.h"
extern GuiImageData * pointer[4];
#include "menu.h"
BoxCover::BoxCover(GuiImageData * img, bool flat)
: GuiImage(img),
@ -56,15 +55,6 @@ BoxCover::BoxCover(GuiImageData * img, bool flat)
guLookAt(view, &camera, &up, &look);
guPerspective(projection, 8, 640.f/480.f, 1.0f, 300.0F);
//! Remove me later
for(int i = 0; i < 4; ++i)
{
char name[50];
snprintf(name, sizeof(name), "player%i_grab.png", i+1);
GrabPointers[i] = Resources::GetImageData(name);
NormalPointers[i] = pointer[i];
}
if(flatCover || !image)
{
defaultBox = Resources::GetImageData("nocoverFull.png");
@ -85,10 +75,12 @@ BoxCover::BoxCover(GuiImageData * img, bool flat)
BoxCover::~BoxCover()
{
delete defaultBox;
for(int i = 0; i < 4; ++i)
{
pointer[i] = NormalPointers[i];
delete GrabPointers[i];
char name[50];
snprintf(name, sizeof(name), "player%i_point.png", i+1);
pointer[i]->SetImage(name);
}
}
@ -106,8 +98,13 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
PosY += movePosY;
movePosX = 0.0f;
movePosY = 0.0f;
for(int i = 0; i < 4; ++i)
pointer[i] = GrabPointers[i];
if(moveChan >= 0 && moveChan < 3)
{
char name[50];
snprintf(name, sizeof(name), "player%i_grab.png", moveChan+1);
pointer[moveChan]->SetImage(name);
}
}
else
moveChan = -1;
@ -120,8 +117,12 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
}
else if(!(t->wpad.btns_h & WPAD_BUTTON_A) && moveChan == t->chan)
{
for(int i = 0; i < 4; ++i)
pointer[i] = NormalPointers[i];
if(moveChan >= 0 && moveChan < 3)
{
char name[50];
snprintf(name, sizeof(name), "player%i_point.png", moveChan+1);
pointer[moveChan]->SetImage(name);
}
}
if(t->wpad.btns_h & WPAD_BUTTON_UP)

View File

@ -72,8 +72,6 @@ class BoxCover : public GuiImage
Mtx44 projection;
GuiImageData boxBorder;
GuiImageData *defaultBox;
GuiImageData *NormalPointers[4];
GuiImageData *GrabPointers[4];
Mtx view;
GXTexObj coverTex;
GXTexObj boxBorderTex;

View File

@ -83,15 +83,8 @@ void WiiPointer::Draw(GuiTrigger *t)
lastActivity = 0;
}
int wpadX = 0;
int wpadY = 0;
// don't use it, if it's a nunchuck
if(t->wpad.exp.type != WPAD_EXP_NUNCHUK)
{
wpadX = t->WPAD_Stick(0, 0);
wpadY = t->WPAD_Stick(0, 1);
}
int wpadX = t->WPAD_Stick(0, 0);
int wpadY = t->WPAD_Stick(0, 1);
// Wii Extensions
// x-axis

View File

@ -80,6 +80,7 @@ s8 GuiTrigger::WPAD_Stick(u8 right, int axis)
switch ( wpad.exp.type )
{
default:
case WPAD_EXP_NUNCHUK:
case WPAD_EXP_GUITARHERO3:
{
@ -104,8 +105,6 @@ s8 GuiTrigger::WPAD_Stick(u8 right, int axis)
}
break;
}
default:
break;
}
/* calculate x/y value (angle need to be converted into radian) */
@ -131,8 +130,7 @@ bool GuiTrigger::Left()
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))
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_LEFT))
{
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_LEFT))
{
@ -155,8 +153,7 @@ bool GuiTrigger::Right()
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))
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_RIGHT))
{
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_RIGHT))
{
@ -179,8 +176,7 @@ bool GuiTrigger::Up()
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))
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_UP))
{
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_UP))
{
@ -203,8 +199,7 @@ bool GuiTrigger::Down()
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))
|| ((pad.btns_d | pad.btns_h) & PAD_BUTTON_DOWN))
{
if ((wpad.btns_d & wiibtn) || (pad.btns_d & PAD_BUTTON_DOWN))
{

View File

@ -133,7 +133,6 @@ void SetupPads()
/****************************************************************************
* ShutoffRumble
***************************************************************************/
void ShutoffRumble()
{
for (int i = 0; i < 4; i++)
@ -146,7 +145,6 @@ void ShutoffRumble()
/****************************************************************************
* DoRumble
***************************************************************************/
void DoRumble(int i)
{
if (rumbleRequest[i] && rumbleCount[i] < 3)
@ -166,56 +164,3 @@ void DoRumble(int i)
}
}
/****************************************************************************
* WPAD_Stick
*
* Get X/Y value from Wii Joystick (classic, nunchuk) input
***************************************************************************/
s8 WPAD_Stick(u8 chan, u8 right, int axis)
{
float mag = 0.0;
float ang = 0.0;
WPADData *data = WPAD_Data(chan);
switch (data->exp.type)
{
case WPAD_EXP_NUNCHUK:
case WPAD_EXP_GUITARHERO3:
if (right == 0)
{
mag = data->exp.nunchuk.js.mag;
ang = data->exp.nunchuk.js.ang;
}
break;
case WPAD_EXP_CLASSIC:
if (right == 0)
{
mag = data->exp.classic.ljs.mag;
ang = data->exp.classic.ljs.ang;
}
else
{
mag = data->exp.classic.rjs.mag;
ang = data->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;
double val;
if (axis == 0) // x-axis
val = mag * sin((PI * ang) / 180.0f);
else // y-axis
val = mag * cos((PI * ang) / 180.0f);
return (s8) (val * 128.0f);
}

View File

@ -567,7 +567,9 @@ int PatchNewReturnTo(int es_fd, u64 title)
//! this is here for test purpose only and needs be moved later
static u64 sm_title_id ATTRIBUTE_ALIGN(32);
STACK_ALIGN(ioctlv, vector, 1, 32);
ioctlv *vector = (ioctlv *) memalign(32, sizeof(ioctlv));
if(!vector)
return -1;
sm_title_id = title;
vector[0].data = &sm_title_id;
@ -581,29 +583,29 @@ int PatchNewReturnTo(int es_fd, u64 title)
if(result >= 0)
gprintf("Return to %08X patched with d2x method.\n", (u32) title);
free(vector);
return result;
}
int BlockIOSReload(int es_fd, u8 gameIOS)
{
if(es_fd < 0)
return 0;
return -1;
static int mode ATTRIBUTE_ALIGN(32);
static int ios ATTRIBUTE_ALIGN(32);
STACK_ALIGN(ioctlv, vector, 2, 32);
ioctlv *vector = (ioctlv *) memalign(32, sizeof(ioctlv) * 2);
if(!vector)
return -1;
int inlen = 2;
mode = 2;
ios = gameIOS; // ios to be reloaded in place of the requested one
vector[0].data = &mode;
vector[0].len = 4;
int inlen = 1;
if (mode == 2) {
inlen = 2;
ios = gameIOS; // ios to be reloaded in place of the requested one
vector[1].data = &ios;
vector[1].len = 4;
}
int result = -1;
@ -611,9 +613,11 @@ int BlockIOSReload(int es_fd, u8 gameIOS)
result = IOS_Ioctlv(es_fd, 0xA0, inlen, 0, vector);
if(result >= 0)
gprintf("Block IOS Reload patched with d2x method.\n");
gprintf("Block IOS Reload patched with d2x method to IOS%i; result: %i\n", gameIOS, result);
return (result >= 0);
free(vector);
return result;
}

View File

@ -290,12 +290,7 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
usleep(500000); // wait to see if progress flag changes soon
if (!showProgress) return;
int PosY;
//if(msg2 != 0)
// PosY = 40;
//else
PosY = 20;
const int ProgressPosY = 20;
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
@ -321,18 +316,18 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
progressbarOutlineImg.SetWidescreen(Settings.widescreen);
}
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarOutlineImg.SetPosition(35, PosY);
progressbarOutlineImg.SetPosition(35, ProgressPosY);
GuiImageData progressbarEmpty(Resources::GetFile("progressbar_empty.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImage progressbarEmptyImg(&progressbarEmpty);
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarEmptyImg.SetPosition(35, PosY);
progressbarEmptyImg.SetPosition(35, ProgressPosY);
progressbarEmptyImg.SetTileHorizontal(100);
GuiImageData progressbar(Resources::GetFile("progressbar.png"), Resources::GetFileSize("progressbar.png"));
GuiImage progressbarImg(&progressbar);
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarImg.SetPosition(35, PosY);
progressbarImg.SetPosition(35, ProgressPosY);
GuiText titleTxt(title, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
@ -350,7 +345,7 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
GuiText prsTxt("%", 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
prsTxt.SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE);
prsTxt.SetPosition(-178, PosY);
prsTxt.SetPosition(-178, ProgressPosY);
GuiText timeTxt((char*) NULL, 18, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
timeTxt.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
@ -366,15 +361,15 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
GuiText prTxt((char*) NULL, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
prTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
prTxt.SetPosition(210, PosY);
prTxt.SetPosition(210, ProgressPosY);
if ((Settings.wsprompt) && (Settings.widescreen)) /////////////adjust for widescreen
{
progressbarOutlineImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
progressbarOutlineImg.SetPosition(0, PosY);
progressbarEmptyImg.SetPosition(80, PosY);
progressbarOutlineImg.SetPosition(0, ProgressPosY);
progressbarEmptyImg.SetPosition(80, ProgressPosY);
progressbarEmptyImg.SetTileHorizontal(78);
progressbarImg.SetPosition(80, PosY);
progressbarImg.SetPosition(80, ProgressPosY);
msg1Txt.SetMaxWidth(380, DOTTED);
msg2Txt.SetMaxWidth(380, DOTTED);
@ -401,7 +396,7 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
GuiButton cancelBtn(&cancelImg, &cancelImg, ALIGN_LEFT, ALIGN_MIDDLE, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
cancelBtn.SetLabel(&cancelTxt);
cancelBtn.SetState(STATE_SELECTED);
cancelBtn.SetPosition(dialogBoxImg.GetWidth()/2-cancelImg.GetWidth()/2*cancelScale, PosY + 45);
cancelBtn.SetPosition(dialogBoxImg.GetWidth()/2-cancelImg.GetWidth()/2*cancelScale, ProgressPosY + 45);
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&progressbarEmptyImg);