forked from mirror/openmw-tes3mp
Small delay before the loading screen shows
Kinda irritating to have the loading bar pop up for a fraction of a second.
This commit is contained in:
parent
8552a9d82c
commit
69f234d97b
2 changed files with 55 additions and 30 deletions
|
@ -235,13 +235,38 @@ namespace MWGui
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadingScreen::draw()
|
bool LoadingScreen::needToDrawLoadingScreen()
|
||||||
{
|
{
|
||||||
if (mTimer.time_m() > mLastRenderTime + (1.0/mTargetFrameRate) * 1000.0)
|
if ( mTimer.time_m() <= mLastRenderTime + (1.0/mTargetFrameRate) * 1000.0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// the minimal delay before a loading screen shows
|
||||||
|
const float initialDelay = 0.05;
|
||||||
|
|
||||||
|
bool alreadyShown = (mLastRenderTime > mLoadingOnTime);
|
||||||
|
float diff = (mTimer.time_m() - mLoadingOnTime);
|
||||||
|
|
||||||
|
if (!alreadyShown)
|
||||||
{
|
{
|
||||||
|
// bump the delay by the current progress - i.e. if during the initial delay the loading
|
||||||
|
// has almost finished, no point showing the loading screen now
|
||||||
|
diff -= mProgress / static_cast<float>(mProgressBar->getScrollRange()) * 100.f;
|
||||||
|
}
|
||||||
|
|
||||||
bool showWallpaper = (MWBase::Environment::get().getStateManager()->getState()
|
bool showWallpaper = (MWBase::Environment::get().getStateManager()->getState()
|
||||||
== MWBase::StateManager::State_NoGame);
|
== MWBase::StateManager::State_NoGame);
|
||||||
|
if (!showWallpaper && diff < initialDelay*1000)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoadingScreen::draw()
|
||||||
|
{
|
||||||
|
if (!needToDrawLoadingScreen())
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool showWallpaper = (MWBase::Environment::get().getStateManager()->getState()
|
||||||
|
== MWBase::StateManager::State_NoGame);
|
||||||
if (showWallpaper && mTimer.time_m() > mLastWallpaperChangeTime + 5000*1)
|
if (showWallpaper && mTimer.time_m() > mLastWallpaperChangeTime + 5000*1)
|
||||||
{
|
{
|
||||||
mLastWallpaperChangeTime = mTimer.time_m();
|
mLastWallpaperChangeTime = mTimer.time_m();
|
||||||
|
@ -269,6 +294,5 @@ namespace MWGui
|
||||||
|
|
||||||
mLastRenderTime = mTimer.time_m();
|
mLastRenderTime = mTimer.time_m();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ namespace MWGui
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void findSplashScreens();
|
void findSplashScreens();
|
||||||
|
bool needToDrawLoadingScreen();
|
||||||
|
|
||||||
const VFS::Manager* mVFS;
|
const VFS::Manager* mVFS;
|
||||||
osg::ref_ptr<osgViewer::Viewer> mViewer;
|
osg::ref_ptr<osgViewer::Viewer> mViewer;
|
||||||
|
|
Loading…
Reference in a new issue