From 52fbd15569b8e4d8479b2ba6fb457d59741d6abd Mon Sep 17 00:00:00 2001 From: "ardi@ist-einmalig.de" Date: Wed, 20 May 2009 20:09:57 +0000 Subject: [PATCH] * add a nice effect for the GamePromt. To aktivate set in Setup: Flip-X=DiskFlip * remove the Disk-Shadow from dialogue_box_startgame.png (themers will scream). The Shadow now drawing from Loader * little changes for Widescreen-prompt-fix --- source/cfg.h | 1 + source/images/dialogue_box_startgame.png | Bin 19284 -> 23172 bytes source/images/wdialogue_box_startgame.png | Bin 19614 -> 17412 bytes source/libwiigui/gui.h | 11 +- source/libwiigui/gui_diskcover.cpp | 78 ++++++++ source/libwiigui/gui_diskcover.h | 42 +++++ source/libwiigui/gui_element.cpp | 1 + source/libwiigui/gui_image.cpp | 10 +- source/libwiigui/gui_text.cpp | 16 +- source/libwiigui/gui_tooltip.cpp | 2 +- source/menu.cpp | 216 +++++++++++++++------- source/video.cpp | 100 +++++++++- source/video.h | 2 +- 13 files changed, 401 insertions(+), 78 deletions(-) create mode 100644 source/libwiigui/gui_diskcover.cpp create mode 100644 source/libwiigui/gui_diskcover.h diff --git a/source/cfg.h b/source/cfg.h index e79e55b1..0ed69a65 100644 --- a/source/cfg.h +++ b/source/cfg.h @@ -266,6 +266,7 @@ enum { yes, sysmenu, wtf, + disk3d, }; enum { us, diff --git a/source/images/dialogue_box_startgame.png b/source/images/dialogue_box_startgame.png index cd491ffed35bb41e91daaf0335fa4c2dde79d497..f98eb8e2467ff908ad1ac4f6017d8c3ba36d70c2 100644 GIT binary patch literal 23172 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 literal 19284 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 + return; + float currScale = this->GetScale(); +// Menu_DrawDiskCoverShadow(this->GetLeft(), this->GetTop(), 190, width, height, 40, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, this->GetAlpha(), true); + Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), 50, width, height, 55, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, 128, true); + Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), 50, width, height, 55, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, this->GetAlpha(), false); + + if(eff_step) + { + deg_beta += eff_beta; + eff_step--; + } + GuiImage::imageangle += spin_speedup; + while(GuiImage::imageangle >= 360.0) GuiImage::imageangle -= 360.0; + + if(spin_up) + { + if (spin_speedup < 11) // speed up + spin_speedup += 0.20; + } + else + { + if (spin_speedup > 1) + spin_speedup -=0.05; //slow down + } + + this->UpdateEffects(); +} diff --git a/source/libwiigui/gui_diskcover.h b/source/libwiigui/gui_diskcover.h new file mode 100644 index 00000000..74d5a788 --- /dev/null +++ b/source/libwiigui/gui_diskcover.h @@ -0,0 +1,42 @@ +#ifndef _GUIDISCCOVER_H_ +#define _GUIDISCCOVER_H_ + +#include "gui.h" + + +class GuiDiskCover : public GuiImage +{ +public: + GuiDiskCover(); + GuiDiskCover(GuiImageData * img); + ~GuiDiskCover(); + void SetBeta(f32 beta); + void SetBetaRotateEffect(f32 beta, u16 Step); + bool GetBetaRotateEffect(); + + void SetSpin(bool Up); + void Draw(); +private: + f32 deg_beta; + f32 eff_beta; + u16 eff_step; + +// f32 spin_angle; + f32 spin_speedup; + bool spin_up; +}; + + + + + + + + + + + + + + +#endif /* _GUIDISCCOVER_H_ */ diff --git a/source/libwiigui/gui_element.cpp b/source/libwiigui/gui_element.cpp index 4a6d1ca8..8cc70a38 100644 --- a/source/libwiigui/gui_element.cpp +++ b/source/libwiigui/gui_element.cpp @@ -405,6 +405,7 @@ void GuiElement::SetRumble(bool r) int GuiElement::GetEffect() { + LOCK(this); return effects; } diff --git a/source/libwiigui/gui_image.cpp b/source/libwiigui/gui_image.cpp index 68b5c181..3271e27a 100644 --- a/source/libwiigui/gui_image.cpp +++ b/source/libwiigui/gui_image.cpp @@ -117,6 +117,10 @@ void GuiImage::SetAngle(float a) LOCK(this); imageangle = a; } +float GuiImage::GetAngle() +{ + return imageangle; +} void GuiImage::SetTile(int t) { @@ -124,7 +128,7 @@ void GuiImage::SetTile(int t) tile = t; } -void GuiImage::SetWidescreen(short w) +void GuiImage::SetWidescreen(bool w) { LOCK(this); widescreen = w; @@ -233,7 +237,7 @@ void GuiImage::Draw() if(tile > 0) { for(int i=0; iGetTop(), width, height, image, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha()); + Menu_DrawImg(currLeft+width*i, this->GetTop(), 0, width, height, image, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha()); } else { @@ -241,7 +245,7 @@ void GuiImage::Draw() if(scale != 1) currLeft = currLeft - width/2 + (width*scale)/2; - Menu_DrawImg(currLeft, this->GetTop(), width, height, image, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha()); + Menu_DrawImg(currLeft, this->GetTop(), 0, width, height, image, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha()); } if(stripe > 0) diff --git a/source/libwiigui/gui_text.cpp b/source/libwiigui/gui_text.cpp index e7213f0b..02b82985 100644 --- a/source/libwiigui/gui_text.cpp +++ b/source/libwiigui/gui_text.cpp @@ -11,6 +11,7 @@ #include "gui.h" static int currentSize = 0; +static int currentWidescreen = 0; static int presetSize = 0; static int presetMaxWidth = 0; static int presetAlignmentHor = 0; @@ -165,15 +166,21 @@ int GuiText::GetTextWidth() LOCK(this); int newSize = size*this->GetScale(); - if(newSize != currentSize) + if(newSize != currentSize || currentWidescreen != widescreen) { //fontSystem->changeSize(newSize); - (font ? font : fontSystem)->changeSize(newSize, widescreen ? (newSize*3)>>2 : 0); + (font ? font : fontSystem)->changeSize(newSize, widescreen ? newSize*0.8 : 0); currentSize = newSize; + currentWidescreen = widescreen; } return (font ? font : fontSystem)->getWidth(text); } +void GuiText::SetWidescreen(bool w) +{ + LOCK(this); + widescreen = w; +} /** * Draw the text on screen */ @@ -191,11 +198,12 @@ void GuiText::Draw() int newSize = size*this->GetScale(); - if(newSize != currentSize) + if(newSize != currentSize || currentWidescreen != widescreen) { //fontSystem->changeSize(newSize); - (font ? font : fontSystem)->changeSize(newSize, widescreen ? (newSize*3)>>2 : 0); + (font ? font : fontSystem)->changeSize(newSize, widescreen ? newSize*0.8 : 0); currentSize = newSize; + currentWidescreen = widescreen; } int voffset = 0; diff --git a/source/libwiigui/gui_tooltip.cpp b/source/libwiigui/gui_tooltip.cpp index 20bc310d..c504bd77 100644 --- a/source/libwiigui/gui_tooltip.cpp +++ b/source/libwiigui/gui_tooltip.cpp @@ -72,7 +72,7 @@ void GuiTooltip::SetText(const char * t) width = leftImage.GetWidth() + tile_cnt * tileImage.GetWidth() + rightImage.GetWidth(); } -void GuiTooltip::SetWidescreen(short){} +void GuiTooltip::SetWidescreen(bool){} /* * Draw the Tooltip on screen */ diff --git a/source/menu.cpp b/source/menu.cpp index 04095a7a..9a5ad11a 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -37,6 +37,7 @@ #include "language.h" #include "libwiigui/gui_customoptionbrowser.h" #include "libwiigui/gui_gamebrowser.h" +#include "libwiigui/gui_diskcover.h" #include "mp3s.h" #include "fatmounter.h" @@ -57,9 +58,9 @@ static GuiImageData * background = NULL; static char prozent[10] = " "; static char timet[50] = " "; static char sizeshow[20] = " "; -static GuiText prTxt(prozent, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); -static GuiText timeTxt(prozent, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); -static GuiText sizeTxt(sizeshow, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); +static GuiText prTxt(prozent, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); +static GuiText timeTxt(prozent, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); +static GuiText sizeTxt(sizeshow, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); static GuiText *GameIDTxt = NULL; static GuiText *GameRegionTxt = NULL; static GuiSound * bgMusic = NULL; @@ -201,9 +202,9 @@ static void WindowCredits(void * ptr) GuiImage starImg(&star); starImg.SetWidescreen(CFG.widescreen); //added starImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - starImg.SetPosition(500,335); + starImg.SetPosition(505,350); - int numEntries = 24; + int numEntries = 25; GuiText * txt[numEntries]; txt[i] = new GuiText(LANGUAGE.Credits, 26, (GXColor){255, 255, 255, 255}); @@ -246,6 +247,10 @@ static void WindowCredits(void * ptr) txt[i] = new GuiText("giantpune"); txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); i++; + y+=22; + txt[i] = new GuiText("ardi"); + txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); + i++; y+=24; txt[i] = new GuiText("Design:"); @@ -347,7 +352,7 @@ static void WindowCredits(void * ptr) { #ifdef HW_RVL if(userInput[i].wpad.ir.valid) - Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, + Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0, 96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255); if(Settings.rumble == RumbleOn){ DoRumble(i); @@ -435,6 +440,7 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, GuiText btn1Txt(btn1Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn1Img(&btnOutline); if (Settings.wsprompt == yes){ + btn1Txt.SetWidescreen(CFG.widescreen); btn1Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight()); btn1.SetLabel(&btn1Txt); @@ -448,6 +454,7 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, GuiText btn2Txt(btn2Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn2Img(&btnOutline); if (Settings.wsprompt == yes){ + btn2Txt.SetWidescreen(CFG.widescreen); btn2Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight()); btn2.SetLabel(&btn2Txt); @@ -462,6 +469,7 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, GuiText btn3Txt(btn3Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn3Img(&btnOutline); if (Settings.wsprompt == yes){ + btn3Txt.SetWidescreen(CFG.widescreen); btn3Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn3(btnOutline.GetWidth(), btnOutline.GetHeight()); btn3.SetLabel(&btn3Txt); @@ -476,6 +484,7 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, GuiText btn4Txt(btn4Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn4Img(&btnOutline); if (Settings.wsprompt == yes){ + btn4Txt.SetWidescreen(CFG.widescreen); btn4Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn4(btnOutline.GetWidth(), btnOutline.GetHeight()); btn4.SetLabel(&btn4Txt); @@ -489,10 +498,10 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen msgTxt.SetMaxWidth(330); - btn1Txt.SetFontSize(20); - btn2Txt.SetFontSize(20); - btn3Txt.SetFontSize(20); - btn4Txt.SetFontSize(20); +// btn1Txt.SetFontSize(20); +// btn2Txt.SetFontSize(20); +// btn3Txt.SetFontSize(20); +// btn4Txt.SetFontSize(20); if(btn2Label && !btn3Label && !btn4Label) { @@ -754,15 +763,16 @@ WindowExitPrompt(const char *title, const char *msg, const char *btn1Label, titleTxt.SetPosition(-180,40); titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - GuiText btn1Txt(" Close", 28, (GXColor){0, 0, 0, 255}); + GuiText closeTxt(" Close", 28, (GXColor){0, 0, 0, 255}); GuiImage closeImg(&close); if (Settings.wsprompt == yes){ + closeTxt.SetWidescreen(CFG.widescreen); closeImg.SetWidescreen(CFG.widescreen);}/////////// GuiButton closeBtn(close.GetWidth(), close.GetHeight()); closeBtn.SetImage(&closeImg); closeBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); closeBtn.SetPosition(205,42); - closeBtn.SetLabel(&btn1Txt); + closeBtn.SetLabel(&closeTxt); closeBtn.SetRumble(false); closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); @@ -777,9 +787,10 @@ WindowExitPrompt(const char *title, const char *msg, const char *btn1Label, btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); btn1.SetPosition(0, 0); - GuiText btn2Txt(btn1Label, 38, (GXColor){0, 0, 0, 255}); + GuiText btn2Txt(btn1Label, 34, (GXColor){0, 0, 0, 255}); GuiImage btn2Img(&button); if (Settings.wsprompt == yes){ + btn2Txt.SetWidescreen(CFG.widescreen); btn2Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn2(button.GetWidth(), button.GetHeight()); btn2.SetLabel(&btn2Txt); @@ -793,9 +804,10 @@ WindowExitPrompt(const char *title, const char *msg, const char *btn1Label, btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 50); btn2.SetRumble(false); - GuiText btn3Txt(btn2Label, 38, (GXColor){0, 0, 0, 255}); + GuiText btn3Txt(btn2Label, 34, (GXColor){0, 0, 0, 255}); GuiImage btn3Img(&button); if (Settings.wsprompt == yes){ + btn3Txt.SetWidescreen(CFG.widescreen); btn3Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn3(button.GetWidth(), button.GetHeight()); btn3.SetLabel(&btn3Txt); @@ -822,8 +834,8 @@ WindowExitPrompt(const char *title, const char *msg, const char *btn1Label, btn4.SetPosition(0,0); btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50); - btn2Txt.SetFontSize(22); - btn3Txt.SetFontSize(22); +// btn2Txt.SetFontSize(22); +// btn3Txt.SetFontSize(22); GuiImage wiimoteImg(&wiimote); if (Settings.wsprompt == yes){wiimoteImg.SetWidescreen(CFG.widescreen);} @@ -1019,10 +1031,12 @@ int GameWindowPrompt() GuiTooltip nameBtnTT(LANGUAGE.RenameGameonWBFS); if (Settings.wsprompt == yes) nameBtnTT.SetWidescreen(CFG.widescreen); - GuiText msgTxt("", 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{50, 50, 50, 255}); + GuiText nameTxt("", 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{50, 50, 50, 255}); + if (Settings.wsprompt == yes) + nameTxt.SetWidescreen(CFG.widescreen); GuiButton nameBtn(120,50); - nameBtn.SetLabel(&msgTxt); - nameBtn.SetLabelOver(&msgTxt); + nameBtn.SetLabel(&nameTxt); +// nameBtn.SetLabelOver(&nameTxt); nameBtn.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); nameBtn.SetPosition(0,-122); nameBtn.SetSoundOver(&btnSoundOver); @@ -1038,10 +1052,17 @@ int GameWindowPrompt() sizeTxt.SetAlignment(ALIGN_RIGHT, ALIGN_TOP); sizeTxt.SetPosition(-60,70); - GuiImage diskImg; +// GuiImage diskImg; + GuiDiskCover diskImg; diskImg.SetWidescreen(CFG.widescreen); diskImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP); diskImg.SetAngle(angle); + GuiDiskCover diskImg2; + diskImg2.SetWidescreen(CFG.widescreen); + diskImg2.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); + diskImg2.SetPosition(0, -20); + diskImg2.SetAngle(angle); + diskImg2.SetBeta(180); GuiButton btn1(160, 160); btn1.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); @@ -1057,6 +1078,7 @@ int GameWindowPrompt() GuiText btn2Txt(LANGUAGE.Back, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn2Img(&btnOutline); if (Settings.wsprompt == yes){ + btn2Txt.SetWidescreen(CFG.widescreen); btn2Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight()); //check if unlocked @@ -1082,6 +1104,7 @@ int GameWindowPrompt() GuiText btn3Txt(LANGUAGE.settings, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn3Img(&btnOutline); if (Settings.wsprompt == yes){ + btn3Txt.SetWidescreen(CFG.widescreen); btn3Img.SetWidescreen(CFG.widescreen);} GuiButton btn3(btnOutline.GetWidth(), btnOutline.GetHeight()); btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); @@ -1118,7 +1141,7 @@ int GameWindowPrompt() promptWindow.Append(&dialogBoxImg); promptWindow.Append(&nameBtn); promptWindow.Append(&sizeTxt); - promptWindow.Append(&btn1); +// promptWindow.Append(&btn1); // move down at last apended promptWindow.Append(&btn2); promptWindow.Append(&btnLeft); promptWindow.Append(&btnRight); @@ -1129,8 +1152,12 @@ int GameWindowPrompt() promptWindow.Append(&btn3); } - short changed = 3; + promptWindow.Append(&diskImg2); + promptWindow.Append(&btn1); + + short changed = -1; GuiImageData * diskCover = NULL; + GuiImageData * diskCover2 = NULL; promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); @@ -1139,11 +1166,20 @@ int GameWindowPrompt() if (changed == 1){ promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 50); } - if (changed == 2){ + else if (changed == 2){ promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 50); } + else if (changed == 3 || changed == 4) + { + if(diskCover2) + delete diskCover2; + diskCover2 = NULL; + if(diskCover) + diskCover2 = diskCover; + diskCover = NULL; + } - changed = 0; +// changed = 0; //load disc image based or what game is seleted struct discHdr * header = &gameList[gameSelected]; WBFS_GameSize(header->id, &size); @@ -1163,72 +1199,93 @@ int GameWindowPrompt() strncat(gameName, "...", 3); } - snprintf(imgPath,sizeof(imgPath),"%s%s.png", CFG.disc_path, IDFull); //changed to current id if (diskCover) delete diskCover; + snprintf(imgPath,sizeof(imgPath),"%s%s.png", CFG.disc_path, IDFull); //changed to current full id diskCover = new GuiImageData(imgPath,0); if (!diskCover->GetImage()) { delete diskCover; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.disc_path, ID); //changed to current full id + snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.disc_path, ID); //changed to current id diskCover = new GuiImageData(imgPath, 0); if (!diskCover->GetImage()) { delete diskCover; + snprintf(imgPath, sizeof(imgPath), "%snodisc.png", CFG.disc_path); //changed to nodisc.png diskCover = new GuiImageData(imgPath,nodisc_png); } } diskImg.SetImage(diskCover); + + + if (changed == 3){ + diskImg.SetBeta(180); + diskImg.SetBetaRotateEffect(-90, 15); + diskImg2.SetImage(diskCover2); + diskImg2.SetAngle(diskImg.GetAngle()); + diskImg2.SetBeta(0); + diskImg2.SetBetaRotateEffect(-90, 15); + sizeTxt.SetEffect(EFFECT_FADE, -17); + nameTxt.SetEffect(EFFECT_FADE, -17); + ResumeGui(); + while(nameTxt.GetEffect() > 0 || diskImg.GetBetaRotateEffect()) usleep(50); + HaltGui(); + diskImg.SetBetaRotateEffect(-90, 15); + diskImg2.SetBetaRotateEffect(-90, 15); + sizeTxt.SetEffect(EFFECT_FADE, 17); + nameTxt.SetEffect(EFFECT_FADE, 17); + } + else if (changed == 4){ + diskImg.SetBeta(180); + diskImg.SetBetaRotateEffect(90, 15); + diskImg2.SetImage(diskCover2); + diskImg2.SetAngle(diskImg.GetAngle()); + diskImg2.SetBeta(0); + diskImg2.SetBetaRotateEffect(90, 15); + sizeTxt.SetEffect(EFFECT_FADE, -17); + nameTxt.SetEffect(EFFECT_FADE, -17); + ResumeGui(); + while(nameTxt.GetEffect() > 0 || diskImg.GetBetaRotateEffect()) usleep(50); + HaltGui(); + diskImg.SetBetaRotateEffect(90, 15); + diskImg2.SetBetaRotateEffect(90, 15); + sizeTxt.SetEffect(EFFECT_FADE, 17); + nameTxt.SetEffect(EFFECT_FADE, 17); + } + sizeTxt.SetText(sizeText); - msgTxt.SetText(gameName); + nameTxt.SetText(gameName); char* pch; pch=strrchr((gameName),'_'); - if (pch!=NULL){msgTxt.SetPosition(0, 16);} - else {msgTxt.SetPosition(0, 1);} + if (pch!=NULL){nameTxt.SetPosition(0, 16);} + else {nameTxt.SetPosition(0, 1);} - - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); + if(changed != 3 && changed != 4) // changed==3 or changed==4 --> only Resume the GUI + { + HaltGui(); + mainWindow->SetState(STATE_DISABLED); + mainWindow->Append(&promptWindow); + mainWindow->ChangeFocus(&promptWindow); + } ResumeGui(); - float speedup = 1; //speedup increases while disc is selected - + changed = 0; while(choice == -1) { - VIDEO_WaitVSync(); - //angle++; - angle = int(angle+speedup) % 360; - //disc speedup and slowdown - if (btn1.GetState() == STATE_SELECTED) { //if mouse over - if (speedup < 11) // speed up - { - speedup = (speedup+0.20); - } - } - else //if not mouse over - { - if (speedup > 1) {speedup = (speedup-0.05);} //slow down - } - if (speedup < 1) - { - speedup = 1; - } - diskImg.SetAngle(angle); - + diskImg.SetSpin(btn1.GetState() == STATE_SELECTED); + diskImg2.SetSpin(btn1.GetState() == STATE_SELECTED); if(shutdown == 1) //for power button { wiilight(0); Sys_Shutdown(); } - if(reset == 1) + if(reset == 1) //for reset button Sys_Reboot(); if(btn1.GetState() == STATE_CLICKED) { //boot @@ -1324,16 +1381,38 @@ int GameWindowPrompt() btnLeft.ResetState(); break; } + + else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == disk3d)){//next game +// diskImg.SetBetaRotateEffect(45, 90); + changed = 3; + btnClick.Play(); + gameSelected = (gameSelected + 1) % gameCnt; + btnRight.ResetState(); + break; + } + + else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == disk3d)){//previous game +// diskImg.SetBetaRotateEffect(-45, 90); +// promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 1/*50*/); + changed = 4; + btnClick.Play(); + gameSelected = (gameSelected - 1 + gameCnt) % gameCnt; + btnLeft.ResetState(); + break; + } } while(promptWindow.GetEffect() > 0) usleep(50); HaltGui(); - mainWindow->Remove(&promptWindow); - - ResumeGui(); + if(changed != 3 && changed != 4) // changed==3 or changed==4 --> only Halt the GUI + { + mainWindow->Remove(&promptWindow); + ResumeGui(); + } } delete diskCover; + delete diskCover2; return choice; } @@ -1378,6 +1457,7 @@ DiscWait(const char *title, const char *msg, const char *btn1Label, const char * GuiText btn1Txt(btn1Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn1Img(&btnOutline); if (Settings.wsprompt == yes){ + btn1Txt.SetWidescreen(CFG.widescreen); btn1Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight()); @@ -1404,6 +1484,7 @@ DiscWait(const char *title, const char *msg, const char *btn1Label, const char * GuiText btn2Txt(btn2Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn2Img(&btnOutline); if (Settings.wsprompt == yes){ + btn2Txt.SetWidescreen(CFG.widescreen); btn2Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight()); btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); @@ -1588,6 +1669,7 @@ int NetworkInitPromp(int choice2) GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn1Img(&btnOutline); if (Settings.wsprompt == yes){ + btn1Txt.SetWidescreen(CFG.widescreen); btn1Img.SetWidescreen(CFG.widescreen);}/////////// GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight()); btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); @@ -1938,6 +2020,7 @@ ProgressDownloadWindow(int choice2) GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage btn1Img(&btnOutline); if (Settings.wsprompt == yes){ + btn1Txt.SetWidescreen(CFG.widescreen); btn1Img.SetWidescreen(CFG.widescreen);} GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight()); btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); @@ -2095,7 +2178,7 @@ UpdateGUI (void *arg) for(int i=3; i >= 0; i--) // so that player 1's cursor appears on top! { if(userInput[i].wpad.ir.valid) - Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, + Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0, 96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255); if(Settings.rumble == RumbleOn) { @@ -2263,6 +2346,7 @@ static int OnScreenKeyboard(char * var, u32 maxlen, int min) GuiText okBtnTxt(LANGUAGE.ok, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage okBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + okBtnTxt.SetWidescreen(CFG.widescreen); okBtnImg.SetWidescreen(CFG.widescreen);}/////////// GuiButton okBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); @@ -2279,6 +2363,7 @@ static int OnScreenKeyboard(char * var, u32 maxlen, int min) GuiText cancelBtnTxt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); GuiImage cancelBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + cancelBtnTxt.SetWidescreen(CFG.widescreen); cancelBtnImg.SetWidescreen(CFG.widescreen);}/////////// GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); cancelBtn.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); @@ -3716,6 +3801,7 @@ static int MenuSettings() backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); GuiImage backBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + backBtnTxt.SetWidescreen(CFG.widescreen); backBtnImg.SetWidescreen(CFG.widescreen);} GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -4021,7 +4107,7 @@ static int MenuSettings() { if ( Settings.cios > 1 ) Settings.cios = 0; - if ( Settings.xflip > 3 ) + if ( Settings.xflip > 4 ) Settings.xflip = 0; if ( Settings.qboot > 1 ) Settings.qboot = 0; @@ -4043,6 +4129,7 @@ static int MenuSettings() else if (Settings.xflip == yes) sprintf (options2.value[2],"%s/%s",LANGUAGE.Left,LANGUAGE.Prev); else if (Settings.xflip == sysmenu) sprintf (options2.value[2],"%s", LANGUAGE.LikeSysMenu); else if (Settings.xflip == wtf) sprintf (options2.value[2],"%s/%s",LANGUAGE.Right,LANGUAGE.Prev); + else if (Settings.xflip == disk3d) sprintf (options2.value[2],"DiskFlip"); if (Settings.qboot == no) sprintf (options2.value[3],"%s",LANGUAGE.No); else if (Settings.qboot == yes) sprintf (options2.value[3],"%s",LANGUAGE.Yes); @@ -4646,6 +4733,7 @@ int GameSettings(struct discHdr * header) saveBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); GuiImage saveBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + saveBtnTxt.SetWidescreen(CFG.widescreen); saveBtnImg.SetWidescreen(CFG.widescreen);} GuiButton saveBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); saveBtn.SetScale(0.9); @@ -4661,6 +4749,7 @@ int GameSettings(struct discHdr * header) cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); GuiImage cancelBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + cancelBtnTxt.SetWidescreen(CFG.widescreen); cancelBtnImg.SetWidescreen(CFG.widescreen);} GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); cancelBtn.SetScale(0.9); @@ -4677,6 +4766,7 @@ int GameSettings(struct discHdr * header) deleteBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); GuiImage deleteBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + deleteBtnTxt.SetWidescreen(CFG.widescreen); deleteBtnImg.SetWidescreen(CFG.widescreen);} GuiButton deleteBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); deleteBtn.SetScale(0.9); @@ -5071,6 +5161,7 @@ int MenuOGG() backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); GuiImage backBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + backBtnTxt.SetWidescreen(CFG.widescreen); backBtnImg.SetWidescreen(CFG.widescreen);}////// GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -5372,6 +5463,7 @@ int MenuMp3() cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); GuiImage cancelBtnImg(&btnOutline); if (Settings.wsprompt == yes){ + cancelBtnTxt.SetWidescreen(CFG.widescreen); cancelBtnImg.SetWidescreen(CFG.widescreen);} GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); cancelBtn.SetScale(0.9); diff --git a/source/video.cpp b/source/video.cpp index 506a8972..0d7d7fd0 100644 --- a/source/video.cpp +++ b/source/video.cpp @@ -141,7 +141,7 @@ ResetVideo_Menu() GX_SetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); guMtxIdentity(GXmodelView2D); - guMtxTransApply (GXmodelView2D, GXmodelView2D, 0.0F, 0.0F, -50.0F); + guMtxTransApply (GXmodelView2D, GXmodelView2D, 0.0F, 0.0F, -200.0F); GX_LoadPosMtxImm(GXmodelView2D,GX_PNMTX0); guOrtho(p,0,479,0,639,0,300); @@ -240,7 +240,7 @@ void Menu_Render() * * Draws the specified image on screen using GX ***************************************************************************/ -void Menu_DrawImg(f32 xpos, f32 ypos, u16 width, u16 height, u8 data[], +void Menu_DrawImg(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u8 data[], f32 degrees, f32 scaleX, f32 scaleY, u8 alpha) { if(data == NULL) @@ -265,7 +265,7 @@ void Menu_DrawImg(f32 xpos, f32 ypos, u16 width, u16 height, u8 data[], // guMtxConcat(m2,m1,m); guMtxConcat(m1,m2,m); - guMtxTransApply(m,m, xpos+width+0.5,ypos+height+0.5,0); + guMtxTransApply(m,m, xpos+width+0.5,ypos+height+0.5,zpos); guMtxConcat (GXmodelView2D, m, mv); GX_LoadPosMtxImm (mv, GX_PNMTX0); @@ -325,3 +325,97 @@ void Menu_DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color, u8 f } GX_End(); } + +void Menu_DrawDiskCover(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u16 distance,u8 data[], + f32 deg_alpha, f32 deg_beta, f32 scaleX, f32 scaleY, u8 alpha, bool shadow) +{ + if(data == NULL) + return; + + GXTexObj texObj; + + GX_InitTexObj(&texObj, data, width,height, GX_TF_RGBA8,GX_CLAMP, GX_CLAMP,GX_FALSE); + GX_LoadTexObj(&texObj, GX_TEXMAP0); + GX_InvalidateTexAll(); + + GX_SetTevOp (GX_TEVSTAGE0, GX_MODULATE); + GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT); + + + f32 cos_beta = cos(DegToRad(deg_beta)); + f32 s_offset_y = (zpos + (cos_beta * distance)) * tan(DegToRad(5)); + f32 s_offset_x = (cos_beta<0?-cos_beta:cos_beta) * s_offset_y; + f32 s_offset_z = (s_offset_y<0 ? 0 : s_offset_y)*2; + + Mtx m,m1,m2,m3,m4, mv; + width *=.5; + height*=.5; + guMtxIdentity (m4); + guMtxTransApply(m4,m4, 0, 0, distance); + + guMtxIdentity (m1); + guMtxScaleApply(m1,m1,scaleX,scaleY,1.0); + Vector axis2 = (Vector) {0 , 1, 0 }; + guMtxRotAxisDeg (m2, &axis2, deg_beta); + Vector axis = (Vector) {0 , 0, 1 }; + guMtxRotAxisDeg (m3, &axis, deg_alpha); +// guMtxConcat(m2,m1,m); + guMtxConcat(m3,m4,m3); // move distance then rotate z-axis + guMtxConcat(m2,m3,m2); // rotate y-axis + guMtxConcat(m1,m2,m); // scale + + if(shadow) + guMtxTransApply(m,m, xpos+width+0.5+s_offset_x,ypos+height+0.5+s_offset_y,zpos-s_offset_z); + else + guMtxTransApply(m,m, xpos+width+0.5,ypos+height+0.5,zpos); + + + + guMtxConcat (GXmodelView2D, m, mv); + GX_LoadPosMtxImm (mv, GX_PNMTX0); + + if(shadow) + { + GX_Begin(GX_QUADS, GX_VTXFMT0,4); + GX_Position3f32(-width, -height, 0); + GX_Color4u8(0x60,0x60,0x60,alpha); + GX_TexCoord2f32(0, 0); + + GX_Position3f32(width, -height, 0); + GX_Color4u8(0x60,0x60,0x60,alpha); + GX_TexCoord2f32(1, 0); + + GX_Position3f32(width, height, 0); + GX_Color4u8(0x60,0x60,0x60,alpha); + GX_TexCoord2f32(1, 1); + + GX_Position3f32(-width, height, 0); + GX_Color4u8(0x60,0x60,0x60,alpha); + GX_TexCoord2f32(0, 1); + } + else + { + GX_Begin(GX_QUADS, GX_VTXFMT0,4); + GX_Position3f32(-width, -height, 0); + GX_Color4u8(0xFF,0xFF,0xFF,alpha); + GX_TexCoord2f32(0, 0); + + GX_Position3f32(width, -height, 0); + GX_Color4u8(0xFF,0xFF,0xFF,alpha); + GX_TexCoord2f32(1, 0); + + GX_Position3f32(width, height, 0); + GX_Color4u8(0xFF,0xFF,0xFF,alpha); + GX_TexCoord2f32(1, 1); + + GX_Position3f32(-width, height, 0); + GX_Color4u8(0xFF,0xFF,0xFF,alpha); + GX_TexCoord2f32(0, 1); + } + + GX_End(); + GX_LoadPosMtxImm (GXmodelView2D, GX_PNMTX0); + + GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); + GX_SetVtxDesc (GX_VA_TEX0, GX_NONE); +} diff --git a/source/video.h b/source/video.h index cad707b0..57b18c07 100644 --- a/source/video.h +++ b/source/video.h @@ -15,7 +15,7 @@ void InitVideo (); void StopGX(); void ResetVideo_Menu(); void Menu_Render(); -void Menu_DrawImg(f32 xpos, f32 ypos, u16 width, u16 height, u8 data[], f32 degrees, f32 scaleX, f32 scaleY, u8 alphaF ); +void Menu_DrawImg(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u8 data[], f32 degrees, f32 scaleX, f32 scaleY, u8 alphaF ); void Menu_DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color, u8 filled); extern int screenheight;