From a96ed6ac61fe4cc2ddce70c9437389b1b1b44982 Mon Sep 17 00:00:00 2001 From: scrawl <scrawl@baseoftrash.de> Date: Wed, 12 Sep 2012 19:15:29 +0200 Subject: [PATCH] splash screens on startup --- apps/openmw/mwgui/loadingscreen.cpp | 35 +++++++++++++++++++++++++- apps/openmw/mwgui/loadingscreen.hpp | 2 ++ apps/openmw/mwgui/mode.hpp | 3 +++ apps/openmw/mwgui/windowmanagerimp.cpp | 9 +++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/loadingscreen.cpp b/apps/openmw/mwgui/loadingscreen.cpp index d93cc50c3..c25fad6bc 100644 --- a/apps/openmw/mwgui/loadingscreen.cpp +++ b/apps/openmw/mwgui/loadingscreen.cpp @@ -11,6 +11,8 @@ #include "../mwbase/environment.hpp" #include "../mwbase/inputmanager.hpp" +#include "../mwbase/windowmanager.hpp" + namespace MWGui { @@ -20,6 +22,7 @@ namespace MWGui , WindowBase("openmw_loading_screen.layout", parWindowManager) , mLoadingOn(false) , mLastRenderTime(0.f) + , mFirstLoad(true) { getWidget(mLoadingText, "LoadingText"); getWidget(mProgressBar, "ProgressBar"); @@ -139,7 +142,8 @@ namespace MWGui } else { - mBackgroundMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(chain->getCompositor ("gbufferFinalizer")->getTextureInstance ("no_mrt_output", 0)->getName()); + if (!mFirstLoad) + mBackgroundMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(chain->getCompositor ("gbufferFinalizer")->getTextureInstance ("no_mrt_output", 0)->getName()); mRectangle->setVisible(true); for (unsigned int i = 0; i<chain->getNumCompositors(); ++i) @@ -171,6 +175,30 @@ namespace MWGui { setVisible(true); mLoadingOn = true; + + if (mFirstLoad) + { + /// \todo use a directory listing here + std::vector<std::string> splash; + splash.push_back ("Splash/Splash_Bonelord.tga"); + splash.push_back ("Splash/Splash_ClannDaddy.tga"); + splash.push_back ("Splash/Splash_ClannFear.tga"); + splash.push_back ("Splash/Splash_Daedroth.tga"); + splash.push_back ("Splash/Splash_Hunger.tga"); + splash.push_back ("Splash/Splash_KwamaWarrior.tga"); + splash.push_back ("Splash/Splash_Netch.tga"); + splash.push_back ("Splash/Splash_NixHound.tga"); + splash.push_back ("Splash/Splash_Siltstriker.tga"); + splash.push_back ("Splash/Splash_Skeleton.tga"); + splash.push_back ("Splash/Splash_SphereCenturion.tga"); + + mBackgroundMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(splash[rand() % splash.size()]); + mRectangle->setVisible(true); + + mWindowManager.pushGuiMode(GM_LoadingWallpaper); + } + else + mWindowManager.pushGuiMode(GM_Loading); } @@ -178,5 +206,10 @@ namespace MWGui { setVisible(false); mLoadingOn = false; + mFirstLoad = false; + mRectangle->setVisible(false); + + mWindowManager.removeGuiMode(GM_Loading); + mWindowManager.removeGuiMode(GM_LoadingWallpaper); } } diff --git a/apps/openmw/mwgui/loadingscreen.hpp b/apps/openmw/mwgui/loadingscreen.hpp index abd59db49..5cee37a51 100644 --- a/apps/openmw/mwgui/loadingscreen.hpp +++ b/apps/openmw/mwgui/loadingscreen.hpp @@ -19,6 +19,8 @@ namespace MWGui void onResChange(int w, int h); private: + bool mFirstLoad; + Ogre::SceneManager* mSceneMgr; Ogre::RenderWindow* mWindow; diff --git a/apps/openmw/mwgui/mode.hpp b/apps/openmw/mwgui/mode.hpp index 4417f7b9c..7e1adcf8b 100644 --- a/apps/openmw/mwgui/mode.hpp +++ b/apps/openmw/mwgui/mode.hpp @@ -35,6 +35,9 @@ namespace MWGui // interactive MessageBox GM_InterMessageBox, + GM_Loading, + GM_LoadingWallpaper, + GM_QuickKeysMenu }; diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index b29980b21..a4dd54e78 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -248,6 +248,8 @@ void WindowManager::updateVisible() mSpellWindow->setVisible(false); mQuickKeysMenu->setVisible(false); + mHud->setVisible(true); + // Mouse is visible whenever we're not in game mode MyGUI::PointerManager::getInstance().setVisible(isGuiMode()); @@ -340,6 +342,13 @@ void WindowManager::updateVisible() case GM_Journal: mJournal->setVisible(true); break; + case GM_LoadingWallpaper: + mHud->setVisible(false); + MyGUI::PointerManager::getInstance().setVisible(false); + break; + case GM_Loading: + MyGUI::PointerManager::getInstance().setVisible(false); + break; default: // Unsupported mode, switch back to game break;