diff --git a/source/banner/BannerWindow.cpp b/source/banner/BannerWindow.cpp index 3e4bd402..f3b43246 100644 --- a/source/banner/BannerWindow.cpp +++ b/source/banner/BannerWindow.cpp @@ -21,6 +21,8 @@ #include "gx_addons.h" #include "gecko.h" +BannerWindow *m_banner; + void BannerWindow::LoadBanner(Banner *banner, CVideo *vid, u8 *font1, u8 *font2) { changing = true; @@ -38,11 +40,7 @@ void BannerWindow::LoadBanner(Banner *banner, CVideo *vid, u8 *font1, u8 *font2) AnimPosX = 0.5f * (ScreenProps.x - fIconWidth); AnimPosY = 0.5f * (ScreenProps.y - fIconHeight); - AnimZoomIn = false; - AnimZoomOut = false; AnimationRunning = false; - BannerAlpha = 255.f; - BGAlpha = 255.f; ChangeGame(banner); gameSelected = 1; @@ -57,7 +55,9 @@ void BannerWindow::DeleteBanner() BannerWindow::BannerWindow() { + FontLoaded = false; changing = false; + AnimZoom = false; AnimStep = 20; gameSelected = 0; gameBanner = new AnimatedBanner; @@ -66,62 +66,39 @@ BannerWindow::BannerWindow() void BannerWindow::ChangeGame(Banner *banner) { gameBanner->Clear(); - gameBanner->LoadFont(sysFont1, sysFont2); + if(!FontLoaded) + { + gameBanner->LoadFont(sysFont1, sysFont2); + FontLoaded = true; + } gameBanner->LoadBanner(banner); } -void BannerWindow::ZoomIn(void) +bool BannerWindow::ToogleZoom(void) { - AnimZoomIn = true; - AnimZoomOut = false; - if(AnimStep <= 20) - AnimStep++; -} - -void BannerWindow::PauseZoom(void) -{ - AnimZoomIn = false; - AnimZoomOut = false; -} - -void BannerWindow::ZoomOut(void) -{ - AnimZoomIn = false; - AnimZoomOut = true; - if(AnimStep >= MaxAnimSteps) - AnimStep--; + if(AnimZoom) + { + AnimStep = 30; + AnimZoom = false; + } + else + { + AnimStep = 20; + AnimZoom = true; + } + return AnimZoom; } void BannerWindow::Animate(void) { // animation is on going - if(AnimStep < MaxAnimSteps) + if(AnimStep <= MaxAnimSteps) { AnimationRunning = true; - if(AnimZoomIn && AnimStep < MaxAnimSteps) + if(AnimZoom && AnimStep < MaxAnimSteps) AnimStep++; - else if(AnimZoomOut && AnimStep > 20) + else if(!AnimZoom && AnimStep > 20) AnimStep--; - - /* - // zoom in animation - if(AnimZoomIn) { - BGAlpha = std::min(255.f * AnimStep * 2.f / MaxAnimSteps, 255.f); - //if(AnimStep < 0.4f * MaxAnimSteps) - //BannerAlpha = 0; - //else - //BannerAlpha = std::min(255.f * (AnimStep - 0.4f * MaxAnimSteps) / (0.6f * MaxAnimSteps), 255.f); - } - // zoom out animation - else { - BGAlpha = std::min(255.f * (MaxAnimSteps-AnimStep) * 2.f / MaxAnimSteps, 255.f); - //if((MaxAnimSteps - AnimStep) < 0.4f * MaxAnimSteps) - //BannerAlpha = 0; - //else - //BannerAlpha = std::min(255.f * ((MaxAnimSteps - AnimStep) - 0.4f * MaxAnimSteps) / (0.6f * MaxAnimSteps), 255.f); - } - */ - float curAnimStep = ((float)(MaxAnimSteps - AnimStep)/(float)MaxAnimSteps); float stepx1 = -AnimPosX; @@ -134,10 +111,6 @@ void BannerWindow::Animate(void) float left = AnimPosX + stepx1 * curAnimStep; float right = AnimPosX + fIconWidth + stepx2 * curAnimStep; - // set main projection of all GUI stuff if we are using the banner browser - //if(dynamic_cast(browserMenu->GetGameBrowser()) != NULL) - // guOrtho(FSProjection2D, top, bottom, left, right, 0, 10000); - float xDiff = 0.5f * (video->wide() ? (video->vid_50hz() ? 616 : 620.0f) : 608.0f); float yDiff = 0.5f * (video->vid_50hz() ? 448.0f : 470.0f); @@ -163,18 +136,14 @@ void BannerWindow::Animate(void) } // last animation step else if(AnimationRunning) - { - // set back original projection and stop animation/render of the browser (save some CPU ;P) - //memcpy(&video->projMtx, &originalProjection, sizeof(Mtx44)); AnimationRunning = false; - } } void BannerWindow::Draw(void) { // draw a black background image first if(AnimStep >= MaxAnimSteps) - DrawRectangle(0.0f, 0.0f, video->width(), video->height(), (GXColor) {0, 0, 0, BGAlpha}, true); + DrawRectangle(0.0f, 0.0f, video->width(), video->height(), (GXColor) {0, 0, 0, 255.f}); if(changing) return; @@ -182,10 +151,6 @@ void BannerWindow::Draw(void) // Run window animation Animate(); - // no banner alpha means its the start of the animation - if(BannerAlpha == 0) - return; - // cut the unneeded crap Mtx mv1, mv2, mv3; guMtxIdentity(mv2); @@ -221,14 +186,12 @@ void BannerWindow::Draw(void) if(gameBanner->getBanner()) { - gameBanner->getBanner()->Render(modelview, ScreenProps, video->wide(), BannerAlpha); + gameBanner->getBanner()->Render(modelview, ScreenProps, video->wide(), 255.f); gameBanner->getBanner()->AdvanceFrame(); } // Setup GX ReSetup_GX(); - - //if(AnimationRunning) GX_SetScissor(0, 0, video->width(), video->height()); // Clear and back to previous projection @@ -237,7 +200,7 @@ void BannerWindow::Draw(void) GX_InvalidateTexAll(); } -void BannerWindow::DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color, u8 filled) +void BannerWindow::DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color) { Mtx modelViewMtx; guMtxIdentity(modelViewMtx); @@ -250,26 +213,13 @@ void BannerWindow::DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor co GX_SetVtxDesc(GX_VA_CLR0, GX_DIRECT); GX_SetVtxDesc(GX_VA_TEX0, GX_NONE); - u8 fmt; - long n; int i; f32 x2 = x + width; f32 y2 = y + height; guVector v[] = { { x, y, 0.0f }, { x2, y, 0.0f }, { x2, y2, 0.0f }, { x, y2, 0.0f }, { x, y, 0.0f } }; - if (!filled) - { - fmt = GX_LINESTRIP; - n = 5; - } - else - { - fmt = GX_TRIANGLEFAN; - n = 4; - } - - GX_Begin(fmt, GX_VTXFMT0, n); - for (i = 0; i < n; i++) + GX_Begin(GX_TRIANGLEFAN, GX_VTXFMT0, 4); + for(i = 0; i < 4; i++) { GX_Position3f32(v[i].x, v[i].y, v[i].z); GX_Color4u8(color.r, color.g, color.b, color.a); diff --git a/source/banner/BannerWindow.hpp b/source/banner/BannerWindow.hpp index f489016c..ac8e50ee 100644 --- a/source/banner/BannerWindow.hpp +++ b/source/banner/BannerWindow.hpp @@ -34,15 +34,14 @@ class BannerWindow void DeleteBanner(); void LoadBanner(Banner *banner, CVideo *vid, u8 *font1, u8 *font2); int GetSelectedGame() { return gameSelected; } + bool GetZoomSetting() { return AnimZoom; } void Draw(void); - void ZoomIn(void); - void PauseZoom(void); - void ZoomOut(void); + bool ToogleZoom(void); protected: int MainLoop(); void Animate(void); void ChangeGame(Banner *banner); - void DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color, u8 filled); + void DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color); void ReSetup_GX(void); static const float fBannerWidth = 608.f; @@ -61,23 +60,20 @@ class BannerWindow int AnimStep; float AnimPosX, AnimPosY; float fAnimScale; - bool AnimZoomIn; - bool AnimZoomOut; + bool AnimZoom; bool AnimationRunning; - bool oldAnimationRunning; bool changing; - u8 BGAlpha; - u8 BannerAlpha; - Mtx modelview; Mtx44 projection; - Mtx44 originalProjection; Vec2f ScreenProps; AnimatedBanner *gameBanner; u8 *sysFont1; u8 *sysFont2; + bool FontLoaded; }; +extern BannerWindow *m_banner; + #endif diff --git a/source/menu/menu.cpp b/source/menu/menu.cpp index fc287041..bd9b3c6a 100644 --- a/source/menu/menu.cpp +++ b/source/menu/menu.cpp @@ -112,7 +112,6 @@ extern const u8 checkboxs_png[]; SmartBuf m_wbf1_font; SmartBuf m_wbf2_font; -BannerWindow m_banner; CMenu::CMenu(CVideo &vid) : m_vid(vid) @@ -143,6 +142,7 @@ CMenu::CMenu(CVideo &vid) : m_base_font_size = 0; m_current_view = COVERFLOW_USB; m_Emulator_boot = false; + m_banner = new BannerWindow; } void CMenu::init(void) @@ -477,7 +477,7 @@ void CMenu::cleanup(bool ios_reload) m_cf.stopCoverLoader(); m_cf.clear(); ClearGameSoundThreadStack(); - m_banner.DeleteBanner(); + m_banner->DeleteBanner(); m_plugin.Cleanup(); _stopSounds(); @@ -1741,7 +1741,7 @@ void CMenu::_mainLoopCommon(bool withCF, bool blockReboot, bool adjusting) m_cf.draw(); m_vid.setup2DProjection(false, true); m_cf.drawEffect(); - if(!m_banner.GetSelectedGame()) + if(!m_banner->GetSelectedGame()) m_cf.drawText(adjusting); m_vid.renderAAPass(i); } @@ -1759,14 +1759,14 @@ void CMenu::_mainLoopCommon(bool withCF, bool blockReboot, bool adjusting) m_cf.draw(); m_vid.setup2DProjection(); m_cf.drawEffect(); - if(!m_banner.GetSelectedGame()) + if(!m_banner->GetSelectedGame()) m_cf.drawText(adjusting); } } m_fa.draw(); - if(m_banner.GetSelectedGame()) - m_banner.Draw(); + if(m_banner->GetSelectedGame()) + m_banner->Draw(); m_btnMgr.draw(); ScanInput(); diff --git a/source/menu/menu_game.cpp b/source/menu/menu_game.cpp index aea4a410..209a00cd 100644 --- a/source/menu/menu_game.cpp +++ b/source/menu/menu_game.cpp @@ -376,7 +376,10 @@ void CMenu::_game(bool launch) m_gameSelected = true; } - extern BannerWindow m_banner; + m_zoom_banner = m_cfg.getBool(_domainFromView(), "show_full_banner", false); + if(m_banner->GetZoomSetting() != m_zoom_banner) + m_banner->ToogleZoom(); + string id(m_cf.getId()); s8 startGameSound = 1; while(true) @@ -411,7 +414,7 @@ void CMenu::_game(bool launch) m_gameSound.FreeMemory(); CheckGameSoundThread(); ClearGameSoundThreadStack(); - m_banner.DeleteBanner(); + m_banner->DeleteBanner(); break; } else if(BTN_PLUS_PRESSED && m_GameTDBLoaded && (m_cf.getHdr()->type == TYPE_WII_GAME || m_cf.getHdr()->type == TYPE_GC_GAME || m_cf.getHdr()->type == TYPE_CHANNEL)) @@ -489,18 +492,9 @@ void CMenu::_game(bool launch) //m_gameSound.Stop(); //CheckGameSoundThread(); //break; - if(m_zoom_banner) - { - m_banner.ZoomOut(); - m_zoom_banner = false; - m_show_zone_game = false; - } - else - { - m_banner.ZoomIn(); - m_zoom_banner = true; - m_show_zone_game = false; - } + m_zoom_banner = m_banner->ToogleZoom(); + m_cfg.setBool(_domainFromView(), "show_full_banner", m_zoom_banner); + m_show_zone_game = false; } else if(m_btnMgr.selected(m_gameBtnSettings)) { @@ -1441,12 +1435,12 @@ void CMenu::_initGameMenu(CMenu::SThemeData &theme) m_gameBtnPlay = _addButton(theme, "GAME/PLAY_BTN", theme.btnFont, L"", 420, 344, 200, 56, theme.btnFontColor); m_gameBtnBack = _addButton(theme, "GAME/BACK_BTN", theme.btnFont, L"", 420, 400, 200, 56, theme.btnFontColor); - m_gameBtnFavoriteOn = _addPicButton(theme, "GAME/FAVORITE_ON", texFavOn, texFavOnSel, 460, 170, 48, 48); - m_gameBtnFavoriteOff = _addPicButton(theme, "GAME/FAVORITE_OFF", texFavOff, texFavOffSel, 460, 170, 48, 48); - m_gameBtnAdultOn = _addPicButton(theme, "GAME/ADULTONLY_ON", texAdultOn, texAdultOnSel, 532, 170, 48, 48); - m_gameBtnAdultOff = _addPicButton(theme, "GAME/ADULTONLY_OFF", texAdultOff, texAdultOffSel, 532, 170, 48, 48); - m_gameBtnSettings = _addPicButton(theme, "GAME/SETTINGS_BTN", texSettings, texSettingsSel, 460, 242, 48, 48); - m_gameBtnDelete = _addPicButton(theme, "GAME/DELETE_BTN", texDelete, texDeleteSel, 532, 242, 48, 48); + m_gameBtnFavoriteOn = _addPicButton(theme, "GAME/FAVORITE_ON", texFavOn, texFavOnSel, 460, 200, 48, 48); + m_gameBtnFavoriteOff = _addPicButton(theme, "GAME/FAVORITE_OFF", texFavOff, texFavOffSel, 460, 200, 48, 48); + m_gameBtnAdultOn = _addPicButton(theme, "GAME/ADULTONLY_ON", texAdultOn, texAdultOnSel, 532, 200, 48, 48); + m_gameBtnAdultOff = _addPicButton(theme, "GAME/ADULTONLY_OFF", texAdultOff, texAdultOffSel, 532, 200, 48, 48); + m_gameBtnSettings = _addPicButton(theme, "GAME/SETTINGS_BTN", texSettings, texSettingsSel, 460, 272, 48, 48); + m_gameBtnDelete = _addPicButton(theme, "GAME/DELETE_BTN", texDelete, texDeleteSel, 532, 272, 48, 48); m_gameBtnPlayFull = _addButton(theme, "GAME/PLAY_FULL_BTN", theme.btnFont, L"", 100, 380, 200, 56, theme.btnFontColor); m_gameBtnBackFull = _addButton(theme, "GAME/BACK_FULL_BTN", theme.btnFont, L"", 340, 380, 200, 56, theme.btnFontColor); @@ -1523,10 +1517,9 @@ void CMenu::_gameSoundThread(CMenu *m) extern SmartBuf m_wbf1_font; extern SmartBuf m_wbf2_font; - extern BannerWindow m_banner; const u8 *soundBin = banner->GetFile((char *) "sound.bin", &sndSize); - m_banner.LoadBanner(banner, &m->m_vid, m_wbf1_font.get(), m_wbf2_font.get()); + m_banner->LoadBanner(banner, &m->m_vid, m_wbf1_font.get(), m_wbf2_font.get()); delete banner; if (soundBin == NULL || (((IMD5Header *)soundBin)->fcc != 'IMD5' && ((IMD5Header *)soundBin)->fcc != 'RIFF'))