From 73dada56a808db5cf19c5ce63fd3403dca422e68 Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Wed, 27 May 2009 08:41:05 +0000 Subject: [PATCH] *Changed the EFFECT_GOROUND (press carousel button to test it) --- source/libwiigui/gui.h | 12 ++++++- source/libwiigui/gui_element.cpp | 57 +++++++++++++++++++++++--------- source/menu.cpp | 19 ++++++++++- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/source/libwiigui/gui.h b/source/libwiigui/gui.h index b81186b4..eead7dfb 100644 --- a/source/libwiigui/gui.h +++ b/source/libwiigui/gui.h @@ -333,6 +333,13 @@ class GuiElement //!\param a Amount of the effect (usage varies on effect) //!\param t Target amount of the effect (usage varies on effect) void SetEffect(int e, int a, int t=0); + //!This SetEffect is for EFFECT_GOROUND only + //!\param e Effect to enable + //!\param speed is for Circlespeed + //!\param circles Circleamount in degree ike 180 for 1/2 circle or 720 for 2 circles + //!\param r Circle Radius in pixel + //!\param startdegree Degree where to start circling + void SetEffect(int e, int speed, int circles, int r, int startdegree); //!Sets an effect to be enabled on wiimote cursor over //!\param e Effect to enable //!\param a Amount of the effect (usage varies on effect) @@ -408,7 +415,10 @@ class GuiElement int xmax; //!< Element's max X offset allowed int xoffsetDyn; //!< Element X offset, dynamic (added to xoffset value for animation effects) int yoffsetDyn; //!< Element Y offset, dynamic (added to yoffset value for animation effects) - f32 degree; //!< Degree for flying stuff + f32 degree; //!< Degree where to start for EFFECT_GOROUND enter it in ° like 60° + f32 frequency; //!< Speed for EFFECT_GOROUND || can also be negative for other direction + int Radius; //!< The radius in which the Element goes round for EFFECT_GOROUND + int circleamount; //!< Circleamount for the EFFECT_GOROUND effect f32 yoffsetDynFloat; //!< Integer sucks float is need by some parts int changervar; //!< Changervariable for some stuff int alpha; //!< Element alpha value (0-255) diff --git a/source/libwiigui/gui_element.cpp b/source/libwiigui/gui_element.cpp index 6f1a972d..a74bb3be 100644 --- a/source/libwiigui/gui_element.cpp +++ b/source/libwiigui/gui_element.cpp @@ -53,8 +53,11 @@ GuiElement::GuiElement() effectsOver = 0; effectAmountOver = 0; effectTargetOver = 0; - degree = 0; + frequency = 0; changervar = 0; + degree = -90*PI/180; + circleamount = 360; + Radius = 150; // default alignment - align to top left alignmentVert = ALIGN_TOP; @@ -412,6 +415,19 @@ int GuiElement::GetEffect() return effects; } +void GuiElement::SetEffect(int eff, int speed, int circles, int r, int startdegree) { + + if(eff & EFFECT_GOROUND) { + xoffsetDyn = 0; //!position of circle in x + yoffsetDyn = 0; //!position of circle in y + Radius = r; //!Radius of the circle + degree = startdegree*PI/180;//!for example -90 (°) to start at top of circle + circleamount = circles; //!circleamoutn in degrees for example 360 for 1 circle + } + effects |= eff; + effectAmount = speed; //!Circlespeed +} + void GuiElement::SetEffect(int eff, int amount, int target) { LOCK(this); @@ -436,9 +452,6 @@ void GuiElement::SetEffect(int eff, int amount, int target) { alphaDyn = alpha; - } else if(eff & EFFECT_GOROUND) { - xoffsetDyn = 0; - yoffsetDyn = -200; } else if(eff & EFFECT_ROCK_VERTICLE) { changervar = 0; yoffsetDyn = 0; @@ -474,7 +487,7 @@ void GuiElement::StopEffect() effectTarget = 0; effectTargetOver = 0; scaleDyn = 1; - degree = 0; + frequency = 0; changervar = 0; } @@ -562,19 +575,33 @@ void GuiElement::UpdateEffects() if(effects & EFFECT_GOROUND) { - if(degree < 2*PI) { //here we can let it cicle less/more than 2*PI which is 360° - int Radius = 200; //this needs to be moved to a global variable - degree += 0.08; //this defines the flying speed + //!< check out gui.h for info + if(abs(frequency) < PI*circleamount/180) { - xoffsetDyn = (int)(Radius*cos(degree-PI/2)); //here we can make the startdegree different - yoffsetDyn = (int)(Radius*sin(degree-PI/2)); //(by changing the radian degree of cos/sin + frequency += effectAmount*0.001; + xoffsetDyn = (int)(Radius*cos(frequency+degree)); + yoffsetDyn = (int)(Radius*sin(frequency+degree)); } else { - xoffsetDyn = 0; - yoffsetDyn += 0.08*100; - if(yoffsetDyn >= 0) { - effects = 0; - degree = 0; + //fly back to the middle + if(xoffsetDyn < 0) + xoffsetDyn += frequency*100; + else xoffsetDyn = 0; + if(xoffsetDyn > 0) + xoffsetDyn -= frequency*100; + else xoffsetDyn = 0; + + if(yoffsetDyn < 0) + yoffsetDyn += frequency*100; + else yoffsetDyn = 0; + if(yoffsetDyn > 0) + yoffsetDyn -= frequency*100; + else yoffsetDyn = 0; + + if(xoffsetDyn == 0 && yoffsetDyn == 0) { + effects = 0; + frequency = 0; + Radius = 0; } } } diff --git a/source/menu.cpp b/source/menu.cpp index 086696b2..c8fcfe19 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -227,7 +227,7 @@ static void WindowCredits(void * ptr) txt[i] = new GuiText(LANGUAGE.OfficialSite, 20, (GXColor){255, 255, 255, 255}); txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-180,y); i++; y+=28; - GuiText::SetPresets(22, (GXColor){255, 255, 255, 255}, 0, GuiText::WRAP, + GuiText::SetPresets(22, (GXColor){255, 255, 255, 255}, 0, GuiText::WRAP, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_TOP, ALIGN_LEFT, ALIGN_TOP); txt[i] = new GuiText("Coding:"); @@ -3151,6 +3151,23 @@ static int MenuDiscList() VIDEO_WaitVSync (); + if(carosselleBtn.GetState() == STATE_CLICKED) { + carosselleBtn.SetEffect(EFFECT_GOROUND, 80, 180, 50, -45); + countBtn.SetEffect(EFFECT_GOROUND, -80, 180, 50, -45); + abcBtn.SetEffect(EFFECT_GOROUND, 80, 180, 50, -45); + favoriteBtn.SetEffect(EFFECT_GOROUND, -80, 360, 50, -45); + wiiBtn.SetEffect(EFFECT_GOROUND, 80, 180, 150, 180); + poweroffBtn.SetEffect(EFFECT_GOROUND, -80, 360, 150, 50); + sdcardBtn.SetEffect(EFFECT_GOROUND, 80, 360, 150, 80); + poweroffBtn.SetEffect(EFFECT_GOROUND, -80, 360, 60, 180); + settingsBtn.SetEffect(EFFECT_GOROUND, 80, 360, 200, 180); + homeBtn.SetEffect(EFFECT_GOROUND, 80, 360, 200, 180); + installBtn.SetEffect(EFFECT_GOROUND, -80, 360, 60, -90); + gridBtn.SetEffect(EFFECT_GOROUND, -80, 360, 50, 0); + DownloadBtn.SetEffect(EFFECT_GOROUND, 160, 720, 300, 0); + carosselleBtn.ResetState(); + } + //CLOCK time_t rawtime = time(0); //this fixes code dump caused by the clock if (((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) && rawtime != lastrawtime) {